分布式计算框架MapReduce
2019-04-04 本文已影响1人
JavaEdge
1 概述
- MapReduce源自Google的MapReduce论文,论文发表于2004年12月
- Hadoop MapReduce可以说是Google MapReduce的一个开源实现
- MapReduce优点在于可以将海量的数据进行离线处理,并且MapReduce也易于开发,因为MapReduce框架帮我们封装好了分布式计算的开发。而且对硬件设施要求不高,可以运行在廉价的机器上
- MapReduce也有缺点,它最主要的缺点就是无法完成实时流式计算,只能离线处理。
MapReduce属于一种编程模型,用于大规模数据集(大于1TB)的并行运算。
概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数式编程语言里借来的,还有从矢量编程语言里借来的特性。
它极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。
当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归约)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
2 MapReduce编程模型
通过wordcount词频统计分析案例入门
![](https://img.haomeiwen.com/i4685968/7563d21e44338bbd.png)
3 MapReduce执行流程
![](https://img.haomeiwen.com/i4685968/f92ef9dac3edcb2a.png)
![](https://img.haomeiwen.com/i4685968/49d9b19a457d7847.png)
![](https://img.haomeiwen.com/i4685968/e1f014833eae5eb8.png)
-
InputFormat
- OutputFormat
OutputFormt接口决定了在哪里以及怎样持久化作业结果。Hadoop为不同类型的格式提供了一系列的类和接口,实现自定义操作只要继承其中的某个类或接口即可。你可能已经熟悉了默认的OutputFormat,也就是TextOutputFormat,它是一种以行分隔,包含制表符界定的键值对的文本文件格式。尽管如此,对多数类型的数据而言,如再常见不过的数字,文本序列化会浪费一些空间,由此带来的结果是运行时间更长且资源消耗更多。为了避免文本文件的弊端,Hadoop提供了SequenceFileOutputformat,它将对象表示成二进制形式而不再是文本文件,并将结果进行压缩。
3 MapReduce核心概念
![](https://img.haomeiwen.com/i4685968/28c6a0131a2dcc95.png)
![](https://img.haomeiwen.com/i4685968/ae3ef868da0913d0.png)
3.1 Split
![](https://img.haomeiwen.com/i4685968/d6bf69ad9f81e9e4.png)
3.2 InputFormat
4 MapReduce 1.x 架构
![](https://img.haomeiwen.com/i4685968/fb32aecae4a71f2f.png)
![](https://img.haomeiwen.com/i4685968/decb115b06993cc7.png)
![](https://img.haomeiwen.com/i4685968/a282262365c87c60.png)
![](https://img.haomeiwen.com/i4685968/b232e0cc860fd46d.png)
![](https://img.haomeiwen.com/i4685968/f4c54d1443a85677.png)
5 MapReduce 2.x 架构
![](https://img.haomeiwen.com/i4685968/263326493524cfda.png)
6 Java 实现 wordCount
![](https://img.haomeiwen.com/i4685968/b2f88b1b8ad3d584.png)
![](https://img.haomeiwen.com/i4685968/d81f900ba386685c.png)
![](https://img.haomeiwen.com/i4685968/7fb51bf009c4e2db.png)
![](https://img.haomeiwen.com/i4685968/4c23190abdf6b39e.png)
![](https://img.haomeiwen.com/i4685968/8f625f9805d6e160.png)
7 重构
![](https://img.haomeiwen.com/i4685968/e23904523132b5f9.png)
8 Combiner编程
![](https://img.haomeiwen.com/i4685968/49b3ab702137d23e.png)
9 Partitoner
![](https://img.haomeiwen.com/i4685968/bd17e7b57d287240.png)
![](https://img.haomeiwen.com/i4685968/4572a64d4f8206b0.png)