在python MRJob中,如何设置临时输出目录的选项

时间:2014-09-09 20:40:44

标签: hadoop hadoop-streaming mrjob

我使用MRJob运行非常简单的单词计数作为标准的hadoop作业:

python word_count.py -r hadoop hdfs:///path-to-my-data

此打印错误表示无法为临时输出创建临时目录:

STDERR: mkdir: Incomplete HDFS URI, no host: hdfs:///user/path-to-tmp-dir
...
...
subprocess.CalledProcessError: Command '['/opt/mapr/hadoop/hadoop-0.20.2/bin/hadoop', 'fs', '-mkdir', 'hdfs:///user/

假设我无法通过MRJob创建默认目录。是否可以通过命令行将选项传递给MRJob?我到目前为止找到的唯一选择是base_tmp_dir。在描述中,它提到了“将当地临时目标置于其中的路径”。其中“本地”不是我正在寻找的,因为临时输出目录应该在hdfs中。不过,我打算尝试一下(:

python word_count.py --base-tmp-dir=./tmp/ data.txt 

python word_count.py -r hadoop --base-tmp-dir=hdfs:///some-path hdfs:///path-to-data

但由于MRJob抱怨没有这样的选择而失败:

word_count.py: error: no such option: --base-tmp-dir

word_count.py是找到的标准here。可能是我缺少关于MRJobj的一些基本知识,或者我可能不得不回到hadoop流媒体。

1 个答案:

答案 0 :(得分:1)

mrjob在与HDFS交互时调用hadoop二进制文件。 hadoop命令需要知道NameNode在网络中的位置,因此hdfs:///some-path之类的URI不需要完整的主机(类似hdfs://your-namenode:9000/some-path。)命令会指出NameNode是通过读取配置XML文件。

要设置conflicting reports on the internet大约which environment variable,但在我的环境中运行最新版本的mrjob和Apache Hadoop 2.4.1,我必须设置HADOOP_PREFIX } 环境变量。您可以使用以下命令进行设置:

export HADOOP_PREFIX=/path/to/your/hadoop

设置完成后,如果您输入以下内容,则表示已正确设置:

ls $HADOOP_PREFIX/etc/hadoop

,这显示了您的配置XML文件。

现在运行你的命令。它应该工作。