Подтвердить что ты не робот

Hadoop потоковое с С# и Mono: IdentityMapper используется неправильно

У меня есть исполняемые файлы mapper и reduder, написанные на С#. Я хочу использовать их с потоком 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

Я могу успешно выполнить mono mapper.exe из командной оболочки unix и прочитать его в тексте из stdin и записать в stdout.

Окружающая среда:

  • Сервер Ubuntu 12.04 LTS (VM работает на Azure)
  • Hadoop 1.0.4
  • Моно 2.10
4b9b3361

Ответ 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"