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更快和方便 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值