Hadoop HADOOP_CLASSPATH问题

Raz*_*van 8 hadoop jar classpath

这个问题并不是指在整个集群中分发罐子以供工人使用它们.

它指的是在客户端计算机上指定许多其他库.更具体一点:我正在尝试运行以下命令以检索SequenceFile的内容:

   /path/to/hadoop/script fs -text /path/in/HDFS/to/my/file
Run Code Online (Sandbox Code Playgroud)

它抛出了这个错误: text: java.io.IOException: WritableName can't load class: util.io.DoubleArrayWritable

我有一个名为DoubleArrayWritable的可写类.事实上,在另一台计算机上,一切运行良好.

我试图设置HADOOP_CLASSPATH包含该类但没有结果的jar.实际上,在运行时:

   /path/to/hadoop/script classpath 
Run Code Online (Sandbox Code Playgroud)

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

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

一些可能有用的信息:

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

Lor*_*dig 15

如果你被允许设置HADOOP_CLASSPATH那么

export HADOOP_CLASSPATH=/path/to/jar/myjar.jar:$HADOOP_CLASSPATH; \
    hadoop fs -text /path/in/HDFS/to/my/file
Run Code Online (Sandbox Code Playgroud)

会做的.因为在您的情况下,此变量被覆盖,hadoop-env.sh因此请考虑使用该-libjars选项:

hadoop fs -libjars /path/to/jar/myjar.jar -text /path/in/HDFS/to/my/file
Run Code Online (Sandbox Code Playgroud)

或者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
Run Code Online (Sandbox Code Playgroud)