这个问题并不是指在整个集群中分发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\u类路径的jar。
问题是:在运行hadoop时,如何指定额外的库(除了hadoop脚本在类路径中自动包含的库之外,通过额外的含义指定其他库)
更多有用的信息:
我不能修改hadoop.sh脚本(也不能修改任何相关的脚本)
我无法将库复制到hadoop安装目录下的/lib目录
从hadoop.sh运行的hadoop-env.sh中有以下行: export HADOOP_CLASSPATH=$HADOOP_HOME/lib
这可能解释了为什么我的hadoop\u classpath env var被忽略了。
3条答案
按热度按时间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
pxyaymoc2#
如果有人想检查hadoop类路径,请输入
hadoop classpath
在终点站。要编译它,请使用以下命令:
javac -cp $(hadoop classpath):path/to/jars/* java_file.java
shstlldc3#
如果允许你设置
HADOOP_CLASSPATH
然后我会做的。因为在你的例子中,这个变量在
hadoop-env.sh
因此,请考虑使用-libjars
替代选项:或者调用
FsShell
手动: