【问题标题】:Modify LD_LIBRARY_PATH JAVA_LIBRARY and CLASSPATH in hadoop job修改hadoop作业中的LD_LIBRARY_PATH JAVA_LIBRARY和CLASSPATH
【发布时间】:2012-11-23 02:15:38
【问题描述】:

在集群上运行 hadoop 作业之前,我需要修改 LD_LIBRARY_PATH JAVA_LIBRARY_PATH 和 CLASSPATH。在 LD_LIBRARY_PATH 和 JAVA_LIBRARY_PATH 中,我需要添加一些运行作业时需要的 jar 的位置,因为这些 jar 在我的集群中可用,类似于 CLASSPATH。

我有一个 3 NODE 集群,我需要修改所有 3 个数据节点的 LD_LIBRARY_PATH 和 CLASSPATH,以便将集群节点上可用的 jar 添加到类路径中,以便在运行时可以使用以下 jar作业,因为我在运行作业以使用集群节点上所有可用的 jar 时避免 jar 分发。我已经尝试了以下给出的选项

1.我试过修改hadoop-env.sh来修改CLASSPATH

export HADOOP_TASKTRACKER_OPTS="-classpath:/opt/oracle/oraloader-2.0.0-2/jlib/

但上面的东西修改了 HADOOP_CLASSPATH 而不是 CLASSPATH

  1. 对于 LD_LIBRARY_PATH 和 JAVA_LIBRARY_PATH,我已经厌倦了在 mapred-site.xml 中添加下面给出的属性作为建议的我的位置,但这没有用。

    mapred.child.env

    JAVA_LIBRARY_PATH=/opt/oracle/oraloader-2.0.0-2/lib/

    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle/oraloader-2.0.0-2/lib/

    用户为任务跟踪器子进程添加了环境变量。示例: 1) A=foo 这会将环境变量 A 设置为 foo 2) B=$B:c 这是继承 tasktracker 的 B 环境变量。 描述>

我还重新启动了所有 3 个数据节点、所有 tasktraker 和 2 个 NAMENOdes。仍然没有设置这些变量,我的 hadoop 作业无法找到运行测试所需的所有 jar 文件。

错误日志::

错误:java.lang.ClassNotFoundException: oracle.i18n.text.OraDateFormat 在 java.net.URLClassLoader$1.run(URLClassLoader.java:202)

当我在我的集​​群节点上回显 HADOOP_CLASSPATH 时,运行 hadoop 作业所需的所有内容都即将到来。但我认为需要在 JAVA_LIBRARY_PATH 中添加以下 jar,但它不会出现。

【问题讨论】:

  • 我不知道为什么,但是你之前的问题和我的回答被转移到了超级用户:superuser.com/questions/513221/…
  • @ChrisWhite 我尝试了以下方法,以便在运行作业时可以使用这些罐子。你能否建议我应该做些什么来解决这个问题。

标签: linux apache hadoop classpath hdfs


【解决方案1】:

不要重新发明轮子。

如果您的实现使用 ToolRunner(如果您在 Java 中实现 map-reduce,您确实应该使用它),那么您可以使用 -libjars jar1,jar2 将您的 jar 发送到集群。

查看 Tom White 的“Hadoop:权威指南”中的“辅助数据分布”部分。

【讨论】:

  • 嗨 Yevgen,我认为 -libjars 会将 jar 复制到集群中,并将复制到分布式缓存,因为我不想发送 jar,而是想使用已经存在的 jar在集群节点 EG:假设我有目录 /dir1/dis2/* ,其中运行 hadoop 作业所需的所有 jar 都存在于集群节点上。我想将 jars 添加到类路径中,以便这些 jars 可用。
  • @AshishSharma 首先将 jar 复制到 HDFS 并通过以下方式将它们添加到 jobrunner 类的类路径中:hadoop.apache.org/docs/stable/api/org/apache/hadoop/filecache/…
  • @LorandBendig 我无权访问实际代码,因此无法修改您提到的类。我只是有一个命令,它将在我的集群节点上运行 hadoop 作业。在运行 hadoop 作业时,我需要在集群节点上添加一些可用的 jar。
  • @AshishSharma 我看不出如何在运行作业时添加罐子。另一种选择是将 jar 复制到所有节点上的 $HADOOP_HOME/lib 并重新启动集群
  • 我的理解是 hadoop-env.sh 是调整 Hadoop 集群的 CLASSPATH/LD_LIBRARY_PATH 设置的好地方(由管理员)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 2013-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多