2012-11-02 15 views
12

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
+0

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

+0

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) –

risposta

1

Supponendo mono è nel percorso, fare hai bisogno del percorso completo per mapper.exe e reducer.exe? vale a dire

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" 
Problemi correlati