2012-11-02 9 views
12

Mam programy wykonawcze mapper i reduktor napisane w języku C#. Chcę używać ich do streamingu Hadoop.Przesyłanie strumieniowe Hadoop z C# i Mono: IdentityMapper jest używany niepoprawnie

To polecenie używam do tworzenia zadanie 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" 

Jest to błąd napotkanych przez każdego elementu odwzorowującego ...

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) 

podstawie sygnału wywołań stos, problem polega na tym, że klasa Java (Java) IdentityMapper jest używana jako element odwzorowujący. (Co tłumaczy, dlaczego powstał błąd niedopasowania typu). Program odwzorowujący powinien być plikiem wykonywalnym "mono mapper.exe".

Wszelkie pomysły, dlaczego mono mapper.exe nie jest używany?

mapper.exe i reducer.exe mieć następujące uprawnienia: -rwxr-xr-x

jestem w stanie z powodzeniem wykonać mono mapper.exe z polecenia powłoki UNIX i mieć go przeczytać w tekście ze stdin i napisz na stdout.

Środowisko:

  • Ubuntu Server 12.04 LTS (VM działa na Azure)
  • Hadoop 1.0.4
  • Mono 2,10
+0

Niewielka sugestia: Jeśli dzielisz polecenie składania pracy na wiele linii, czy piszesz \ na końcu każdej linii (innej niż ostatnia)? – Douglas

+0

Możesz także spróbować: utworzyć skrypt owijający (http://www.mono-project.com/Guide:Running_Mono_Applications#Shell_Scripts) lub utworzyć pakiet (http://www.mono-project.com/Guide:Running_Mono_Applications#Bundles) –

Odpowiedz

1

Zakładając mono znajduje się na ścieżce, czy potrzebujesz pełnej ścieżki do mapper.exe i reducer.exe? tj.

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" 
Powiązane problemy