在Python中执行多个mapreduce作业

在Python中执行多个mapreduce作业,python,hadoop,mapreduce,hadoop-streaming,Python,Hadoop,Mapreduce,Hadoop Streaming,我目前正在用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

我目前正在用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 streaming中,目前一次只能运行一个map和一个reduce作业

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

hadoop jar $HADOOP_JAR -mapper 'map1.py | map2.py | map3.py' -reducer 'reduce.py' ...
然而,对于多个减速器,正如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流,还允许您使用任何可执行文件或脚本为“一个”输入创建和运行“多个”映射/缩减作业。例如:

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


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

欢迎使用stackoverflow!看起来你的问题中没有包含命令或代码。请澄清你所说的一个映射和两个还原作业是什么意思。我想运行一个映射程序,然后运行两个还原程序。根据我的经验,你可能需要运行映射程序、还原程序、身份映射程序,然后运行第二个还原程序,但是我已经一两年没有使用hadoop了,所以这可能已经过时了。编辑:我过去曾使用yelp的Mrjob来处理一些流,比如将多个作业捆绑在一起。也许值得一看?