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

结果

本地

用于本地模拟Hadoop调试,与内嵌方式的区别是启动了多进程执行每一个任务

python word_count.py -r local -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

结果

Hadoop

用于Hadoop环境,支持Hadoop运行调度控制参数。

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

#--jobconf mapreduce.job.priority=VREY_HIGH 指定任务调度优先级(VREY_HIGH|HIGH)
#--jobconf mapreduce.job.maps=2 Map任务个数限制
#--jobconf mapreduce.job.reduces=1 Reduce任务个数限制
hadoop fs -ls /output/hadoop #查看/output/hadoop下的文件
Found 2 items
-rw-r--r-- 1 root supergroup 0 2016-08-23 18:33 /ouput/hadoop/_SUCCESS
-rw-r--r-- 1 root supergroup 144 2016-08-23 18:33 /ouput/hadoop/part-00000 hadoop fs -cat /output/hadoop/part-00000 #查看分析结果
"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

结果


参考资料:

根据刘天斯《Python自动化运维技术与最佳实践》整理

Hadoop:使用Mrjob框架编写MapReduce的更多相关文章

  1. Hadoop学习笔记:使用Mrjob框架编写MapReduce

    1.mrjob介绍 一个通过mapreduce编程接口(streamming)扩展出来的Python编程框架. 2.安装方法 pip install mrjob,略.初学,叙述的可能不是很细致,可以加 ...

  2. Hadoop学习基础之三:MapReduce

    现在是讨论这个问题的不错的时机,因为最近媒体上到处充斥着新的革命所谓“云计算”的信息.这种模式需要利用大量的(低端)处理器并行工作来解决计算问题.实际上,这建议利用大量的低端处理器来构建数据中心,而不 ...

  3. [Hadoop in Action] 第4章 编写MapReduce基础程序

    基于hadoop的专利数据处理示例 MapReduce程序框架 用于计数统计的MapReduce基础程序 支持用脚本语言编写MapReduce程序的hadoop流式API 用于提升性能的Combine ...

  4. 从hadoop框架与MapReduce模式中谈海量数据处理

    http://blog.csdn.net/wind19/article/details/7716326 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显 ...

  5. 从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)

    转自:http://blog.csdn.net/v_july_v/article/details/6704077 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到 ...

  6. 大数据时代之hadoop(五):hadoop 分布式计算框架(MapReduce)

    大数据时代之hadoop(一):hadoop安装 大数据时代之hadoop(二):hadoop脚本解析 大数据时代之hadoop(三):hadoop数据流(生命周期) 大数据时代之hadoop(四): ...

  7. hive--构建于hadoop之上、让你像写SQL一样编写MapReduce程序

    hive介绍 什么是hive? hive:由Facebook开源用于解决海量结构化日志的数据统计 hive是基于hadoop的一个数据仓库工具,可以将结构化的数据映射为数据库的一张表,并提供类SQL查 ...

  8. Hadoop的Python框架指南

    http://www.oschina.NET/translate/a-guide-to-Python-frameworks-for-Hadoop 最近,我加入了Cloudera,在这之前,我在计算生物 ...

  9. Hadoop MapReduceV2(Yarn) 框架简介[转]

    对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分布式文件存储及处理框架,对于 Hadoop 框架的介绍在此不再累述,读者可参考 Hadoop 官方简介.使用和学习过老 H ...

随机推荐

  1. JSONP解决ajax跨域问题

    在A域名下,用ajax请求B域名下的请求,会报类似这样的错误:No 'Access-Control-Allow-Origin' header is present on the requested r ...

  2. 从源码安装pip

    由于服务器不能外网,只能通过从网上下载源码包的方式进行安装 下载地址 setuptools pip 安装步骤 首先需要安装setuptools,否则直接安装pip会提示没有setuptools $ t ...

  3. andorid中Html.fromHtml方法

    在android中,有一个容易遗忘的Html.fromhtml方法,意思是可以将比如文本框中的字符串进行HTML格式化,支持的还是很多的, 但要注意的是要在string.xml中用<!--cda ...

  4. iOS学习笔记---oc语言第五天

    字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key- ...

  5. relative与absolute的结合使用

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. Maven项目中找不到maven dependencies library

    一般是,workspace中的.classpath文件中有内容丢失造成 在 <classpathentry kind="con" path="org.eclipse ...

  7. HTML5学堂 全新的HTML5/前端技术分享平台

    HTML5学堂 全新的HTML5/前端技术分享平台 HTML5学堂是做什么的? HTML5学堂~http://www.h5course.com~由多名热爱H5的讲师们组成的一个组织.致力于构建一个前端 ...

  8. [luogu P2647] 最大收益(贪心+dp)

    题目传送门:https://www.luogu.org/problem/show?pid=2647 题目描述 现在你面前有n个物品,编号分别为1,2,3,--,n.你可以在这当中任意选择任意多个物品. ...

  9. Linux驱动设计——内存与IO访问

    名词解释 内存空间与IO空间 内存空间是计算机系统里面非系统内存区域的地址空间,现在的通用X86体系提供32位地址,寻址4G字节的内存空间,但一般的计算机只安装256M字节或者更少的内存,剩下的高位内 ...

  10. 黑马程序员——JAVA基础之简述 类的继承、覆写

    ------- android培训.java培训.期待与您交流! ---------- 继承的概述: 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只 ...