0

我在 Apache Giraph 中运行 SimpleOutDegreeCountComputation 程序时收到以下错误。我使用 JsonLongDoubleFloatDouble 作为输入格式。

$HADOOP_HOME/bin/hadoop jar $GIRAPH_HOME/giraph-examples/target/giraph-examples-1.2.0-SNAPSHOT-for-hadoop-1.2.1-jar-with-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 不需要。线程“主”java.lang.IllegalStateException 中的异常:checkClassTypes:顶点值类型不可分配,计算 - org.apache.hadoop.io.LongWritable 类,VertexInputFormat - org.apache 的 org.apache.hadoop.io.DoubleWritable 类。 giraph.job.GiraphConfigurationValidator.checkAssignable(GiraphConfigurationValidator.java:381) 在 org.apache.giraph.job.GiraphConfigurationValidator.verifyVertexInputFormatGenericTypes(GiraphConfigurationValidator.java:228) 在 org.apache.giraph.job.GiraphConfigurationValidator。

4

2 回答 2

1

正如日志所说,您的计算,例如 SimpleOutDegreeCountComputation 需要 LongWritable 格式的顶点 ID,而您在 hdfs 中的数据是 DoubleWritable。因此,有两个选择:将 SimpleOutDegreeCountComputation 更改为使用 DoubleWritable 或将数据从 DoubleWritable 转换为 LongWritable。

于 2015-05-27T12:59:04.480 回答
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 签名。

于 2017-03-28T04:45:04.467 回答