什么是MapReduce?
MapReduce是一种分布式的计算模型,解决海量数据的计算问题。源自于Google的MapReduce论文,Hadoop Mapreduce是Google MapReduce的克隆版。MapReduce将整个并行计算过程抽象到2个函数:map()和reduce()。一个简单的MapReduce程序只需要指定map()、reduce()、input、format,剩下的由框架来进行完成。在进行数据的传输的时候采用的是Key/Value对的形式进行传输。基于MapReduce计算模型编写分布式并行程序非常简单,程序员的主要编码工作就是实现Map和Reduce函数。其它的并行编程中的种种复杂问题,如分布式存储,工作调度,负载平衡,容错处理,网络通信等,均由YARN框架负责处理。
map:对一些独立元素组成列表的每一个元素进行指定的操作,可以高度并行。
reduce:对一个列表的元素进行合并
特点
1.易于编程
2.良好的扩展性
3.容错性高
4.适合PB级以上海量数据的离线处理
处理过程
1.将文件拆分成splits(分片),并将文件按行分割成key/value对。这一步有MapReduce框架自动完成,其中偏移量(即key值)包括了回车所占的字符数(Windows/Linux环境不同字符数不同)
2.分割好的key/value对交给用户自定义的map方法进行处理,生成新的key/value对。
3.得到map方法输出的key/value对后,Mapper会将它们按照key值进行排序,并执行Combine过程,将key值相同的value进行计算,得到Mapper的最终输出。
4.Reducer先对从Mapper接收的数据进行排序,再交由用户自定义的reduce方法进行处理,得到新的key/value对,并作为MapReduce程序的输出结果。
整个过程分为2个阶段
Mapper阶段(由一定数量的Map Task组成)
1.输入数据格式解析(InputFormat)
2.输入数据处理(map())
3.数据分组(Partitioner)
Reducer阶段(由一定数量的Reduce Task组成)
1.数据远程拷贝(copy)
2.数据按照key排序(sort)
3.数据处理(reduce())
4.数据输出格式(OutputFormat)
MapReduce编程模版(优化后)
首先需要创建一个MapReduce的主类 继承 Configured(配置文件configuration的基础操作类) 并实现 Tool(提交MapReduce任务和执行MapReduce的优化工具类)
编写内部类Mapper
编写内部类Reducer
创建Job并设置输入输出
设置job任务
执行job任务
完整代码github地址:https://github.com/PeaceBao/Project01
领取专属 10元无门槛券
私享最新 技术干货