0

我正在使用 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是在这里找到的标准。可能是我缺少一些关于 MRJobj 的基本知识,或者我可能不得不回到 hadoop 流。

4

1 回答 1

1

mrjobhadoop与 HDFS 交互时调用二进制文件。该hadoop命令需要知道 NameNode 在网络上的位置,因此 URI 之类hdfs:///some-path的不需要完整的主机(类似于hdfs://your-namenode:9000/some-path. 该命令通过读取配置 XML 文件来确定 NameNode 的位置。

互联网上有很多关于设置哪个环境变量的相互矛盾的报告,但是在我运行最新版本的 mrjob 和 Apache Hadoop 2.4.1 的环境中,我必须设置环境变量。您可以使用以下命令进行设置:HADOOP_PREFIX

export HADOOP_PREFIX=/path/to/your/hadoop

设置好后,如果您键入以下内容,您将知道设置正确:

ls $HADOOP_PREFIX/etc/hadoop

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

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

于 2014-09-13T01:05:37.330 回答