Python 使用MRJob更改Mapreduce中间输出位置

Python 使用MRJob更改Mapreduce中间输出位置,python,hadoop,mapreduce,hadoop-streaming,mrjob,Python,Hadoop,Mapreduce,Hadoop Streaming,Mrjob,我试图在没有管理员权限的集群上使用MRJob运行python脚本,并在下面粘贴了错误。我认为正在发生的是,作业正在尝试将中间文件写入默认的/tmp。。。。由于这是一个受保护的目录,我没有写入该目录的权限,因此作业收到错误并退出。我想知道如何将此tmp输出目录位置更改为本地文件系统示例中的某个位置: /home/myusername/some\u path\u在\u集群上的\u my\u local\u filesystem\u中,基本上我想知道我需要传递哪些额外的参数才能从/tmp/更改中间输出

我试图在没有管理员权限的集群上使用MRJob运行python脚本,并在下面粘贴了错误。我认为正在发生的是,作业正在尝试将中间文件写入默认的/tmp。。。。由于这是一个受保护的目录,我没有写入该目录的权限,因此作业收到错误并退出。我想知道如何将此tmp输出目录位置更改为本地文件系统示例中的某个位置: /
home/myusername/some\u path\u在\u集群上的\u my\u local\u filesystem\u中
,基本上我想知道我需要传递哪些额外的参数才能从/tmp/更改中间输出位置。。。去当地我有书面许可的地方

我调用脚本的方式如下:

python myscript.py  input.txt -r hadoop > output.txt
错误:

no configs found; falling back on auto-configuration
    no configs found; falling back on auto-configuration
    creating tmp directory /tmp/13435.1.all.q/mr_word_freq_count.myusername.20131215.004905.274232
    writing wrapper script to /tmp/13435.1.all.q/mr_word_freq_count.myusername.20131215.004905.274232/setup-wrapper.sh
    STDERR: mkdir: org.apache.hadoop.security.AccessControlException: Permission denied: user=myusername, access=WRITE, inode="/":hdfs:supergroup:drwxr-xr-x
    Traceback (most recent call last):
      File "/home/myusername/privatemodules/python/examples/mr_word_freq_count.py", line 37, in <module>
        MRWordFreqCount.run()
      File "/home/myusername/.local/lib/python2.7/site-packages/mrjob/job.py", line 500, in run
        mr_job.execute()
      File "/home/myusername/.local/lib/python2.7/site-packages/mrjob/job.py", line 518, in execute
        super(MRJob, self).execute()
      File "/home/myusername/.local/lib/python2.7/site-packages/mrjob/launch.py", line 146, in execute
        self.run_job()
      File "/home/myusername/.local/lib/python2.7/site-packages/mrjob/launch.py", line 207, in run_job
        runner.run()
      File "/home/myusername/.local/lib/python2.7/site-packages/mrjob/runner.py", line 458, in run
        self._run()
      File "/home/myusername/.local/lib/python2.7/site-packages/mrjob/hadoop.py", line 236, in _run
        self._upload_local_files_to_hdfs()
      File "/home/myusername/.local/lib/python2.7/site-packages/mrjob/hadoop.py", line 263, in _upload_local_files_to_hdfs
        self._mkdir_on_hdfs(self._upload_mgr.prefix)
未找到任何配置;退回自动配置
没有找到配置;退回自动配置
创建tmp目录/tmp/13435.1.all.q/mr_word_freq_count.myusername.20131215.004905.274232
正在将包装器脚本写入/tmp/13435.1.all.q/mr_word_freq_count.myusername.20131215.004905.274232/setup-wrapper.sh
STDERR:mkdir:org.apache.hadoop.security.AccessControlException:权限被拒绝:user=myusername,access=WRITE,inode=“/”:hdfs:supergroup:drwxr-xr-x
回溯(最近一次呼叫最后一次):
文件“/home/myusername/privatemodules/python/examples/mr\u word\u freq\u count.py”,第37行,在
MRWordFreqCount.run()
文件“/home/myusername/.local/lib/python2.7/site packages/mrjob/job.py”,第500行,正在运行
mr_job.execute()
文件“/home/myusername/.local/lib/python2.7/site packages/mrjob/job.py”,执行中的第518行
super(MRJob,self).execute()
文件“/home/myusername/.local/lib/python2.7/site packages/mrjob/launch.py”,执行中的第146行
self.run_作业()
文件“/home/myusername/.local/lib/python2.7/site packages/mrjob/launch.py”,第207行,在运行作业中
runner.run()
文件“/home/myusername/.local/lib/python2.7/site packages/mrjob/runner.py”,第458行,运行中
self._run()
文件“/home/myusername/.local/lib/python2.7/site packages/mrjob/hadoop.py”,第236行,处于运行状态
self.\u上传\u本地\u文件\u到\u hdfs()
文件“/home/myusername/.local/lib/python2.7/site packages/mrjob/hadoop.py”,第263行,在上传本地文件到hdfs中
hdfs上的self.\u mkdir\u(self.\u上传\u管理前缀)

您是将mrjob作为“本地”作业运行,还是尝试在Hadoop集群上运行它

如果您确实试图在Hadoop上使用它,则可以使用--base tmp dir标志控制“scratch”HDFS位置(mrjob将存储中间文件的位置):

python mr.py -r hadoop -o hdfs:///user/you/output_dir --base-tmp-dir hdfs:///user/you/tmp  hdfs:///user/you/data.txt

您确定正确地调用了hadoop作业吗,因为好吧,这不是调用hadoop流作业的方式。