hadoop hadoop\u类路径问题

tag5nh1u  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(466)

这个问题并不是指在整个集群中分发jar以供工作人员使用。
它指的是在客户机上指定多个附加库。更具体地说:我尝试运行以下命令以检索sequencefile的内容:

  1. /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file

它向我抛出了一个错误: text: java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable 我有一个叫做doublearraywritable的可写类。事实上,在另一台电脑上一切都很好。
我试着设置 HADOOP_CLASSPATH 包含包含该类但没有结果的jar。实际上,跑步时:

  1. /path/to/hadoop/script classpath

结果不包含我添加到hadoop\u类路径的jar。
问题是:在运行hadoop时,如何指定额外的库(除了hadoop脚本在类路径中自动包含的库之外,通过额外的含义指定其他库)
更多有用的信息:
我不能修改hadoop.sh脚本(也不能修改任何相关的脚本)
我无法将库复制到hadoop安装目录下的/lib目录
从hadoop.sh运行的hadoop-env.sh中有以下行: export HADOOP_CLASSPATH=$HADOOP_HOME/lib 这可能解释了为什么我的hadoop\u classpath env var被忽略了。

pxy2qtax

pxy2qtax1#

尝试将jar文件添加到默认的classpath变量中,并将hadoop\u classpath附加到其中。然后执行你的命令。 export CLASSPATH=/your/jar/file/myjar.jar:$CLASSPATH:$HADOOP_CLASSPATH /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file

pxyaymoc

pxyaymoc2#

如果有人想检查hadoop类路径,请输入 hadoop classpath 在终点站。
要编译它,请使用以下命令: javac -cp $(hadoop classpath):path/to/jars/* java_file.java

shstlldc

shstlldc3#

如果允许你设置 HADOOP_CLASSPATH 然后

  1. export HADOOP_CLASSPATH=/path/to/jar/myjar.jar:$HADOOP_CLASSPATH; \
  2. hadoop fs -text /path/in/HDFS/to/my/file

我会做的。因为在你的例子中,这个变量在 hadoop-env.sh 因此,请考虑使用 -libjars 替代选项:

  1. hadoop fs -libjars /path/to/jar/myjar.jar -text /path/in/HDFS/to/my/file

或者调用 FsShell 手动:

  1. java -cp $HADOOP_HOME/lib/*:/path/to/jar/myjar.jar:$CLASSPATH \
  2. org.apache.hadoop.fs.FsShell -conf $HADOOP_HOME/conf/core-site.xml \
  3. -text /path/in/HDFS/to/my/file

相关问题