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