简介

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步骤

自定义一个combiner继承Reducer,重写reduce方法即可。

在驱动类中设置该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 {

@Override

protected void reduce(Text key, Iterable 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

结果显然是不正确的。

hadoop合并日志_【hadoop】24.MapReduce-shuffle之合并相关推荐

  1. 合并工具_分享一个SM to HISM合并工具

    UE4提供了非常高效的优化工具,比如多物体合并,MergeActor合并SM为ISM,但是ISM和HISM有一个比较关键的区别就是对剔除的支持,ISM的剔除针对整个SM编组,HISM可针对编组内的单个 ...

  2. python 分析大数据日志_大数据Web日志分析 用Hadoop统计KPI指标实例

    可以带着下面问题来阅读文章 问题: 1.MapReduce在日志分析的作用 思考: 该如何架构kpi系统,需要考虑什么问题. kpi:关键绩效指标法,即KPI绩效考核,是企业绩效考核的方法之一,其特点 ...

  3. hadoop yarn 获取日志_在 YARN 中简化用户日志的管理和使用

    Hadoop 的用户日志有很多的用途, 首先最重要的是, 它们能用来调试 MapReduce 应用(application)的问题, 可能是应用本身的问题, 或者在极少数的情况下, 当在集群中执行应用 ...

  4. hadoop yarn 获取日志_赵丽颖固然漂亮,可这份Hadoop核心教程也不差啊!

    阿里巴巴采用了 15 个节点组成的 Hadoop 集群,用于处理从数据库中导出的商业数据的排序和组合. Ebay 使用了 32 个节点组成的集群,包括 8 * 532 个计算核心以及 5.3 PB 的 ...

  5. Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

    给力星 追逐内心的平和 首页 笔记 搜藏 代码 音乐 关于 Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04 2014-08-09 (updated: 2016 ...

  6. hadoop job 数量_大数据Hadoop常见面/笔试题

    1. namenode的重要性是什么? namenode的作用在Hadoop中非常重要.它是Hadoop的大脑,主要负责管理系统上的分配块,还为客户提出请求时的数据提供特定地址 2. 当NameNod ...

  7. 大数据之hadoop伪集群搭建与MapReduce编程入门

    一.理论知识预热 一句话介绍hadoop: Hadoop的核心由分布式文件系统HDFS与Map/Reduce计算模型组成. (1)HDFS分布式文件系统 HDFS由三个角色构成: 1)NameNode ...

  8. Hadoop平台日志结构

    1.Hadoop集群部署 Hadoop集群: Master:10.18.18.1 Slave1:10.18.18.100 Slave2:10.18.18.101 可互相通信.可连外网,操作系统均为: ...

  9. JAVA大数据(二) Hadoop 分布式文件系统HDFS 架构,MapReduce介绍,Yarn资源调度

    文章目录 1.分布式文件系统HDFS 1.HDFS的来源 2.HDFS的架构图之基础架构 2.1 master/slave 架构 2.2 名字空间(NameSpace) 2.3 文件操作 2.4副本机 ...

最新文章

  1. casperjs 安装试用
  2. 一文详解点云分割算法
  3. Android-- Intent.Action(2)
  4. Yarn管理界面中Queue:root和Queue:default的区别
  5. 已知先序和中序得出后序
  6. 学习人工智能的头四个月
  7. 苹果公布第三财季财报:大中华区依然是伤心地
  8. 排序算法积累(3)-----快速排序
  9. qt按钮功能循环触发_Qt事件循环处理
  10. AR/VR learning (2)--unity3D在android 上的手势识别与检测
  11. python攻击校园网_Python--校园网爬虫记
  12. C++ 类成员函数的函数指针
  13. 2022年强网杯rcefile wp
  14. php 邮箱反垃圾机制,企业邮箱中的反垃圾邮件规则
  15. html5 自动矢量化,ArcScan自动矢量化
  16. Android如何在账户设置中添加App的账户
  17. 程序员常用十大算法(四):KMP算法 与 暴力匹配算法 解决字符串匹配问题
  18. 安全协议系列(二)----CCM与CCMP
  19. Vue3 第十篇Plus:使用iconfont阿里巴巴矢量图标库
  20. Unity 3D光源-Spot Light聚光灯用法详解、模拟手电筒、台灯等线性教程

热门文章

  1. python pyqt教程_『开发技巧』PyQt5入门教程
  2. IDEA添加mybatis-mapper的模板
  3. python3装饰器例子_Python装饰器几个有用又好玩的例子
  4. 我的世界java手机版怎么调按键_博阅Likebook P6高配青春版使用评测
  5. atlas mysql 安装_atlas中间件安装配置
  6. centos+gitlab+mysql_centos7安装配置gitlab(使用外部nginx)
  7. (四)比特币时间序列数据的AI预测
  8. Linux QQ 2.0.0 Beta2 发布
  9. WSL Arch Linux 已在 Microsoft Store 上可用
  10. unwrap函数c语言实现,AppDomain与Assembly的动态加载与卸载代码详解