码迷,mamicode.com
首页 > 其他好文 > 详细

MapReduce并行编程模型

时间:2020-06-24 00:32:41      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:设计   shp   并行编程   了解   alt   并行   组成   思想   模型   

一、课前准备

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并行编程模型

标签:设计   shp   并行编程   了解   alt   并行   组成   思想   模型   

原文地址:https://www.cnblogs.com/hanchaoyue/p/13185305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!