在 Python 中执行多个 mapreduce 作业
Doing multiple mapreduce jobs in Python
我目前正在 运行 在 Python 中的 hadoop 流中编写代码。但是,我正在尝试做一个映射和两个减少工作。
当我尝试使用以下命令 运行 代码时,只有一个减速器 - 第一个 - 在工作。
我正在使用这个命令:
hadoop jar /usr/hdp/2.2.0.0-2041/hadoop-mapreduce/hadoop-streaming.jar -Dmapreduce.job.queuename=user -Dmapreduce.map.memory.mb=4096 -Dmapreduce.map.java.opts=-Xmx3276m -Dmapred.output.compress=false -file mapper.py -file reducer_tf_hcuot.py -mapper mapper.py -reducer reducer_tf_hcuot.py -input text -output o_text
你能告诉我如何处理吗?
在 hadoop 流中,您一次只能 运行 1 个 map 和 1 个 reduce 作业(目前)。
通过将第一个映射函数的输出管道传输到第二个映射函数,您基本上可以在一个作业中 运行 2 个映射器(或任意数量的映射器)。
hadoop jar $HADOOP_JAR -mapper 'map1.py | map2.py | map3.py' -reducer 'reduce.py' ...
然而,对于多个减速器,正如 Ned Rockson 所说,通过在第二个作业中使用身份映射器,您将拥有 2 个独立的作业
hadoop jar $HADOOP_JAR -mapper 'map.py' -reducer 'reduce1.py' ...
hadoop jar $HADOOP_JAR -mapper '/bin/cat' -reducer 'reduce2.py' ...
可能这就是你想要的:
"hadoop-multiple-streaming 扩展了 Hadoop-Streaming,它是 Hadoop 发行版附带的实用程序。
该实用程序不仅允许您执行 Hadoop-Streaming,还允许您使用任何可执行文件或脚本为 'one' 输入创建和 运行 'multiple' Map/Reduce 作业。例如:
hadoop jar hadoop-multiple-streaming.jar \
-input myInputDirs \
-multiple "outputDir1|mypackage.Mapper1|mypackage.Reducer1" \
-multiple "outputDir2|mapper2.sh|reducer2.sh" \
-multiple "outputDir3|mapper3.py|reducer3.py" \
-multiple "outputDir4|/bin/cat|/bin/wc" \
-libjars "libDir/mypackage.jar" \
-file "libDir/mapper2.sh" \
-file "libDir/mapper3.py" \
-file "libDir/reducer2.sh" \
-file "libDir/reducer3.py"
本项目为maven项目。所以你可以简单地执行 maven build 命令来制作 hadoop-multiple-streaming.jar 文件。更详细地说,'mvn clean package' 命令会将源代码和打包编译到 ${project_home}/target 文件夹。"
先说'map1.py | map2.py | map3.py',这个不行,只能执行map1.py
正确的做法是使用 mrjob(Python MapReduce 库),希望这对您有所帮助
我目前正在 运行 在 Python 中的 hadoop 流中编写代码。但是,我正在尝试做一个映射和两个减少工作。
当我尝试使用以下命令 运行 代码时,只有一个减速器 - 第一个 - 在工作。
我正在使用这个命令:
hadoop jar /usr/hdp/2.2.0.0-2041/hadoop-mapreduce/hadoop-streaming.jar -Dmapreduce.job.queuename=user -Dmapreduce.map.memory.mb=4096 -Dmapreduce.map.java.opts=-Xmx3276m -Dmapred.output.compress=false -file mapper.py -file reducer_tf_hcuot.py -mapper mapper.py -reducer reducer_tf_hcuot.py -input text -output o_text
你能告诉我如何处理吗?
在 hadoop 流中,您一次只能 运行 1 个 map 和 1 个 reduce 作业(目前)。
通过将第一个映射函数的输出管道传输到第二个映射函数,您基本上可以在一个作业中 运行 2 个映射器(或任意数量的映射器)。
hadoop jar $HADOOP_JAR -mapper 'map1.py | map2.py | map3.py' -reducer 'reduce.py' ...
然而,对于多个减速器,正如 Ned Rockson 所说,通过在第二个作业中使用身份映射器,您将拥有 2 个独立的作业
hadoop jar $HADOOP_JAR -mapper 'map.py' -reducer 'reduce1.py' ...
hadoop jar $HADOOP_JAR -mapper '/bin/cat' -reducer 'reduce2.py' ...
可能这就是你想要的:
"hadoop-multiple-streaming 扩展了 Hadoop-Streaming,它是 Hadoop 发行版附带的实用程序。 该实用程序不仅允许您执行 Hadoop-Streaming,还允许您使用任何可执行文件或脚本为 'one' 输入创建和 运行 'multiple' Map/Reduce 作业。例如:
hadoop jar hadoop-multiple-streaming.jar \
-input myInputDirs \
-multiple "outputDir1|mypackage.Mapper1|mypackage.Reducer1" \
-multiple "outputDir2|mapper2.sh|reducer2.sh" \
-multiple "outputDir3|mapper3.py|reducer3.py" \
-multiple "outputDir4|/bin/cat|/bin/wc" \
-libjars "libDir/mypackage.jar" \
-file "libDir/mapper2.sh" \
-file "libDir/mapper3.py" \
-file "libDir/reducer2.sh" \
-file "libDir/reducer3.py"
本项目为maven项目。所以你可以简单地执行 maven build 命令来制作 hadoop-multiple-streaming.jar 文件。更详细地说,'mvn clean package' 命令会将源代码和打包编译到 ${project_home}/target 文件夹。"
先说'map1.py | map2.py | map3.py',这个不行,只能执行map1.py
正确的做法是使用 mrjob(Python MapReduce 库),希望这对您有所帮助