jar - Hadoop HADOOP_CLASSPATH 问题

标签 jar hadoop classpath

这个问题不是指在整个集群中分发 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 被忽略了。<

最佳答案

如果允许设置 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

关于jar - Hadoop HADOOP_CLASSPATH 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12940239/

相关文章:

python - Hadoop获得了Expected JSON。是否启用了WebHDFS?得到了 ''

java - 从Hive连接到HDFS(JSON文件)

hadoop - 如何在 Dataproc 集群启动时自动安装 Python 库?

java - 使用 -cp 或 -classpath 手动设置 CLASSPATH 无法按预期工作

java - 主类运行具有依赖项的可执行 jar 时出现 ClassNotFoundException

java - Eclipse 中的 LookAndFeel Java Synthetica

Eclipse "Open Type"窗口显示双

spring - 如何访问 JAR 文件中的属性?

java - JBoss 6.2 上 Web 应用程序的 .ear 文件中 Java 存档的类路径

java - 为什么在运行以下代码时会收到 `Could not find or load main class`?