hadoop1.2.1:将jar放在类路径的hdfs中

mqkwyuun  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(450)

我有一个hadoop的工作,需要几个第三方jar。我已经把它们放在类路径上了 conf/hadoop-env.sh ```
export HADOOP_CLASSPATH=hdfs://name.node.private.ip:9000/home/ec2-user/hadoop-gremlin-libs/

当我跑的时候 `$ bin/hadoop classpath` 如您所见,此路径包含在内。但是,当我运行作业时,它会在初始化时抛出一个错误:

Error: java.lang.ClassNotFoundException: com.google.common.collect.Lists
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.apache.giraph.conf.AllOptions.(AllOptions.java:37)
at org.apache.giraph.conf.ClassConfOption.(ClassConfOption.java:47)
at org.apache.giraph.conf.ClassConfOption.create(ClassConfOption.java:60)
at org.apache.giraph.conf.GiraphConstants.(GiraphConstants.java:62)
at org.apache.giraph.conf.GiraphClasses.readFromConf(GiraphClasses.java:152)
at org.apache.giraph.conf.GiraphClasses.<init (GiraphClasses.java:142)
at org.apache.giraph.conf.ImmutableClassesGiraphConfiguration.(ImmutableClassesGiraphConfiguration.java:93)
at org.apache.giraph.bsp.BspOutputFormat.getOutputCommitter(BspOutputFormat.java:56)
at org.apache.hadoop.mapred.Task.initialize(Task.java:515)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)

这个特定的类应该打包在guava中,guava包含在类路径中:

[ec2-user]$ bin/hadoop dfs -ls /home/ec2-user/hadoop-gremlin-libs | grep guava
-rw-r--r-- 3 ec2-user supergroup 0 2017-04-20 17:57 /home/ec2-user/hadoop-gremlin-libs/guava-18.0.jar

我将提交gremlin的工作如下:

graph = GraphFactory.open('conf/hadoop.properties')
result = graph.compute().program(MyVertexProgram.build().create()).submit().get()

我还尝试将jar放在本地文件系统上,并收到相同的错误。有人知道如何解决这个问题吗?
brtdzjyr

brtdzjyr1#

我不知道你到底在做什么样的工作,但看看那些类,它似乎是一个mapreduce2maptask,当你遇到异常时,它正试图设置。
我认为您可能更新了错误的类路径值。您正在更新hadoop类路径,而不是mapreduce类路径。
您很可能需要更新集群管理器应用程序中的hadoop clusters/mapreduce2应用程序类路径值,或者集群正在使用的它们的站点xml文件。您应该有一个mapred-site.xml文件,该文件具有名为mapreduce.application.classpath的属性,该属性有自己的类路径以指向执行作业所需的jar,请将您的路径添加到mapreduce.application.classpath值中的类路径。
第二个是yarn,如果yarn需要任何其他jar,则更新yarn.application.classpath属性,因为yarn类路径指向有助于yarn运行的jar。如果有,您可以在集群管理器应用程序中轻松地更新它,或者手动编辑yarn-site.xml来添加这个类路径。
唯一的另一个选择是,如果您的客户机软件程序有自己的专用mapred-site.xml文件,那么它将读取该文件以从中获取mapreduce.application.classpath。如果可能的话,您可以在您的软件支持的情况下修改客户端站点上的mapreduce.application.classpath。一些客户机程序可能有自己的类路径,或者读取hadoop集群站点xml文件以连接到集群。
从异常中显示的内容,我非常确定您需要mapreduce.application.path中的这个jar,而不是hadoop类路径。

相关问题