Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Giraph:在自定义作业上未找到类异常_Java_Hadoop_Giraph - Fatal编程技术网

Java Giraph:在自定义作业上未找到类异常

Java Giraph:在自定义作业上未找到类异常,java,hadoop,giraph,Java,Hadoop,Giraph,我正在使用Giraph开发一个算法。我正在使用Hadoop 1.2.1上的版本1.0.0 我是开发Giraph的新手,所以请温柔一点;) 我的自定义作业分为三个包: io:包含输入和输出格式类 布局:包含顶点类、聚合器类和MasterCompute类 run:包含实现类的工具 我在Eclipse中使用构建的giraph核心jar作为引用对其进行编程,然后将其导出到另一个名为“customJob.jar”的jar中 以下是我在Hadoop中启动它的方式: hadoop jar /opt/ha

我正在使用Giraph开发一个算法。我正在使用Hadoop 1.2.1上的版本1.0.0

我是开发Giraph的新手,所以请温柔一点;)

我的自定义作业分为三个包:

  • io:包含输入和输出格式类
  • 布局:包含顶点类、聚合器类和MasterCompute类
  • run:包含实现类的工具
我在Eclipse中使用构建的giraph核心jar作为引用对其进行编程,然后将其导出到另一个名为“customJob.jar”的jar中

以下是我在Hadoop中启动它的方式:

 hadoop jar /opt/hadoop/lib/customJob.jar layout.customrVertex -vif 
 io.JSONLongDoubleFloatDoubleToMapVertexInputFormat -vip /users/hadoop/input/tiny_graph.txt
 -of io.VertexIdAndPositionOutputFormat -op /users/hadoop/output/customJob -w 1 
作业开始,进入MapReduce阶段,然后失败:

14/12/16 17:39:35 INFO job.GiraphJob: run: Since checkpointing is disabled (default), do not allow any task retries (setting mapred.map.max.attempts = 0, old value = 4)
14/12/16 17:39:37 INFO mapred.JobClient: Running job: job_201412161121_0025
14/12/16 17:39:38 INFO mapred.JobClient:  map 0% reduce 0%
14/12/16 17:39:49 INFO mapred.JobClient: Job complete: job_201412161121_0025
14/12/16 17:39:49 INFO mapred.JobClient: Counters: 4
14/12/16 17:39:49 INFO mapred.JobClient:   Job Counters 
14/12/16 17:39:49 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=9487
14/12/16 17:39:49 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
14/12/16 17:39:49 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
14/12/16 17:39:49 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=0
对JobTracker的进一步调查表明,JobSetup失败,出现ClassNotFoundException错误:

java.lang.RuntimeException: java.lang.RuntimeException: java.lang.ClassNotFoundException: layout.customVertex
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:889)
at org.apache.giraph.conf.ClassConfOption.get(ClassConfOption.java:94)
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.<init>(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:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: layout.customVertex
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:857)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:881)
... 12 more
Caused by: java.lang.ClassNotFoundException: layout.customVertex
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:274)
at org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:810)
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:855)
... 13 more
java.lang.RuntimeException:java.lang.RuntimeException:java.lang.ClassNotFoundException:layout.customVertex
位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:889)
位于org.apache.giraph.conf.ClassConfOption.get(ClassConfOption.java:94)
位于org.apache.giraph.conf.GiraphClasses.readFromConf(GiraphClasses.java:152)
位于org.apache.giraph.conf.GiraphClasses(GiraphClasses.java:142)
位于org.apache.giraph.conf.ImmutableClassesGiraphConfiguration。(ImmutableClassesGiraphConfiguration.java:93)
位于org.apache.giraph.bsp.BspOutputFormat.getOutputCommitter(BspOutputFormat.java:56)
位于org.apache.hadoop.mapred.Task.initialize(Task.java:515)
位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:347)
位于org.apache.hadoop.mapred.Child$4.run(Child.java:255)
位于java.security.AccessController.doPrivileged(本机方法)
位于javax.security.auth.Subject.doAs(Subject.java:415)
位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1190)
位于org.apache.hadoop.mapred.Child.main(Child.java:249)
原因:java.lang.RuntimeException:java.lang.ClassNotFoundException:layout.customVertex
位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:857)
位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:881)
... 还有12个
原因:java.lang.ClassNotFoundException:layout.customVertex
在java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:425)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:274)
位于org.apache.hadoop.conf.Configuration.getClassByName(Configuration.java:810)
位于org.apache.hadoop.conf.Configuration.getClass(Configuration.java:855)
... 还有13个
Hadoop配置是Giraph快速入门页面中建议的配置

如果您能提供任何帮助/建议,我将不胜感激:)


提前谢谢

首先更改hadoop-env.sh并将jar文件添加到hadoop\u类路径。
然后,使用-libjars(jar/jar\u file.jar的路径)添加对jar文件的引用。

我找到了一种解决方法:如果将自定义jar复制到hadoop类路径中的文件夹中,然后重新启动任务和作业跟踪器,那么作业将正确加载。无论如何,仍有一些疑问。我不知道这是否是一个解决方案:首先,如果我在通过命令行启动作业时用自己的jar向Hadoop提供必要的类文件,为什么我必须在Hadoop类路径中复制它?再说一遍,为什么要重启Hadoop?这在单机上可能是可行的,但在集群上肯定不行。