我使用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流媒体。
答案 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文件。
现在运行你的命令。它应该工作。