在Python中执行多个mapreduce作业



我目前正在用Python编写运行在hadoop流上的代码。但是,我正在尝试做一个映射和两个还原工作。

当我尝试使用以下命令运行代码时,只有一个reducer(第一个)在工作。

我正在使用这个命令:

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 streaming中,一次只能运行1个map和1个reduce作业(目前)。

你可以在一个作业中运行2个映射器(或任意数量的映射器),通过管道将第一个映射函数的输出输出到第二个映射函数。

hadoop jar $HADOOP_JAR -mapper 'map1.py | map2.py | map3.py' -reducer 'reduce.py' ...

然而,对于多个reducer,正如Ned Rockson所说,通过在第二个作业中使用身份映射器,您将有两个独立的作业

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,还允许您为任何可执行文件或脚本的"一个"输入创建和运行"多个"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构建命令来制作hadoop-multiple-streaming.jar文件。更详细地说,'mvn clean package'命令将编译源代码和打包文件到${project_home}/目标文件夹。"

取自https://github.com/hyonaldo/hadoop-multiple-streaming

按前面说的'map1.py | map2.py | map3.py'执行,这是行不通的,只有map1.py可以执行

正确的做法是使用mrjob(Python MapReduce库),希望这有助于

相关内容

  • 没有找到相关文章

最新更新