Hadoop流式排序错误

Hadoop流式排序错误,hadoop,hadoop-streaming,Hadoop,Hadoop Streaming,我正在尝试使用hadoop流对文件进行排序 文件格式如下 <ID> <TextID> <Offset> <Text> - where ID is alpha numeric, TextID is alpha numeric and Offset is numeric 但我在映射程序中得到以下例外: java.io.IOException: Type mismatch in key from map: expected org.apache.

我正在尝试使用hadoop流对文件进行排序

文件格式如下

<ID> <TextID> <Offset> <Text> - where ID is alpha numeric, TextID is alpha numeric and Offset is numeric
但我在映射程序中得到以下例外:

   java.io.IOException: Type mismatch in key from map: expected org.apache.hadoop.io.Text, recieved org.apache.hadoop.io.LongWritable
        at org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1014)
        at org.apache.hadoop.mapred.MapTask$OldOutputCollector.collect(MapTask.java:592)
        at org.apache.hadoop.mapred.lib.IdentityMapper.map(IdentityMapper.java:38)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
        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:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.mapred.Child.main(Child.java:249)

我在这里做错了什么?

我把这个放在这里是希望它能帮助你,即使是在这么长时间之后,但也是因为我已经好几次忘记了这个问题的解决方案

正如您可能从异常中收集到的,IdentityMapper希望
采用
Text,Text>
格式。默认输入格式(org.apache.hadoop.mapred.TextInputFormat)提供了
,因此必须使用-inputformat参数进行更改:

hadoop jar /apollo/env/SEOHadoopClient/lib/hadoop-streaming-0.20.205.0.jar \                           
-D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
-D stream.num.map.output.key.fields=3 \
-D mapred.text.key.comparator.options="-k1 -k2 -k3n" \
-D mapred.text.key.partitioner.options=-k1,1 \
-input /user/sakul/hadoop-streaming-sort/output \
-output /user/sakul/hadoop-streaming-sort/sort-output \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-inputformat org.apache.hadoop.mapred.KeyValueTextInputFormat

我使用org.apache.hadoop.mapred.KeyValueTextInputFormat,它在第一个选项卡处拆分信息,或者“如果不存在这样的字节,则键将是整行,值将为空。”因为这是一种排序,听起来像是您想要的行为,尽管我可能误解了您的意思。

我把它放在这里是希望对您有所帮助,即使过了这么久,也是因为我已经好几次忘记了这个问题的解决方案

正如您可能从异常中收集到的,IdentityMapper希望
采用
Text,Text>
格式。默认输入格式(org.apache.hadoop.mapred.TextInputFormat)提供了
,因此必须使用-inputformat参数进行更改:

hadoop jar /apollo/env/SEOHadoopClient/lib/hadoop-streaming-0.20.205.0.jar \                           
-D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
-D stream.num.map.output.key.fields=3 \
-D mapred.text.key.comparator.options="-k1 -k2 -k3n" \
-D mapred.text.key.partitioner.options=-k1,1 \
-input /user/sakul/hadoop-streaming-sort/output \
-output /user/sakul/hadoop-streaming-sort/sort-output \
-mapper org.apache.hadoop.mapred.lib.IdentityMapper \
-reducer org.apache.hadoop.mapred.lib.IdentityReducer \
-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
-inputformat org.apache.hadoop.mapred.KeyValueTextInputFormat

我使用org.apache.hadoop.mapred.KeyValueTextInputFormat,它在第一个选项卡处拆分信息,或者“如果不存在这样的字节,则键将是整行,值将为空”。由于这是一种排序,听起来像是您想要的行为,尽管我可能误解了您的意思。

谢谢。我通过使用-mapper=“cat”-reducer=“sort-k1”等来解决问题,谢谢。我通过使用-mapper=“cat”-reducer=“sort-k1”等来解决这个问题。