1.mrjob简介
mrjob是一个编写mapreduce任务Python开源框架,它既可以模拟hadoop的mapreduce,也可以之间在hadoop上运行
2.安装mrjob
[root@i ~]# yum -y install epel-release
[root@i ~]# yum -y install python-pip
(如果你没有安装pip)
[root@i ~]# pip install mrjob
3.mapreduce脚本
重载MRJob的mapper,reducer函数
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from mrjob.job import MRJob
class MRWordCounter(MRJob):
def mapper(self,key,line): #接收每一行的输入数据,处理后返回一堆key:value,初始化value值为1
for word in line.split():
yield word,1
def reducer(self,word,occurrences): #接收mapper输出的key:value对进行整合,把相同key的value做累加(sum)操作后输出
yield word,sum(occurrences)
if __name__ == '__main__':
MRWordCounter.run()
4.mrjob运行方式、
Mrjob支持4种运行方式:内嵌(-r inline)、本地(-r local)、Hadoop(-r hadoop)、Amazon EMR(-r emr)
1.内嵌
[root@i ~]# python test.py input.txt -r inline -o output.txt
其中input.txt为数据输入
output.txt为reduce之后的数据
2.本地
用于本地模拟Hadoop调试,与内嵌方式的区别是启动了多进程执行每一个任务
[root@i ~]# python word_count.py -r local -o output.txt
3.hadoop
用于Hadoop环境,支持Hadoop运行调度控制参数
[root@i ~]# python word_count.py -r hadoop --jobconf mapreduce.job.priority=VREY_HIGH --jobconf mapreduce.job.maps=2 --jobconf mapreduce.job.reduces=1 -o hdfs:///output/hadoop hdfs:///user/hadoop/input