2013-10-04 4 views
2

Я пытаюсь изучить программу mapreduce, используя python mrjob. Я получаю следующее сообщение об ошибке:не удалось использовать mapreduce в python

Traceback:

dumping stdin to local file /tmp/pyes_mrjob.testuser.20131004.103251.998597/STDIN 
Making directory hdfs:///user/testuser/tmp/mrjob/pyes_mrjob.user.20131004.103251.998597/files/ on HDFS 
> /usr/lib/hadoop-mapreduce/bin/hadoop fs -mkdir hdfs:///user/testuser/tmp/mrjob/pyes_mrjob.testuser.20131004.103251.998597/files/ 
Traceback (most recent call last): 
    File "pyes_mrjob.py", line 34, in <module> 
    MRWordFrequencyCount.run() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/job.py", line 500, in run 
    mr_job.execute() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/job.py", line 518, in execute 
    super(MRJob, self).execute() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/launch.py", line 146, in execute 
    self.run_job() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/launch.py", line 207, in run_job 
    runner.run() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/runner.py", line 458, in run 
    self._run() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/hadoop.py", line 236, in _run 
    self._upload_local_files_to_hdfs() 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/hadoop.py", line 263, in _upload_local_files_to_hdfs 
    self._mkdir_on_hdfs(self._upload_mgr.prefix) 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/hadoop.py", line 271, in _mkdir_on_hdfs 
    self.invoke_hadoop(['fs', '-mkdir', path]) 
    File "/usr/local/lib/python2.7/dist-packages/mrjob/fs/hadoop.py", line 81, in invoke_hadoop 
    proc = Popen(args, stdout=PIPE, stderr=PIPE) 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

Я выполнил команду вручную его прекрасно работать там, но когда я пытаюсь выполнить свою программу, он не работает. С тех пор как началось обучение, кто-то может предложить, какую библиотеку я должен выбрать. Согласно некоторым блогам, у somelibraries есть хорошая документация, и некоторые библиотеки имеют лучшую производительность и ... Я столкнулся с ниже, который выглядит старше http://blog.cloudera.com/blog/2013/01/a-guide-to-python-frameworks-for-hadoop/

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

+0

Проводка кода/команды, которая выбрасывает эту ошибку, будет полезна. – kgu87

+0

Я использую пример документации mrjob. – user2695817

ответ

1

Похоже, вы установили HADOOP_HOME в "/ usr/lib/hadoop-mapreduce". Однако это неправильно, и его следует установить в «/ usr/lib/hadoop».

Кроме того, если вы получаете сообщение об ошибке сказав, что Hadoop-streaming.jar не удалось найти, создать символическую ссылку в «/ USR/Lib/Hadoop» к этому банку следующим образом:

sudo ln -s /usr/lib/hadoop-mapreduce/hadoop-streaming.jar /usr/lib/hadoop 
5

я предположим, что эта проблема вызвана тем, как mrjob называет «hadoop fs -mkdir», если родительский dir целевого каталога, который вы хотите создать, не существует, -mkdir не удастся. это означает, что вы должны использовать «hadoop fs -mkdir -p [путь]». В конце концов, вам нужно будет модифицировать библиотеку mrjob вручную [путь mrjob установка] (шахта /usr/lib/python2.6/site-packages/mrjob)/hadoop.py в строке 271:

self.invoke_hadoop(['fs', '-mkdir', path]) 

до

self.invoke_hadoop(['fs', '-mkdir', '-p', path]) 

Удачи!

+0

https://github.com/Yelp/mrjob/issues/850 – dre

+0

Когда это будет исправлено? Это ноябрь 2014 года, и я все еще вижу эту проблему. – nottinhill

Смежные вопросы