3

在集群上运行 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</名称>

    <value>JAVA_LIBRARY_PATH=/opt/oracle/oraloader-2.0.0-2/lib/</value>

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

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

    </属性>

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

错误日志::

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

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

4

1 回答 1

0

不要重新发明轮子。

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

查看 Tom White 的“Hadoop:权威指南”中的“Side Data Distribution”部分。

于 2012-12-05T09:49:54.367 回答