Потоковая передача Hadoop с помощью Python и подпроцесса Python - PullRequest
1 голос
/ 07 марта 2012

Я установил базовую настройку подчиненного кластера hadoop master и могу запускать программы mapreduce (включая python) в кластере.

Теперь я пытаюсь запустить код Python, который обращается к двоичному файлу C, и поэтому я использую модуль подпроцесса. Я могу использовать потоковую передачу hadoop для нормального кода на Python, но когда я включаю модуль подпроцесса для доступа к двоичному файлу, задание становится неудачным.

Как видно из журналов ниже, исполняемый файл hello распознается как используемый для упаковки, но все еще не может выполнить код.

, , packageJobJar: [ / tmp / привет / привет , / app / hadoop / tmp / hadoop-unjar5030080067721998885 /] [] /tmp/streamjob7446402517274720868.jar tmpDir = null

JarBuilder.addNamedStream hello
.
.
12/03/07 22:31:32 INFO mapred.FileInputFormat: Total input paths to process : 1
12/03/07 22:31:32 INFO streaming.StreamJob: getLocalDirs(): [/app/hadoop/tmp/mapred/local]
12/03/07 22:31:32 INFO streaming.StreamJob: Running job: job_201203062329_0057
12/03/07 22:31:32 INFO streaming.StreamJob: To kill this job, run:
12/03/07 22:31:32 INFO streaming.StreamJob: /usr/local/hadoop/bin/../bin/hadoop job  -Dmapred.job.tracker=master:54311 -kill job_201203062329_0057
12/03/07 22:31:32 INFO streaming.StreamJob: Tracking URL: http://master:50030/jobdetails.jsp?jobid=job_201203062329_0057
12/03/07 22:31:33 INFO streaming.StreamJob:  map 0%  reduce 0%
12/03/07 22:32:05 INFO streaming.StreamJob:  map 100%  reduce 100%
12/03/07 22:32:05 INFO streaming.StreamJob: To kill this job, run:
12/03/07 22:32:05 INFO streaming.StreamJob: /usr/local/hadoop/bin/../bin/hadoop job  -Dmapred.job.tracker=master:54311 -kill job_201203062329_0057

12/03/07 22:32:05 INFO streaming.StreamJob: Tracking URL: http://master:50030/jobdetails.jsp?jobid=job_201203062329_0057
12/03/07 22:32:05 ERROR streaming.StreamJob: Job not Successful!

12/03/07 22:32:05 INFO streaming.StreamJob: killJob...
Streaming Job Failed!

Я пытаюсь ввести команду:

hadoop jar contrib/streaming/hadoop-*streaming*.jar -mapper /home/hduser/MARS.py -reducer /home/hduser/MARS_red.py -input /user/hduser/mars_inputt -output /user/hduser/mars-output -file /tmp/hello/hello -verbose

где привет - исполняемый файл C. Это простая программа helloworld, которую я использую для проверки основных функций.

Мой код Python:

#!/usr/bin/env python
import subprocess
subprocess.call(["./hello"])

Любая помощь в том, как запустить исполняемый файл с Python при потоковой передаче hadoop, или помощь в отладке, поможет мне в этом.

Спасибо

Ганеш

Ответы [ 3 ]

0 голосов
/ 13 февраля 2014

Это может быть проблема с разрешением на выполнение с помощью hello. Вам также потребуется использовать стандартный ввод.

Если вы посмотрите на URL-адрес трекера из выходных данных задания, вы можете щелкнуть по неудачным мапперам и увидеть stderr, который может включать некоторые сочные исключения Python.

0 голосов
/ 25 августа 2014

Добавьте -file /home/hduser/MARS.py к вашей команде и скопируйте исполняемый файл c в hdfs.

0 голосов
/ 18 ноября 2012

Маппер копируется в экземпляры? Попробуйте интерактивный сеанс с флагом --alive, чтобы проверить это. Вы можете использовать действия начальной загрузки, чтобы скопировать файлы в экземпляр, а затем выполнить команду chmod, чтобы сделать их исполняемыми.

...