用hadoop streaming写map-reduce程序,可使用python,shell等脚本语言

我一般都是用python,shell这些脚本语言来编写程序,由于工作原因,要写mr程序,但是在网上找了找,全部都只有wordcount的代码,不是特别容易理解,就想写一篇文章来讲讲使用时的注意事项。

 

submit.sh:

 

. ./conf/hadoop.conf

function impression_hadoop(){
 ${HADOOP} jar ${HADOOP_STREAMING_JAR}                                         \
     -D mapred.map.tasks=100                                                  \
     -D mapred.reduce.tasks=100                                               \
     -D mapred.job.priority=HIGH                                              \
     -D mapreduce.job.name="brand_like: statistic"                            \
     -D mapred.output.compress=false                                          \                                                                                                                                  
     -inputformat org.apache.hadoop.mapred.SequenceFileAsTextInputFormat      \
     -outputformat org.apache.hadoop.mapred.TextOutputFormat                  \
     -input $1                                                                \
     -output $2                                                               \
     -mapper "sh mapper.sh"                                                   \
     -reducer “sh reducer.sh”                                                            \
     -file "./basic/map.py"                                                   \
     -file "./basic/mapper.sh"                                                \
     -file "./basic/reducer.sh"                                               \
     -file "./basic/reduce.py"
                                                 
 }
impression_hadoop $input $output

 

 

 

 

conf下放的是hadoop的一些配置文件,比如hadoop streaming是放在哪里的。

basic是conf的同级类目,这个文件是submit.sh,是放在basic的里面的。

后面跟的是一些参数,

 

mapred.map.tasks=100       mapper的个数,当系统判定map数少于这个设定时,这个参数才有效。
 
mapred.reduce.tasks=100 reducer的个数,就是最后输出文件的个数

 

 
mapred.job.priority=HIGH   任务执行的优先级
mapreduce.job.name="brand_like: statistic"  job的名称
-inputformat org.apache.hadoop.mapred.SequenceFileAsTextInputFormat 输入,是二进制输入,此外还有文本输入inputformat org.apache.hadoop.mapred.SequenceFileAsTextInputFormat 
-outputformat org.apache.hadoop.mapred.TextOutputFormat 输出,文本输出,还有二进制输出org.apache.hadoop.mapred.SequenceFileOutputFormat 

这个可以根据你们自己的需求来设定。

 

input是你要处理的输入,hdfs上的,output是输出的地址,也是放在hdfs上的。

mapper和reducer是用来指定的你要用的mapper和reducer程序,当reducer指定为NONE的时候,就直接将map后的结果输出,这个时候可以将mapred.reduce.tasks设为0。

-file是用来将你所需要用到的本地文件上传到hadoop上,注意,无论之前的路径位置是如何的,上传到hadoop上后都在同一目录下

 

mapper.sh:

 

awk 'BEGIN{
    FS="[^A,   ]";
    OFS="\t";
}
{
    print $2,$3,$4,$5,$6,$7,$8,$9,$10
}'

mapper.sh可以像我这里一样,直接用shell脚本,把你需要的字段拿出来,也可以进行简单的过滤,比如判定第二个字段>5才可以输出这样子。mapper.sh里也可以写python map.py,这里可以用shell脚本在外面包一层也可以不包。

 

reducer.sh

python reduce.py 

reduce做的事情就是统计、计算。

map.py和reduce.py大家可以直接找网上的wordcount就可以了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值