设为首页 加入收藏

TOP

Hadoop streaming总结
2019-04-14 12:40:30 】 浏览:11
Tags:Hadoop streaming 总结
Hadoop streaming总结

1.简介:Hadoop streaming是Hadoop的一个工具, 它帮助用户创建和运行一类特殊的map/reduce作业,这些特殊的map/reduce作业是由一些可执行文件或脚本文件充当mapper或者reducer。


2.工作原理:mapper和reducer都是可执行文件,它们从标准输入读入数据(一行一行读), 并把计算结果发给标准输出。


3.数据的切分(默认情况,可定制):mapper收集可执行文件进程标准输出的内容,并把收到的每一行内容转化成key/value对,作为mapper的输出。 默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为value。 如果没有tab,整行作为key值,value值为null


4.只需要map函数处理输入数据时只需把mapred.reduce.tasks设置为零,Map/reduce框架就不会创建reducer任务,mapper任务的输出就是整个作业的最终输出。Hadoop Streaming也支持“-reduce None”选项,与“-jobconf mapred.reduce.tasks=0”等价


5.可以使用“-jobconf stream.reduce.output.field.separator=SEP”和“-jobconf stream.num.reduce.output.fields=NUM”来指定reduce输出的行中,第几个分隔符处分割key和value


6. -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner 这个类切分map的输出, 切分是基于key值的前缀,而不是整个key


7.mapper里面不可以使用UNIX pipes比如–mapper "cut –fl | set s/foo/bar/g" 会报错


8.输出结果压缩
-D mapred.output.compress=true \
-D mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \


其他:
1. input和output目录需要确保正确性,input目录需要有数据,output目录需要在hadoop脚本执行前使用rmr命令删除
检测输入路径
/home/work/software/hadoop/bin/hadoop fs -test -e $input/_SUCCESS
if [ $ -ne 0 ]
then
  echo not exist $1/_SUCCESS
  exit 1
fi

2. hadoop任务名称 mapred.job.name= 如果是定期执行的,需要指定脚本执行的日期


3. map和reduce脚本,如果是用php编写,需要指定内存限制 ini_set("memory_limit","512M");

并且关闭错误提示error_reporting(NULL);


4.while (($sLine = fgets(STDIN,8192)) != false) map脚本中php处理输入的数据fgets中,要根据输入的数据指定按行读取的最大长度


5.在大数据量日志统计时,可以先在map中进行排序,在reduce中进行消重和统计,全部工作放到reduce中进行,有可能产生单个reduce切分的数据过多导致溢出


6.简单的文本处理可以使用shell脚本(sort -u awk sed),比php和python更快和方便



编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇hadoop平台搭建 下一篇Hadoop伪分布搭建

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }