Кластер Hadoop — нужно ли реплицировать мой код на все машины перед запуском задания?

Вот что меня смущает, когда я использую пример подсчета слов, я держу код на мастере и позволяю ему делать что-то с ведомыми, и он работает нормально.

Но когда я запускаю свой код, он начинает давать сбои на подчиненных устройствах, выдавая странные ошибки, такие как

Traceback (most recent call last):
  File "/app/hadoop/tmp/mapred/local/taskTracker/hduser/jobcache/job_201110250901_0005/attempt_201110250901_0005_m_000001_1/work/./mapper.py", line 55, in <module>
    from src.utilities import utilities
ImportError: No module named src.utilities
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545)
        at org.apache.hadoop.streaming.PipeMapper.map(PipeMapper.java:121)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
        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:261)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.mapred.Child.main(Child.java:255)
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1
        at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311)
        at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545)
        at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:132)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
        at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
        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:261)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:396)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1059)
        at org.apache.hadoop.mapred.Child.main(Child.java:255)  

Поскольку у меня нет кода на пути, я делаю что-то неправильно?

Спасибо


person daydreamer    schedule 25.10.2011    source источник
comment
Мне кажется это проблема с правами пользователя. Вы обменялись файлами со своим пользователем Hadoop? Можем ли мы увидеть результаты журналов задач?   -  person Thomas Jungblut    schedule 25.10.2011
comment
Привет, Томас, какие журналы вы хотите увидеть, я могу ими поделиться, и с какой машины, пожалуйста, дайте мне знать, спасибо   -  person daydreamer    schedule 25.10.2011


Ответы (1)


При использовании Hadoop Streaming код/зависимости необходимо копировать с помощью -file флаг, если код отсутствует на целевой машине. Убедитесь, что файлы map/reduce и их зависимости указаны в команде потоковой передачи Hadoop.

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
    -input myInputDirs \
    -output myOutputDir \
    -mapper myPythonScript.py \
    -reducer /bin/wc \
    -file myPythonScript.py \
    -file myDictionary.txt \
person Praveen Sripati    schedule 26.10.2011
comment
Правин, я постараюсь сообщить тебе - person daydreamer; 26.10.2011
comment
Правин, что мне делать, если мой код зависит от многих файлов, например, от 10 других файлов. - person daydreamer; 28.10.2011
comment
посмотрите, можете ли вы использовать функцию архивирования потоковой передачи - goo.gl/Dlj1N - в худшем случае вам придется использовать вариант файла несколько раз. - person Praveen Sripati; 28.10.2011