文档章节

【hadoop】24.MapReduce-shuffle之合并

Areya
 Areya
发布于 01/12 17:30
字数 605
阅读 14
收藏 0

简介

shuffle机制中的合并(Combiner)并不是我们之前将的文件合并,他是一种依附于业务性质的调优手段。这里回顾一下我们之前的参考图

留意图中第11步的合并过程,这样做之后可以合并一些同key的k-v,节约传输的带宽。

  • Combiner是MR程序中Mapper和Reducer之外的一种组件
  • Combiner组件的父类就是Reducer
  • Combiner和reducer的区别在于运行的位置:
    • Combiner是在每一个maptask所在的节点运行
    • Reducer是接收全局所有Mapper的输出结果;

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

1、探究Combiner

1.1、自定义Combiner步骤

  1. 自定义一个combiner继承Reducer,重写reduce方法即可。
  2. 在驱动类中设置该Combiner。

1.2、优化wordcount

1、添加自定义Combiner类

package com.zhaoyi.wordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

public class WordCountCombiner extends Reducer<Text, IntWritable, Text, IntWritable> {
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        int count = 0;
        for (IntWritable value : values) {
            count += value.get();
        }
        // 2.输出该key的总数
        context.write(key, new IntWritable(count));
    }
}

可以看到Combiner和Reducer的业务代码一致,区别在于前者(Combiner)是运行在每一个MapTask上,而后者是运行在汇总的ReducerTask。

2、设置Combiner

  job.setCombinerClass(WordCountCombiner.class);

3、运行,并查看日志

...
Map input records=5
Map output records=72
...
Combine input records=72
Combine output records=51
...

Combine input records为72,经过我们的合并之后变为Combine output records的值,即52行。

1.3、Combiner运用场景

Combiner并不是随便就可以使用的,在一些、甚至说大部分情况下是不能使用这种合并方式。

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

例如下面的求平均数的案例

Mapper
3 5 7 ->(3+5+7)/3=5 
2 6 ->(2+6)/2=4
Reducer
(3+5+7+2+6)/5=23/5    不等于    (5+4)/2=9/2

结果显然是不正确的。

© 著作权归作者所有

共有 人打赏支持
Areya
粉丝 19
博文 63
码字总数 115939
作品 0
广州
私信 提问
【互动问答分享】第17期决胜云计算大数据时代Spark亚太研究院公益大讲堂

“决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 【第17期互动问答分享】 Q1:为了加快spark shuffle 的执行速度是否可以把sparklocaldirs 指向一块固态硬盘上面,这样做是否有效果...

Spark亚太研究院
2014/10/17
0
0
MapReduce 的 shuffle 机制

由于 MapReduce 确保每个 reducer 的输入都是按键排序的,因此在 map 处理完数据之后传给 reducer 的这个过程中需要进行一系列操作,这个操作过程就是 shuffle。在《hadoop权威指南》中指出,...

firepation
2018/12/03
0
0
Hadoop与 Spark中的Shuffle之区别与联系

mapreduce过程解析(mapreduce采用的是sort-based shuffle),将获取到的数据分片partition进行解析,获得k/v对,之后交由map()进行处理。map函数处理完成之后,进入collect阶段,对处理后的...

小欣妹妹
2018/01/14
0
0
谈谈shuffle流程 细节就不说了

本文抛开 hadoop shuffle 原理 与 spark shuffle 单纯从逻辑思考。便于对hadoop shuffle 以及 spark shuffle的原理理解。 数据:100亿数据存在1000台分布式系统中,每个机器存储1千万数据,这...

weixin_37589896
2017/12/08
0
0
Spark的Shuffle过程

Shuffle过程分为shuffle write和shuffle read。 由父RDD(比如join就是join两边的RDD)根据分区数进行划分,并写内存或磁盘,构成write过程。由子RDD(join之后生成的RDD,分区数由spark.defau...

问津已非少年
2016/10/14
144
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(11.9)hive操作基础知识

上一篇博客分享了hive的简介和初体验,本节博主将继续分享一些hive的操作的基础知识。 DDL操作 (1)创建表 #建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name ...

em_aaron
今天
0
0
OSChina 周四乱弹 —— 我家猫真会后空翻

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听这个# 我艇牛逼,百听不厌,太好听辣 分享 Led Zeppelin 的歌曲《Stairway To Heaven》 《Stairway To Heaven》- Led Z...

小小编辑
今天
1
0
node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部