码迷,mamicode.com
首页 > 其他好文 > 详细

关于Hadoop-Streaming中碰到的问题

时间:2014-07-29 14:39:08      阅读:340      评论:0      收藏:0      [点我收藏+]

标签:python   mapreduce   pig   

Hadoop在分布式计算方面很强大,而Python在文本处理也是相当方便,那么有这两者的结合吗?有,答案就是Hadoop-Streaming。Hadoop-Streaming可以将Hadoop与主流语言结合起来,使用方便,效果很好。个人觉得Pig在处理数据集时很不方便,特别是在计算百分比等运算时,而Hadoop-Streaming是可以替代Pig的。

1.Streaming固定的代码,该代码可以放在shell脚本中

RED_NUM=47

mapper_file="wordcount.py"
mapper_cmd="$mapper_file"
reducer_cmd="cat"

Hadoop="/usr/bin/hadoop"
Streaming="/usr/lib/hadoop-0.20/contrib/streaming/hadoop-streaming-0.20.2-cdh3u1.jar"

hadoop fs -rmr $OUTPUT
${Hadoop} jar ${Streaming} -D mapred.job.name="$JOBNAME" -D mapred.job.queue.name=$queuename -D mapred.map.tasks=500 -D mapred.min.split.size=1073741824 -D mapred.reduce.tasks="$RED_NUM" -D stream.num.map.output.key.fields=3 -D num.key.fields.for.partition=3 -input "$INPUT" -output "$OUTPUT" -mapper "$mapper_cmd" -reducer "$reducer_cmd" -file "$mapper_file" -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner
有几个重要参数解释下

(1)-input:输入文件路径

(2)-output:输出文件路径

(3)-mapper:用户自己写的mapper程序,可以是可执行文件或者脚本

(4)-reducer:用户自己写的reducer程序,可以是可执行文件或者脚本

(5)-file:打包文件到提交的作业中,可以是mapper或者reducer要用的输入文件,如配置文件,字典等。

(6)-partitioner:用户自定义的partitioner程序

(7)-D:作业的一些属性(以前用的是-jonconf),具体有:
1)mapred.map.tasks:map task数目
2)mapred.reduce.tasks:reduce task数目
3)num.key.fields.for.partition=N:shuffle阶段将数据集的前N列作为Key;所以对于wordcount程序,map输出为“word  1”,shuffle是以word作为Key,因此这里N=1


2.MapReduce是万能的吗?

之前我以为是的,于是一碰到数据量大的就尝试使用MapReduce。但是最近的工作中发现有种情况并不适用于MapReduce,就是涉及到整个数据集的一些运算!

举个例子,在Wordcount中,如果要计算每个单词出现的词频占整个文档中单词词频的百分比,这时候写MapReduce程序就要注意,在每个reducer中“整个文档中单词词频”必须是真正的“整个文档中单词词频”;这个例子还比较特殊,涉及到整个数据集的仅仅是总词频,可以通过传入多个输入来解决。但是如果涉及到的一些运算必须要整个数据集,那么就没法解决了。或许你可以在每个mapper中输出为“flag    word    1”,然后num.key.fields.for.partition=1   这样看似可以解决,其实这样就将所有数据都reduce到一台机器上,成了单机计算,而数据集过大的话,单机是无法完成任务的。

3.Streaming程序中,当map或reduce中有一个是cat时

需要注意到底谁是cat,如果只是纯粹的过滤数据或打印,两种情况都行;但如果涉及到聚合操作,这里面就有区别了。


未完待续... ...

参考资料:

http://dongxicheng.org/mapreduce/hadoop-streaming-programming/
                                  

关于Hadoop-Streaming中碰到的问题,布布扣,bubuko.com

关于Hadoop-Streaming中碰到的问题

标签:python   mapreduce   pig   

原文地址:http://blog.csdn.net/lming_08/article/details/38235693

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!