首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mrjob subprocess.CalledProcessError的Python作业

使用mrjob subprocess.CalledProcessError的Python作业
EN

Stack Overflow用户
提问于 2014-08-24 20:09:14
回答 1查看 1.1K关注 0票数 2

我正试图在我的自定义数据上从mrjob的网站上运行基本示例。我已经使用流成功地运行了Hadoop映射还原,我也成功地尝试了没有Hadoop的脚本,但是现在我尝试通过mrjob命令在Hadoop上运行它。

代码语言:javascript
复制
./mapred.py -r hadoop --hadoop-bin /usr/bin/hadoop -o hdfs:///user/cloudera/wc_result_mrjob hdfs:///user/cloudera/books

mapred.py的源代码如下:

代码语言:javascript
复制
#! /usr/bin/env python

from mrjob.job import MRJob


class MRWordFrequencyCount(MRJob):

    def mapper(self, _, line):
        yield "chars", len(line)
        yield "words", len(line.split())
        yield "lines", 1

    def reducer(self, key, values):
        yield key, sum(values)

if __name__ == '__main__':
    MRWordFrequencyCount.run()

不幸的是,我收到了以下错误:

代码语言:javascript
复制
no configs found; falling back on auto-configuration
no configs found; falling back on auto-configuration
creating tmp directory /tmp/mapred.cloudera.20140824.195414.420162
writing wrapper script to /tmp/mapred.cloudera.20140824.195414.420162/setup-wrapper.sh
STDERR: mkdir: `hdfs:///user/cloudera/tmp/mrjob/mapred.cloudera.20140824.195414.420162/files/': No such file or directory
Traceback (most recent call last):
File "./mapred.py", line 18, in <module>
MRWordFrequencyCount.run()
File "/usr/lib/python2.6/site-packages/mrjob/job.py", line 494, in run
mr_job.execute()
File "/usr/lib/python2.6/site-packages/mrjob/job.py", line 512, in execute
super(MRJob, self).execute()
File "/usr/lib/python2.6/site-packages/mrjob/launch.py", line 147, in execute
self.run_job()
File "/usr/lib/python2.6/site-packages/mrjob/launch.py", line 208, in run_job
runner.run()
File "/usr/lib/python2.6/site-packages/mrjob/runner.py", line 458, in run
self._run()
File "/usr/lib/python2.6/site-packages/mrjob/hadoop.py", line 238, in _run
self._upload_local_files_to_hdfs()
File "/usr/lib/python2.6/site-packages/mrjob/hadoop.py", line 265, in _upload_local_files_to_hdfs
self._mkdir_on_hdfs(self._upload_mgr.prefix)
File "/usr/lib/python2.6/site-packages/mrjob/hadoop.py", line 273, in _mkdir_on_hdfs
self.invoke_hadoop(['fs', '-mkdir', path])
File "/usr/lib/python2.6/site-packages/mrjob/fs/hadoop.py", line 109, in invoke_hadoop
raise CalledProcessError(proc.returncode, args)
subprocess.CalledProcessError: Command '['/usr/bin/hadoop', 'fs', '-mkdir', 'hdfs:///user/cloudera/tmp/mrjob/mapred.cloudera.20140824.195414.420162/files/']' returned non-zero exit status 1

在我看来,mrjob无法在HDFS中创建某个目录,但不幸的是,我不知道如何解决这个问题。

我的Hadoop是cloudera CDH5.1。快速启动。

谢谢您的任何建议和建议。

编辑:

我尝试在ClouderaCDH4.7上运行相同的代码。quickstart而且运作得很好。所以我修改的问题是: cloudera CDH5.1。由mrjob框架支持?如果是,那么如何运行呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-02 14:20:40

我遇到了同样的错误,我所做的解决方法是更改以下内容:

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

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

修改的文件是: /usr/lib/python2.6/site-packages/mrjob/hadoop.py

我的MRJOB已经运行了几个月,没有任何麻烦,所以在我看来这很好。

我自己也很想知道另一种选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25475860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档