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

pw136qt2  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(398)

我使用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\u tmp\u dir。在描述中,它提到了“path to put local temp dirs inside”,其中“local”并不是我想要的,因为临时输出目录应该在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流媒体。

yh2wf1be

yh2wf1be1#

mrjob 呼叫 hadoop 与hdfs交互时为二进制。这个 hadoop 命令需要知道namenode在网络上的位置,以便类似uri hdfs:///some-path 不需要完整的主机(例如 hdfs://your-namenode:9000/some-path . 该命令通过读取配置xml文件来确定namenode的位置。
关于设置哪个环境变量,互联网上有很多相互矛盾的报告,但是在我运行最新版本的mrjob和apachehadoop2.4.1的环境中,我必须设置 HADOOP_PREFIX 环境变量。您可以使用以下命令进行设置: export HADOOP_PREFIX=/path/to/your/hadoop 设置好后,如果键入以下内容,您将知道设置正确: ls $HADOOP_PREFIX/etc/hadoop 这显示了您的配置xml文件。
现在执行命令。应该有用。

相关问题