MapReduce

  1. MapReduce简介
    1. 什么是MapReduce
    2. MapReduce编程模型
  2. MapReduce实例
    1. mrjob简介
    2. mrjob实现词频统计
    3. 运行MRJOB的不同方式

MapReduce简介

什么是MapReduce

  • 源于Google的MapReduce论文(2004年12月)
  • Hadoop的MapReduce是Google论文的开源实现
  • MapReduce优点:海量数据离线处理&易开发
  • MapRedecu缺点:实时流式计算

MapReduce编程模型

  • MapReduce分而治之的思想:就是数据在那台计算机上,这台计算机上的数据就归这台计算机处理,处理完成后进行汇总

  • MapReduce编程分Map和Reduce阶段

    • 将作业拆分成Map和Reduce阶段
    • Map阶段:将复杂问题分解成若干个简单的任务
    • Reduce阶段:对Map阶段返回的数据进行汇总处理
    • Word Count词频统计案例:

    MapReduce_1

MapReduce实例

mrjob简介

  • 使用python开发在Hadoop上运行的程序,mrjob是最简单的方式
  • mejob程序可以在本地测试运行也可以部署在Hadoop集群上运行
  • 使用pip安装:pip install mejob

mrjob实现词频统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from mrjob.job import MRJob

class MRWordCount(MRJob):

#每一行从line中输入
def mapper(self, _, line):
for word in line.split():
yield word,1

# word相同的 会走到同一个reduce
def reducer(self, word, counts):
yield word, sum(counts)

if __name__ == '__main__':
MRWordCount.run()
1
python mr_word_count.py 文档路径

运行MRJOB的不同方式

  • 内嵌(-r inline)方式

    • 特点是调试方便,启动单一进程模拟任务执行状态和结果,默认(-r inline)可以省略,输出文件使用 > output-file 或-o output-file,比如下面两种运行方式是等价的
    • python word_count.py -r inline input.txt > output.txt python word_count.py input.txt > output.txt
  • 本地(-r local)方式

    • 用于本地模拟Hadoop调试,与内嵌(inline)方式的区别是启动了多进程执行每一个任务。如:
    • python word_count.py -r local input.txt > output1.txt
  • Hadoop(-r hadoop)方式

    • 用于hadoop环境,支持Hadoop运行调度控制参数,如:
  • 指定Hadoop任务调度优先级(VERY_HIGH|HIGH),如:–jobconf mapreduce.job.priority=VERY_HIGH。

  • Map及Reduce任务个数限制,如:–jobconf mapreduce.map.tasks=2 –jobconf mapreduce.reduce.tasks=5

    • python word_count.py -r hadoop hdfs:///test.txt -o hdfs:///output

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com

×

喜欢就点赞,疼爱就打赏