12

C# で記述されたマッパーとリデューサーの実行可能ファイルがあります。これらを Hadoop ストリーミングで使用したい。

これは、Hadoop ジョブを作成するために使用しているコマンドです...

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-*.jar 
-input "/user/hduser/ss_waits" 
-output "/user/hduser/ss_waits-output" 
–mapper "mono mapper.exe" 
–reducer "mono reducer.exe" 
-file "mapper.exe" 
-file "reducer.exe"

これは、各マッパーが遭遇するエラーです...

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:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)

呼び出しスタックに基づいて、(Java) IdentityMapper クラスがマッパーとして使用されていることが問題のようです。(型不一致エラーが発生した理由を説明します)。マッパーは、実行可能ファイル「mono mapper.exe」である必要があります。

mono mapper.exeが使用されていない理由はありますか?

mapper.exe と reducer.exe には次の権限があります: -rwxr-xr-x

unix コマンド シェルからmono mapper.exeを正常に実行し、stdin からテキストを読み込んで stdout に書き込むことができました。

環境:

  • Ubuntu Server 12.04 LTS (Azure で実行されている VM)
  • ハドゥープ 1.0.4
  • モノ 2.10
4

1 に答える 1

1

mono が PATH にあると仮定すると、mapper.exe と reducer.exe へのフル パスが必要ですか? すなわち

hadoop jar $HADOOP_HOME/contrib/streaming/hadoop-streaming-*.jar 
-input "/user/hduser/ss_waits" 
-output "/user/hduser/ss_waits-output" 
–mapper "mono /path/to/mapper.exe" 
–reducer "mono /path/to/reducer.exe" 
-file "mapper.exe" 
-file "reducer.exe"
于 2013-04-25T19:46:45.083 に答える