8

这个问题并不是指在整个集群中分发 jar 以供工作人员使用。

它指的是在客户端机器上指定一些附加库。更具体地说:我正在尝试运行以下命令以检索 SequenceFile 的内容:

   /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。实际上,运行时:

   /path/to/hadoop/script classpath 

结果不包含我添加到 HADOOP_CLASSPATH 的 jar。

问题是:在运行 hadoop 时如何指定额外的库(额外的意思是除了 hadoop 脚本在类路径中自动包含的库之外的其他库)

更多信息可能会有所帮助:

  • 我不能修改 hadoop.sh 脚本(也不能修改任何相关的脚本)
  • 无法将我的库复制到hadoop安装目录下的/lib目录下
  • 在从 hadoop.sh 运行的 hadoop-env.sh 中有这一行:export HADOOP_CLASSPATH=$HADOOP_HOME/lib这可能解释了为什么我的 HADOOP_CLASSPATH env var 被忽略了。
4

3 回答 3

15

如果你被允许设置HADOOP_CLASSPATH那么

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

将完成这项工作。由于在您的情况下,此变量被覆盖hadoop-env.sh因此请考虑使用该-libjars选项:

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

FsShell或者手动调用:

java -cp $HADOOP_HOME/lib/*:/path/to/jar/myjar.jar:$CLASSPATH \
org.apache.hadoop.fs.FsShell -conf $HADOOP_HOME/conf/core-site.xml \
-text /path/in/HDFS/to/my/file
于 2012-10-17T21:20:00.250 回答
4

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

于 2019-03-08T11:23:35.097 回答
0

尝试将您的 jar 文件添加到默认的 CLASSPATH 变量中,并将 HADOOP_CLASSPATH 附加到它。然后执行你的命令。

export CLASSPATH=/your/jar/file/myjar.jar:$CLASSPATH:$HADOOP_CLASSPATH /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file

于 2012-10-18T05:51:17.470 回答