在运行群集上的hadoop作业之前,我需要修改LD_LIBRARY_PATH JAVA_LIBRARY_PATH和CLASSPATH。 在LD_LIBRARY_PATH和JAVA_LIBRARY_PATH中,我需要添加运行作业所需的一些jar的位置,因为这些jar可以在我的集群中使用,与CLASSPATH类似。
我有一个3 NODE集群,我需要修改所有3个数据节点的LD_LIBRARY_PATH和CLASSPATH,以便在我的集群节点添加到classpath的jar文件中,以便在运行作业时可以使用以下jar作为i在运行作业时避免jar分发,以便在集群节点上使用所有可用的jar。 我已经尝试了以下给出的选项
我试过修改hadoop-env.sh来修改CLASSPATH
export HADOOP_TASKTRACKER_OPTS="-classpath:/opt/oracle/oraloader-2.0.0-2/jlib/
但是上面的东西修改HADOOP_CLASSPATH不是CLASSPATH
对于LD_LIBRARY_PATH和JAVA_LIBRARY_PATH我已经厌倦了在mapred-site.xml中添加下面给出的属性作为build议我的地方,但没有奏效。
<property>
<name> mapred.child.env </ name>
<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>
<description>用户为任务跟踪器subprocess添加了环境variables。 例如:1)A = foo这将设置envvariablesA为foo 2)B = $ B:c这是inheritancetasktracker的B envvariables。 </ description>
</ property>
我也重新启动了我的所有3个数据节点,所有任务拖拉机和2个NAMENOdes。 仍然这些variables没有设置,我的hadoop作业无法find运行testing所需的所有jar文件。
错误日志::
错误:java.lang.ClassNotFoundException:java.net.URLClassLoader上的oracle.i18n.text.OraDateFormat $ 1.run(URLClassLoader.java:202)
当我在群集节点上回显HADOOP_CLASSPATH时,所有运行hadoop作业所需的时间都到了。 但是我认为下面的jar需要在JAVA_LIBRARY_PATH中添加,但是它不会到来。
不要重新发明轮子。
如果你的实现使用了ToolRunner
(如果你在Java中实现map-reduce,你真的应该使用它),那么你可以使用-libjars jar1,jar2
把你的jar发送到集群。
查看Tom White的“Hadoop:权威指南”中的“Side Data Distribution”部分。