我使用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流媒体。
1条答案
按热度按时间yh2wf1be1#
mrjob
呼叫hadoop
与hdfs交互时为二进制。这个hadoop
命令需要知道namenode在网络上的位置,以便类似urihdfs:///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文件。现在执行命令。应该有用。