I file eseguibili di mapper e riduttore sono scritti in C#. Voglio usarli con lo streaming Hadoop.Hadoop streaming con C# e Mono: IdentityMapper utilizzato in modo errato
Questo è il comando che sto usando per creare il lavoro 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"
Questo è l'errore nel quale ciascun mapper ...
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)
Sulla base del call- stack, il problema sembra essere che la classe IdentityMapper (Java) viene utilizzata come mapper. (Il che spiega perché è stato causato l'errore di mancata corrispondenza del tipo). Il mapper avrebbe dovuto essere l'eseguibile "mono mapper.exe".
Qualche motivo per cui mono mapper.exe non viene utilizzato?
Il mapper.exe e reducer.exe disporre delle seguenti autorizzazioni: -rwxr-xr-x
io sono in grado di eseguire con successo mono mapper.exe dalla shell dei comandi UNIX e farla leggere nel testo da stdin e scrivere su stdout.
Ambiente:
- Ubuntu Server 12.04 LTS (VM in esecuzione su Azure)
- Hadoop 1.0.4
- Mono 2,10
Un consiglio banale: Se si sta dividendo il vostro comando di inoltro dei lavori su più linee, stai scrivendo \ alla fine di ogni riga (diverso dall'ultimo)? – Douglas
Puoi anche provare: creare lo script di wrapping (http://www.mono-project.com/Guide:Running_Mono_Applications#Shell_Scripts) o creare un pacchetto (http://www.mono-project.com/Guide:Running_Mono_Applications#Bundles) –