2011-09-28 24 views
2
I was running $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ 
    -D stream.map.output.field.separator=. \ 
    -D stream.num.map.output.key.fields=4 \ 
    -input myInputDirs \ 
    -output myOutputDir \ 
    -mapper org.apache.hadoop.mapred.lib.IdentityMapper \ 
    -reducer org.apache.hadoop.mapred.lib.IdentityReducer 
What hould be the input file when IdentityMapper is the mapper? 

我希望看到它可以排序某些選定的鍵而不是整個鍵。我的輸入文件很簡單 「aa bb」。 「cc dd」 不確定我錯過了什麼?我總是得到這個錯誤 java.lang.Exception:java.io.IOException:類型在映射關鍵字不匹配:預期org.apache.hadoop.io.Text,收到org.apache.hadoop.io.LongWritable at org。 apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:371) 引起來自:java.io.IOException:鍵入來自map的鍵不匹配:expected org.apache.hadoop.io.Text,recieved org.apache .hadoop.io.LongWritablehadoop-streaming示例未能運行 - 類型不匹配的密鑰從地圖

回答

4

這是一個已知的bug,這裏是JIRA。該錯誤已在Hadoop 0.21.0中找到,但我認爲它不在Hadoop的任何發行版本中。如果你真的有興趣解決這個問題,你可以

  • 下載Hadoop的源代碼(釋放你的工作)
  • 從JIRA下載補丁和應用它
  • 構建和測試的Hadoop

以下是關於如何應用補丁的instructions

或者不使用IdentityMapper和IdentityReducder,而是使用python/perl腳本,它將從STDIN中讀取k/v對,然後將相同的k/v對寫入STDOUT而不進行任何處理。這就像創建自己的IdentityMapper和不使用Java的IdentityReducder。

+0

謝謝Praveen! – johnsam

+1

'貓'作爲一個身份縮減器非常有效。 – cftarnas

+1

爲什麼貓只爲IdentityReducer而不是IdentityMapper? –