大数据

你说的曾经没有我的故事 提交于 2020-08-10 05:40:04

MapReduce

  • 主要内容

 

① MapReduce概述

  • 1.1 MapReduce定义

  • 1.2 优缺点

优点:

缺点:

  • 1.3 MR核心编程思想

MR进程:

 

② MR框架原理

2.1 MapReduce工作流程

Map Task工作机制:

具体过程:

  1. Read阶段:从文本中一行一行的读取数据,并返回一个个的k,v数据,并将数据交给map函数处理;
  2. Map阶段:用map函数处理读取到的k,v数据,并得到新的k,v数据;
  3. Collect收集阶段:将map函数处理的结果存储到环形内存缓存区中;
  4. Spill溢写阶段:当环形缓存区达到阈值时,就会将数据溢写到磁盘上。溢写前要对数据进行排序、合并等操作;(溢写阶段详情见文档)
  5. Combine合并阶段:当所有数据处理完以后,对磁盘上的所有数据进行一次归并排序,合并成一个文件;(详情见文档)

Reduce Task工作机制:

具体流程:

  1. Copy阶段:当Map Task任务结束以后,Reduce Task从各个Map Task上去拷贝数据,放到内存或者磁盘中;
  2. Merge阶段:对内存和磁盘上拷贝过来的数据进行合并,防止内存和磁盘被占用过多;
  3. Sort阶段:和Merge阶段一起工作,在合并的同时使用归并排序进行排序;
  4. Reduce阶段reduce()函数将计算结果写到HDFS上。

 

MR整体流程图:

 

2.2 shuffle(洗牌)机制

Map方法之后,Reduce方法之前的数据处理过程称之为Shuffle。

具体流程:

  1. Map Task将map()方法输出的k,v对放到内存缓存区中;
  2. 内存缓存区达到阈值时,就会溢写到本地磁盘,可能会溢出多个文件;
  3. 在溢写到磁盘前,要调用partition进行分区,并针对key进行排序(快排)
  4. Reduce Task根据自己的分区号,去Map Task上取得相应结果的分区数据;
  5. Reduce Task将来自不同Map Task的相同分区的多个文件进行合并(归并排序);
  6. 上述合并文件完成后,生成一个大的文件,shuffle过程就结束了,后续进入reduce task的逻辑运算过程(从文件中取出一个一个的键值对 Group,调用用户自定义的 reduce() 方法)。

 

2.3 mapreduce过程中发生了几次排序?

Map阶段:

  • 环形缓冲区:对 key 按照字典排序。排序手段快速排序(能够手写快排)
  • 缓存区溢写到磁盘中:对多个溢写的文件进行排序。排序手段:分区归并排序(能够手 写归并)

Reduce阶段:

  • 按指定分区读取到reduce缓存中:进行归并排序,再次进行分区,因为key可能来自不同的map,要把相同的key再次存储到相同的分区中。
  • Reduce Task前的分组排序:自定义(shuffle末尾阶段合并生成一个大的文件,对大文件按照相同的key进行分组)。

参考链接:https://my.oschina.net/u/4434424/blog/4262912/print

 

2.4 join的多种应用

Map Join:

a) Map Join 适用于一张表十分小、一张表很大的场景

b) Map 端缓存多张表,提前处理业务逻辑,这样增加 Map 端业务,减少 Reduce 数据的压力,尽可能的减少数据倾斜(reduce端处理过多的表会产生数据倾斜)。

提示:Map join MR 的一种很好的优化手段,大家在复习 Hadoop 优化的时候可以将Hive 优化联系起来,因为我们数仓中使用的依旧是 MR 引擎(其他提示:ORC

 

2.5 数据压缩

1 压缩概述

2 压缩策略和原则

3  MR支持的压缩编码

提示:如果面试过程问起,我们一般回答压缩方式为 Snappy,特点速度快,缺点无法切分

4 压缩方式选择 - 各种压缩方式优缺点

  • Gzip压缩

  • Bzip2压缩

  •  Lzo压缩

  •  Snappy压缩

5 压缩位置选择

压缩可以在MapReduce作用的任意阶段启用。

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!