Hadoop学习(二)-MR

MRHADOOP的核心计算框架。是一个可容错的并行处理集群。

1. 核心思想

MR的核心思想是分而治之(本来是基于整体数据的运算,结果将数据数据分割成很多个小的数据集。然后并行计算这些小数据集,最后将每个小数据集的计算结果进行汇总。得到最终的计算结果)。

 

整个过程分为Map阶段和Reduce阶段。第一阶段完全并行,互不相干。第二阶段的reduceTask的并发实例也互不相干。但是他数据上依赖上一个阶段(mapTask)并发实例的输出。

(1) MR的处理流程。根据InPutFormat 将原始数据转成Map<key,Value>,作为MapTask的数输入。通过Map函数将计算结果保存到磁盘。reduceTask拉到各自的本地作为RduceTask的输入。经过RduceTask的计算。通过OutPutFormat格式转换成确定的格式保存到磁盘。

2. 工作流程

MR工作流程大致可以分为4部分。分别是输入分片inputFormatMap阶段、reduce阶段和OutPutFormat

 

(1) inputFormat阶段 通过inputFormat,将数据切分成Map<key,value> 数据,作为Map节点的输入。默认为TxtInputFormat

(2) Map阶段.接收<key,value>参数,进行map运算、结果缓存在环形缓冲区、超于阈值(80%),分组(分区),排序combiner,合并溢写磁盘。

  1. 分区:按照Partition进行分区(默认按照HashPartition,对key进行的hashCode%Reduce 获取分区号,前往对应的分区存储数据)。
  2. Sort 排序。同一个分区的不同数据按照key字典排序。默认为升序。
  3. 如果设置有combiner,则在map端进行提前聚合。
  4. 溢写磁盘。

(3) Reduce阶段获取map数据reduce根据自己的分区号去各个mapTask的节点获取自己对应的分区数据。数据拉到reduce本地,进行归并排序:在reduce节点上对获取的数据合并后重新排序作为reduce的输入。Reduce函数运算进行reduceTask逻辑运算。

(4) outPutFormat阶段:通过设定的outPutFormat reduce的数据写入磁盘。默认为TextOutPutFormat

3. shuffle机制

shuffle 是指MR过程中,map方法之后,reduce方法之前的过程。分为两部分,Map部分和reduce部分。

(1) shuffleMap部分

Map处理之后,结果缓存在环形缓冲区中,数据量大于阈值,会准备溢写。会进行分区(按照keyhashcode进行分区)、排序(按照key进行升序)、Combiner【可以没有此环节】溢写文件,map操作完成后,过程中可能产生多个溢写文件。同一个分区多个溢写的文件,合并成一个文件。

(2) shufflereduce部分

copy阶段:Reduce 去各个maptesk节点,根据自己的分区号找到当前reduce对应的数据并传递回。归并排序merge阶段合并多个maptask的数据,如果内存不够、溢写磁盘。数据给reduce任务。

4. 序列化

为了提高系统性能。高效的序列化机制比较重要。

 

(1) 什么是序列化?什么是反序列化?为什么需要序列化?

序列化是指把内存中的对象转成字节序列的过程。反序列化是指将字节序列转成内存对象的过程。序列化一般有两个场景。内存数据需要保存到磁盘对象需要跨网络传递到其它机器

(2) Hadoop有自己的序列化机制:writable

(3) 序列化和反序列化的属性顺序需要完全一致。

5. 数据压缩

压缩技术能提高底层数据传输的效率。

 

压缩的基本原则:运算密集型job,少用压缩IO密集型job,多用压缩

 

比较常用的几种压缩算法:

Gzip:压缩率比较高,压缩和解压缩时间也比较快。

Bzip2:压缩率最高,压缩和解压缩时间长。

Loz

Snappy

posted @ 2020-11-09 12:51  IT迷途小书童  阅读(157)  评论(0编辑  收藏  举报