Hadoop streaming 多路输出

2019-03-28 13:33|来源: 网络

streaming工具很好的支持python 等各种脚本语言的map-reduce程序,开发方便高效,但是它没有直接支持多路输出(或者由于自己孤陋寡闻不知道),所以自己实现了一个多路输出的工具包,在hadoop streaming任务中添加简单配置即可实现多路输出。具体如下

第一步:

  1. package test.lmc.com.cn;  

相关问答

更多
  • 这个你不能分别调用,mapper中已经是split好的数据了。 你如果是用Java的话,可以实现MultipleInputs.addInputPath,不同的Input调用不同的mapper和reducer。或者重写inputformat
  • 经过大量的搜索(等等)之后,我想出了如何包含mappers / redurs可访问的可执行二进制文件/脚本/模块。 诀窍是首先将所有文件上传到hadoop。 $ bin/hadoop dfs -copyFromLocal /local/file/system/module.py module.py 然后你需要像下面的模板那样格式化你的流式命令: $ ./bin/hadoop jar /local/file/system/hadoop-0.21.0/mapred/contrib/streaming/hado ...
  • Hadoop框架不知道如何运行你的mapper和reducer。 有两个可能的修复: 修复1:显式调用python。 -mapper "python mapper.py" -reducer "python reducer.py" 修正2:告诉Hadoop在哪里可以找到python解释器。 要做到这一点,你需要明确地告诉它在哪里找到它,在*.py文件的第一行。 例如: #!/usr/bin/env python The Hadoop framework does not know how to run y ...
  • 它看起来像现在你有一个只有地图的流式作业。 具有仅地图作业的行为是每个地图任务都有一个输出文件。 关于改变这种行为你可以做的不多。 您可以通过添加缩减阶段来利用MapReduce的工作方式,以使其具有10,000个缩减器。 然后,每个reducer将输出一个文件,所以您剩下10,000个文件。 请注意,您的数据记录将在“10,000”中“分散”......它不会只是两个文件连接起来。 为此,请在命令行参数中使用-D mapred.reduce.tasks=10000标志。 这可能是默认行为,但您也可以将身份 ...
  • 处理Hadoop流和二进制文件时有几个问题: Hadoop不知道如何处理图像文件 映射器逐行从stdin获取输入,因此您需要创建一个中间shell脚本,将stdin中的图像数据写入某个临时值。 然后传递给可执行文件的文件。 只是将目录位置传递给可执行文件并不是很有效,因为在这种情况下,您将丢失数据局部性。 我不想重复关于这个主题已经很好回答的问题,所以这里是链接: 使用Amazon MapReduce / Hadoop进行图像处理 Hadoop:如何通过map / reduce访问(很多)照片图像? 另一种 ...
  • 我试图在python中使用线程,Global Interpreter Lock存在问题。 使用多处理模块的移植代码,内部hadoop分配与集群中的核心一样多的映射器,因此如果需要加速,多处理是不可行的。 如果执行正确的多线程可能会带来一些加速 I tried to use threading with python, there were issues with the Global Interpreter Lock. Ported code to use the multiprocessing modul ...
  • 它正在使用hadoop 2.7.3 这是您需要运行的命令 [Linux] $ hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar -file /home/python/mapper.py /home/python/reducer.py -mapper “python mapper.py”-reducer“python reducer1.py”-input / tmp / word_i -output / ...
  • 能够通过在Workflow.xml中添加以下内容来解决此问题 HADOOP_USER_NAME = $ {WF:用户()} Able to fix this by adding below in Workflow.xml HADOOP_USER_NAME=${wf:user()}
  • 这是一个简单的代码。 制图员: #!/usr/bin/env python import sys for line in sys.stdin: line = line.strip() toks = line.split('\001' ,2) ck=toks[0]+toks[1] others=toks[2] print '%s\t%s'%(ck, others) 从stdin获取数据,将其拆分并作为键 ...
  • 好吧,我发现了一个有效的组合,但这很奇怪。 根据文档或模仿typedbytes.py ,在本地文件系统中准备有效的typedbytes文件。 使用 hadoop jar path/to/streaming.jar loadtb path/on/HDFS.sequencefile < local/typedbytes.tb 将typedbytes包装在SequenceFile中并将其放入HDFS中,只需一步即可完成。 使用 hadoop jar path/to/streaming.jar -inputfor ...