MapeReduce工作机制(3) | 青训营笔记

111 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第十二天

一、本篇笔记重点内容:

  • Shuffle
  • WritableComparable 排序
  • Combiner合并
  • OutputFormat 数据输出
  • 切片 MapTask并行度

二、详细知识点介绍:

Shuffle

Map后Reduce前的数据处理过程

  • 自定义Partition分区
  • 自定义类继承partitioner,重写getpartition()方法
  • job驱动中设定.class
  • 设置相应数量的reducetask job.setReduceTask(x);

image.png

WritableComparable 排序

自定义排序bean对象作为key传输,需要实现WritableComparable接口重写compareTo方法。

(1)部分排序

MapReduce根据输入记录的键对数据集排序。保证输出的每个文件内部有序。

(2)全排序

最终输出结果只有一个文件,且文件内部有序。实现方式是只设置一个Reduce Task。但该方法在处理大型文件时效率极低,因为一台机器处理所有文件,完全丧失了MapReduce所提供的并行架构。

(3)辅助排序:(GroupingComparator分组)

在Reduce端对key进行分组。应用于:在接收的key为bean对象时,想让一个或几个字段相同(全部字段比较不相同)的key进入到同一个reduce?方法时,可以采用分组排序。

(4)二次排序

在自定义排序过程中,如果compare To中的判断条件为两个即为二次排序。

Combiner合并

  • 自定义combiner
  • 继承reducer,重写reduce方法
  • job中设置setCombinerClass
  • 对每一个MapTask的输出局部汇总

(1)Combiner是MR程序中Mapper和Reducer之外的一种组件。

(2)Combiner组件的父类就是Reducer。.

(3)Combiner和Reducer的区别在于运行的位置

Combiner是在每一个MapTask所在的节点运行,

Reducer是接收全局所有Mapper的输出结果;

(4)Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量。

(5)Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟Reducer的输入kv类型要对应起来。

OutputFormat 数据输出

  • 默认输出格式TextOutputFormat
  • 自定义OutputFormat
  • 输出到mysql/hbase…存储框架中
  • 自定义一个类继承FileOutputFormat。
  • ➢ 改写RecordWriter,具体改写输出数据的方法write()。

切片 MapTask并行度

  • 数据块:物理上的分块
  • 数据切片:逻辑上对输入进行分片,并不会在磁盘上将其分成片进行存储。一个切片对应一个maptask
  • 默认情况下,切片大小=块大小
  • MapTask 并行度由切片个数决定,切片个数由输入文件和切片规则决定。

三、引用参考&推荐书目:

  1. www.bilibili.com/video/BV1Qp… 尚硅谷大数据Hadoop教程
  2. 带你入坑大数据(一) --- HDFS基础概念篇 - 掘金 (juejin.cn)