Hadoop streaming编写mapper与reducer

mapper:


import sys,hashlib,struct,os
from urllib import unquote 

if __name__=="__main__":
    for line in sys.stdin:
        line = line.strip()
        tks = line.split("\t")  
        print tks[0]+'\t'+'1'

reducer:

import sys,re
curqq=''

for line in sys.stdin:
    line = line.strip()
    tks = line.split("\t")
    if curqq !=tks[0]:
        curqq=tks[0]
    else:
        print tks[0]

运行脚本:

if [[ $# -ne 3 ]]
then
    echo $#
    echo "run.sh day input whitelist md5_flag output"
    exit -1
fi

day=`date +%Y%m%d -d "${1}"`
input_dir=${2}
output=${3}

fs_kd -b task_rcm -u vitamin -test -d ${input_dir}
if [[ $? -ne 0 ]]
then
    echo "input dir not exists: ${input_dir}"
    exit -1
fi

fs_kd -b task_rcm -u vitamin -test -d ${output}
if [[ $? -eq 0 ]]
then
    echo "output dir exists: ${output}"
    exit -1
fi

hadoop jar hadoop-streaming-2.3.0-cdh5.1.0.jar -archives hadoop-streaming-2.3.0-cdh5.1.0.jar \
    -D mapred.reduce.tasks=1 \
    -D mapreduce.job.name=model_utils \
    -D mapreduce.job.queuename="task_rcm" \
    -D stream.num.map.output.key.fields=2 \
    -D num.key.fields.for.partition=1 \
    -D mapred.text.key.comparator.options="-k2,2nr" \
    -D mapred.output.key.comparator.class=org.apache.hadoop.mapred.lib.KeyFieldBasedComparator \
    -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \
    -mapper mapper.py \
    -file mapper.py \
    -reducer reducer.py \
    -file reducer.py \
    -input ${input_dir} \
    -output ${output}
is_completed=`grep log.txt -e 'completed successfully' | wc -l`
if [[ $is_completed -lt 1 ]]
then
    echo "${cur_date}: failed"
    exit -1
fi
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值