我目前正在尝试运行Hadoop的本地版本,但我有点卡住了。我在安装过程中使用了以下教程:
http://glebche.appspot.com/static/hadoop-ecosystem/hadoop-hive-tutorial.html
现在,我想使用本教程执行一个简单的Mapreduce:
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
但是,我似乎对HDFS有一些问题,因为当我想运行以下命令时:
:libexec me$ hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar -Dmapred.reduce.tasks=1 -input text/* -output text/output -mapper code/mapper.py -reducer code/reducer.py我得到了无法找到映射文件的错误:
java.io.IOException: Cannot run program "code/mapper.py": error=2, No such file or directory但是,该文件似乎存在:
:tmp me$ hadoop dfs -ls code
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
14/11/20 21:28:05 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Found 2 items
-rw-r--r-- 1 lotte supergroup 536 2014-11-20 20:04 code/mapper.py
-rw-r--r-- 1 lotte supergroup 1026 2014-11-20 20:04 code/reducer.py我做错了什么?
最佳乐天
发布于 2014-11-20 22:45:12
如果向hadoop集群提交流作业,则必须使用-file命令行参数指定映射程序和还原器在本地文件系统上的位置,以便hadoop将文件复制到所有Mappers和reducer,从而使它们能够访问python脚本。所以,试试这样的东西:
hadoop har /path/to/hadoop-streaming.jar \
-Dmapred.reduce.tasks=1
-input /path/to/input
-output /path/to/output
-mapper /path/to/mapper.py
-reducer /path/to/reducer.py
-file /path/to/mapper.py
-file /path/to/reducer.py确保将路径替换为所有参数。参数-input、-output是HDFS中的路径,而其他路径则是从启动作业的本地文件系统来的。
发布于 2015-11-13 20:55:26
Hadoop的流工具支持从HDFS映射文件。下面是一个例子:
hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.7.1.jar \
-files hdfs://host:port/user/<hadoop_username>/code/mapper.py,hdfs://host:port/user/<hadoop_username>/code/reducer.py \
-Dmapred.reduce.tasks=1 \
-input text/* \
-output text/output \
-mapper code/mapper.py \
-reducer code/reducer.py注意,映射文件仍然是必要的。在这里,我使用-files作为不推荐的-file。
发布于 2017-04-17 13:48:21
你在跑
:libexec me$ hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar -Dmapred.reduce.tasks=1 -input text/* -output text/output -mapper code/mapper.py -reducer code/reducer.py
正如Ashrith告诉您的,您必须使用-files来指定映射器和还原程序的路径,但它们不需要是本地文件,也就是说,如果您有一个名为basic_mapper.py的映射器,并且使用-put选项将其存储在hdfs中,那么您可以从hdfs中使用它。
例如:hadoop fs -put /home/<user>/files/basic_mapper.py hadoop/mappers现在您的映射器在hdfs中,因此您可以从新位置调用它:
hadoop jar ./share/hadoop/tools/lib/hadoop-streaming-2.4.0.jar -Dmapred.reduce.tasks=1 -files hdfs://host:port/user/<hadoop_username>/hadoop/mappers/basic_mapper.py -input text/* -output text/output -mapper basic_mapper.py
小心,因为它创建了一个名为basic_mapper.py而不是hadoop/mapper/basic_mapper.py的符号链接。
https://stackoverflow.com/questions/27048981
复制相似问题