Mrjob简介

Mrjob是一个编写MapReduce任务的开源Python框架,它实际上对Hadoop Streaming的命令行进行了封装,因此接粗不到Hadoop的数据流命令行,使我们可以更轻松、快速的编写MapReduce任务。

Mrjob具有如下特点:

代码简洁,map及reduce函数通过一个Python文件就可以搞定;
支持多步骤的MapReduce任务工作流;
支持多种运行方式,包括内嵌方式、本地环境、Hadoop、远程亚马逊;
支持亚马逊网络数据分析服务Elastic MapReduce(EMR);
调试方便,无需任何支持环境。

 

Mrjob编写MapReduce

安装Mrjob

easy_install mrjob

功能:实现一个统计文本文件(/root/hadooptest/input.txt)中所有单词出现频率的功能。Mrjob通过mapper()和reducer()方法实现MR操作。

【/root/hadooptest/input.txt】

foo foo quux labs foo bar quux abc bar see you by test welcome test
abc labs foo me python hadoop ab ac bc bec python

 

MapReduce脚本

Mrjob通过Python的yield机制将函数变成一个生成器,通过不断调用next()去实现key:value的初始化或运算操作。

【/root/hadooptest/word_count.py】

#!/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()

 

 Mrjob运行方式

Mrjob支持4种运行方式:内嵌(-r inline)、本地(-r local)、Hadoop(-r hadoop)、Amazon EMR(-r emr)

内嵌

特点是调试方便,启动单一进程模拟任务执行状态及结果,Mrjob默认以内嵌方式运行,选项可以不写。输出可以用‘>’或‘-o’。下面两条命令是等价的

#python word_count.py -r inline > output.txt
python word_count.py -r inline -o output.txt
"ab" 1
"abc" 2
"ac" 1
"bar" 2
"bc" 1
"bec" 1
"by" 1
"foo" 4
"hadoop" 1
"labs" 2
"me" 1
"python" 2
"quux" 2
"see" 1
"test" 2
"welcome" 1
"you" 1
结果

相关文章:

  • 2021-10-28
  • 2023-03-28
  • 2021-05-31
  • 2022-12-23
  • 2022-12-23
  • 2021-07-12
  • 2021-06-02
猜你喜欢
  • 2021-08-04
  • 2021-10-17
  • 2021-09-13
  • 2021-04-21
  • 2022-03-02
  • 2021-07-29
相关资源
相似解决方案