MapReduce并行编程模型
Posted hanchaoyue
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MapReduce并行编程模型相关的知识,希望对你有一定的参考价值。
一、课前准备
1. 3节点hadoop集群
2. 安装IDEA
3. 安装maven并配置环境变量
二、课堂主题
1. 围绕MapReduce分布式计算讲解
三、课堂目标
1. 理解MapReduce编程模型
2. 独立完成一个MapReduce程序并运行成功
3. 了解MapReduce工程流程
4. 掌握并描述出shuffle全过程(面试)
5. 理解并解决数据倾斜
四、知识要点
1. MapReduce编程模型
- MapReduce是采用一种分而治之的思想设计出来的分布式计算框架
- 如一复杂或计算量大的任务,单台服务器无法胜任时,可将此大任务切分成一个个小的任务,
小任务分别在不同的服务器上并行的执行,最终再汇总每个小任务的结果
- MapReduce由两个阶段组成:Map阶段(切分成一个个小的任务)、Reduce阶段(汇总成小任务的结果)
1.1 Map阶段
- map()函数的输入是kv对,输出是一些列kv对,输出写入本地磁盘。
1.2 Reduce阶段
- reduce()函数的输入是kv对(即map的输出(kv对));输出是一些列kv对,最终写入HDFS
1.3 Main程序入口
2. MapReduce编程示例
- 以词频统计为例:统计一批英文文章当中,各个单词出现的总次数
2.1 MapReduce原理图
2.2 MR参考代码
2.2.1 Mapper代码
- block对应一个分片splist,一个split对应一个map task
- reduce task的个数由程序中编程指定
3. WEB UI 查看结果
3.1 Yarn
浏览器url地址: rm 节点IP:8088
3.2 HDFS结果
4. Combiner
- map端本地聚合;不论运行多少次Combiner操作,都不会影响最终的结果
- 并非所有的mr都适合combiner操作,比如求平均值
- WorldCountMap与WorkCountReduce代码不变
- WordCountMain中,增加job.setCombinerClass(WorldCountReduce.class)
- 详见工程代码
5. Shuffle
map task 向环形缓冲区写
环形缓冲区 100M,当使用达到80%,会溢出写磁盘文件(将环形缓冲区文件写入到磁盘中)
写的过程: 分区、排序(combine、压缩 、num>=3)
分区:默认HashPartition =>getPartition()方法,
(key.hashCode()&Integer.MAX_VALUE) % numReduceTasks
排序:每个分区内排序,根据key排序,
最后将多个小的分区文件合并成一个大的分区文件(仍然是排序的)
6. 自定义分区Partition
7. 二次排序
8. MapReduce分区倾斜
以上是关于MapReduce并行编程模型的主要内容,如果未能解决你的问题,请参考以下文章