基于 shell streaming的 Map/Reduce程序

今天试了很久终于将基于 streaming的 Map/Reduce调通了。看了半天的hadoop streaming 的介绍竟然全部都没有streaming的KV键值对的介绍。

        首先讲一下streaming的 Hadoop脚本的程序的执行,Mapper将数据按行读进来,Reduce接收整行的数据。注意此时Reducer处理程序的时候,默认按照第一列数据作为键值的Key并且使用 \t进行划分。下面就是基于streaming的wordcount程序。

        使用streaming编写Map/Reduce挺快,但是shell脚本调试确实困难。。。。

        首先gen.sh的程序:

#!/bin/bash

date_ymd=`date -d +"%Y%m%d"`

hadoop_home=/opt/hadoop-client/hadoop
HADOOP=${hadoop_home}/bin/hadoop
INPUT=
OUTPUT=

${hadoop_home}/bin/hadoop fs -test -e ${OUTPUT}
if [ $? == 0 ]
then
    ${HADOOP} fs -rmr ${OUTPUT}
fi

${HADOOP} streaming \
    -D mapred.reduce.tasks=23 \
    -D mapred.job.name="cc_count" \
    -input ${INPUT} \
    -output ${OUTPUT} \
    -mapper "mapper.sh" -reducer "reducer.sh" \
    -file mapper.sh \
    -file reducer.sh

 

mapper.sh 程序:

 

awk -F"\3|\t" '{
                 for(i=0;i<NF;i++){

                       print $i "\t" 0

                }
 }'

reducer.sh程序:

awk -F"\t|\3" '{
 if( url[$1] == "" ){
  urlarray[$1]=1
 }

else

   urlarray[$1]++
}
END{
   for url in urlarray

   do

        print url "\t" urlarray[url]

   done 
}'

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值