我在Apache Giraph中运行SimpleOutDegreeCountComputation程序时收到以下错误。我使用JsonLongDoubleFloatDouble作为输入格式。
$ HADOOP_HOME / bin / hadoop jar $ GIRAPH_HOME / giraph-例子/目标/ giraph-例子-1.2.0-SNAPSHOT换的Hadoop-1.2.1-JAR与 - dependencies.jar org.apache.giraph.GiraphRunner org.apache.giraph.examples.SimpleOutDegreeCountComputation -vif org.apache.giraph.io.formats.JsonLongDoubleFloatDoubleVertexInputFormat -vip /user/hduser/input/tiny_graph.txt -vof org.apache.giraph.io.formats.IdWithValueTextOutputFormat -op / user / hduser / output / Simpleout -w 1警告:$ HADOOP_HOME是 弃用。
15/05/18 12:56:04 INFO utils.ConfigurationUtils:没有边输入格式 指定。确保您的InputFormat不需要一个。 15/05/18 12:56:04 INFO utils.ConfigurationUtils:没有边输出格式 指定。确保您的OutputFormat不需要一个。例外 thread“main”java.lang.IllegalStateException:checkClassTypes:vertex 值类型不可分配,计算 - 类 org.apache.hadoop.io.LongWritable,VertexInputFormat - 类 org.apache.hadoop.io.DoubleWritable at org.apache.giraph.job.GiraphConfigurationValidator.checkAssignable(GiraphConfigurationValidator.java:381) 在 org.apache.giraph.job.GiraphConfigurationValidator.verifyVertexInputFormatGenericTypes(GiraphConfigurationValidator.java:228) 在 org.apache.giraph.job.GiraphConfigurationValidator.validateConfiguration(GiraphConfigurationValidator.java:141) 在 org.apache.giraph.utils.ConfigurationUtils.parseArgs(ConfigurationUtils.java:222) 在org.apache.giraph.GiraphRunner.run(GiraphRunner.java:74)at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:79)at org.apache.giraph.GiraphRunner.main(GiraphRunner.java:124)at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:606)at org.apache.hadoop.util.RunJar.main(RunJar.java:160) ^ [Ahduser @迪帕 - 灵-N5050:在/ usr /本地/ Hadoop的/ bin中$ $ HADOOP_HOME /斌/ Hadoop的 jGIRAPH_HOME / giraph-实例/目标/ giraph-例子-1.2.0-SNAPSHOT换的hadoop-1.2.1-罐与 - dependencies.jar org.apache.giraph.GiraphRunner org.apache.giraph.examples.SimpleOutDegreeCountComputation -vif org.apache.giraph.io.formats.JsonLongDoubleFloatDoubleVertexInputFormat -vip /user/hduser/input/tiny_graph.txt -vof org.apache.giraph.io.formats.IdWithValueTextOutputFormat -op / user / hduser / output / Simpleout -w 1
答案 0 :(得分:1)
因为日志说你的计算,例如SimpledutDegreeCountComputation需要longWritable格式的vertex`sid,而hdfs中的数据是DoubleWritable。因此,有两个选择:更改SimpleOutDegreeCountComputation以使用DoubleWritable或将数据从DoubleWritable转换为LongWritable。
答案 1 :(得分:1)
这是因为以下原因。 SimpleOutDegreeCountComputation具有以下签名 -
public class SimpleOutDegreeCountComputation extends
BasicComputation<LongWritable, LongWritable, DoubleWritable, DoubleWritable{
//Logic for out degree
}
这里,BasicComputation要求
>1. Long Vertex ID
>2. Long Vertex Value
>3. Double Edge weight
>4. Double message type
您正在尝试使用JsonLongDoubleFloatDouble格式进行输入。哪个给你
>1. Long Vertex ID
>2. Double Vertex Value
>3. Float Edge Weight
>4. Double message type
相应地更改程序中的BasicComputation签名。