在mapreduce的运行中,主要会涉及到3个阶段,分别是:
1、map阶段 2、shuffle阶段 3、reduce阶段
那么这三个阶段主要做了哪些操作呢?
一、Map阶段
map阶段主要分为2个步骤,分别是:
1、设置 InputFormat 类, 将数据切分为 Key-Value**(K1和V1)** 对, 输⼊到第⼆步 2、⾃定义 Map 逻辑, 将第⼀步的结果转换成另外的 Key-Value(K2和V2) 对, 输出结果
二、Shuffle阶段
shuffle阶段主要分为4个步骤,分别是:
1、对输出的 Key-Value 对进⾏分区 2、对不同分区的数据按照相同的 Key 排序 3、(可选) 对分组过的数据初步规约, 降低数据的⽹络拷⻉ 4、对数据进⾏分组, 相同 Key 的 Value 放⼊⼀个集合中
三、Reduce阶段
reduce阶主要分为2个步骤,分别是:
1、对多个 Map 任务的结果进⾏排序以及合并, 编写 Reduce 函数实现⾃⼰的逻辑, 对输⼊的Key-Value 进⾏处理, 转为新的 Key-Value(K3和V3)输出 2、设置 OutputFormat 处理并保存 Reduce 输出的 Key-Value 数据
在编程的时候主要会涉及到Map阶段的逻辑编码和Reduce的逻辑编码,Shuffle阶段其实可以看做是一个数据分发的阶段,在Shuffle阶段会消耗大量的网络带宽,同时在Shuffle阶段经常会遇到数据倾斜的问题,所以对于shuffle阶段虽然我们不需要做显示的编程,但是还是会做相关的配置来避免数据倾斜的问题。
还没有评论,来说两句吧...