MapReduce【Shuffle-Combiner】
概述

Conbiner在MapReduce的Shuffle阶段起作用,它负责局部数据的聚合,我们可以看到,对于大数据量,如果没有Combiner,将会在磁盘上写入多个文件等待ReduceTask来拉取,但是如果有Combiner组件,我们可以通过Combiner来减小中间结果文件的大小,从而增加传输的效率。
以wordcount为例,从map出来的kv已经经过了排序是有序的,我们可以进行一次Combiner将相同key的value进行一个合并,从而减少数据量。接着再进行一次归并排序,将多个溢写文件合并到一起。如果溢写的文件特别多,一次归并排序不能全部合并(默认一次归并10个溢写文件),可以再进行一次归并。最终只有一个中间结果文件产生。
- Combiner是MapReduce程序中Mapper和Reducer之外的一个组件。
- Combiner组件的父类就是Reducer
- Combiner和Reducer的区别在于运行的位置
- Combiner的意义就是对每一个MapTask的输出进行局部汇总,以减小网络传输量。
- Combiner能够应用的前提是不能影响最终的业务逻辑,而且,Combiner的输出kv应该跟Reducer的输入kv类型要对应起来。
- 比如wordcount案例,我们可以对它增加一个Combiner,因为这样不会影响最终结果。
- 但是对于求平均值这种案例,比如(3+5+7+2+6)/5 != (3+5+7)/3 + (2+6)/2
实现
Combiner只需要继承Reducer类并重写reduce方法即可,我们只需要在wordcount案例基础之上增加一个类WordCountCombiner并在Runner类中修改job的属性即可。
WordCountCombiner类
public class WordCountCombiner extends Reducer<Text, LongWritable,Text,LongWritable> {private LongWritable OUT_KEY = new LongWritable();@Overrideprotected void reduce(Text key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {int sum = 0;for (LongWritable value : values) {sum += value.get();}OUT_KEY.set(sum);context.write(key,OUT_KEY);}}
修改job属性
//设置combinerjob.setCombinerClass(WordCountCombiner.class);
相关文章:
MapReduce【Shuffle-Combiner】
概述 Conbiner在MapReduce的Shuffle阶段起作用,它负责局部数据的聚合,我们可以看到,对于大数据量,如果没有Combiner,将会在磁盘上写入多个文件等待ReduceTask来拉取,但是如果有Combiner组件,我们…...
postman接口自动化测试
Postman除了前面介绍的一些功能,还有其他一些小功能在日常接口测试或许用得上。今天,我们就来盘点一下,如下所示: 1.数据驱动 想要批量执行接口用例,我们一般会将对应的接口用例放在同一个Collection中…...
历经70+场面试,我发现了大厂面试的套路都是···
今年的金三银四刚刚过去,我又想起了我在去年春招时面试了50余家,加上暑期实习面试了20余家,加起来也面试了70余场的面试场景了。 基本把国内有名的互联网公司都面了一遍,不敢说自己的面试经验很丰富,但也是不差的。 …...
可视区域兼容性问题的思考及方法封装
今日在复习可视化尺寸获取时突发奇想,为什么要在怪异模式下使用document.body.clientWidth,在标准模式下使用document.documentElement.clientWidth?以及是否在IE8及以下的版本中其中一个获取方式将返回undefined或0。 出于该问题的思考&am…...
安全工具 | CMSeeK [指纹识别]
0x00 免责声明 本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担…...
Android新logcat使用技巧
Android新logcat使用技巧 logcat新UI出现后,我常困惑于怎么过滤log,和以前的UI差异比较大,新UI界面结构如下: 这个新的 logcat 的问题是如何过滤信息并不是很明显。 获取应用的日志信息 要获取我们当前调试应用的日志信息&…...
使用Makefile笔记总结
文章目录 一、简单了解Makefile1.1 Makefile示例1.2 基本规则1.3 make是如何工作的1.4 使用变量1.5 make自动推导 二、变量2.1 变量的定义和引用2.2 变量的两种高级用法2.3 override 和 define 关键字2.4 环境变量与目标变量2.5 自动变量 三、Makefile规则3.1 通配符3.2 目标依…...
npm下载依赖项目跑不起来--解决方案
code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: vue-element-admin4.4.0 npm ERR! Found: webpack4.46.0 npm ERR! node_modules/webpack npm ERR! webpack“^4.23.0” from the root project npm ERR! npm ERR! Coul…...
SolVES模型生态系统服务功能社会价值评估
查看原文>>>SolVES 模型生态系统服务功能社会价值评估(基于多源环境QGIS、PostgreSQL、ArcGIS、Maxent、R语言) 目录 第一章、理论基础与研究热点 第二章、SolVES 4.0 模型运行环境配置 第三章、SolVES 4.0 模型运行 第四章、数据获取与入…...
Godot引擎 4.0 文档 - 入门介绍 - 学习新功能
本文为Google Translate英译中结果,DrGraph在此基础上加了一些校正。英文原版页面: Learning new features — Godot Engine (stable) documentation in English 学习新功能 Godot 是一个功能丰富的游戏引擎。有很多关于它的知识。本页介绍了如何使用…...
如何进行MySQL漏洞扫描
MySQL是一款广泛使用的关系型数据库管理系统,但由于其复杂的结构和功能,也存在不少安全漏洞,容易被黑客攻击。为了解决这些安全问题,进行MySQL漏洞扫描是必要的。那么MySQL怎么进行漏洞扫描?如何进行漏洞扫描?接下来就让小编带大…...
C语言函数大全-- x 开头的函数(3)
C语言函数大全 本篇介绍C语言函数大全-- x 开头的函数 1. xdr_opaque 1.1 函数说明 函数声明函数功能bool_t xdr_opaque(XDR *xdrs, char *buf, u_int len);用于编码或解码任意长度的二进制数据 参数: xdrs : 指向 XDR 数据结构的指针,表…...
计算机图形学-GAMES101-12阴影
Shadow mapping 问题的提出 我们之前在进行着色时,对于每个物体仅考虑自己,而不考虑其他物体对它的影响。限定在光栅化中,如何解决阴影问题呢?阴影能被摄像机看到,但不能被光源所照亮。经典的Shadow mapping只能处理…...
iOS_Swift高阶函数
iOS_Swift高阶函数 #mermaid-svg-NxX1czIESDq47OQw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-NxX1czIESDq47OQw .error-icon{fill:#552222;}#mermaid-svg-NxX1czIESDq47OQw .error-text{fill:#552222;stroke:#…...
探索Vue的组件世界-组件复用
目录 Mixin【混入】 缺陷 HOC(higher order component)【高阶组件】 相比较Mixin的优点: 不足: Renderless组件【函数式组件,无渲染组件,Vue社区使用比较多的一种业务复用模式】 优点: M…...
OMA通道-2
1 简介 本文档中指定的 API 使移动应用程序能够访问移动设备中的不同 SE,例如 SIM 或嵌入式 SE。 本规范提供了接口定义和 UML 图,以允许在各种移动平台和不同的编程语言中实现。 如果编程语言支持命名空间,则它应为 org.simalliance.openmob…...
SAP 用CO13冲销工序报工,但是没有产生货物移动(TCODE:CO1P 、 SE38 :CORUPROC,CORUAFWP)
前言 通常情况下,对PPO做GI或GR的时候,出现的异常可以在COGI中间被列出;在这些数据进入COGI之前,系统会把这些数据记录在CO1P中;换句话说,系统有时会出现DB的更新延时,当延时发生的时候…...
信息收集-服务器信息
服务器上面可以运行大量的系统服务和第三方应用服务,如果操作系统或者第三方软件没有及时升级打补丁,攻击者就有可能直接通过服务器上运行的服务进行攻击。 服务器需要收集的信息包含三个方面: 操作系统信息等识别waf(Web应用程…...
连续签到积分兑换试用流量主小程序开发
每日签到积分兑换试用流量主小程序开发 打卡兑奖小程序。用户签到活得积分。积分可以兑换商品。观看激励视频广告可以积分翻倍。 用户可以参加试用商品活动参加试用需要提交信息。可以通过分享方式直接获取试用资格。 以下是流量主小程序的功能列表: 广告位管理&a…...
C语言—自定义类型(结构体、枚举、联合)
自定义类型 结构体结构体的声明特殊的声明结构的自引用结构体变量的定义和初始化结构体内存对齐修改默认对齐数offsetof宏 结构体传参 位段位段的定义(声明)位段的内存分配位段的跨平台问题位段的应用 枚举枚举类型的定义及使用枚举的优点 联合ÿ…...
外贸 SEO 中如何进行跨境关键词研究
外贸 SEO 中如何进行跨境关键词研究 在当今全球化的商业环境中,外贸 SEO(搜索引擎优化)已成为跨境电商企业提升品牌知名度和销售额的重要手段。而在外贸 SEO 中,跨境关键词研究是关键步骤。如何进行有效的跨境关键词研究呢&#…...
数据库死锁的排查:从现象到根因
在软件测试工作中,数据库的稳定性和数据一致性是评估系统质量的关键维度。死锁问题,作为数据库并发控制中的“顽疾”,其随机性、隐蔽性和破坏性常常让测试人员感到棘手。它不仅是性能测试中的“拦路虎”,更可能在线上引发严重故障…...
Kali与编程・暴力破解・大白话版(超好懂)
大家好,我是 Kali 与编程讲师老 K,B 站和网易云课堂讲师,致力于帮助小白轻松学会 Kali 与编程,接下来你将搞懂什么是《暴力破解》。 暴力破解,说白了就是用程序自动不停地试密码,一个一个试,直…...
Python脚本打包成.exe方法
利用 pyinstaller打包 先安装这个库 pip install pyinstaller安装完成后,就可台利用pyinstaller进行打包了 在脚本文件的目录下切到cmd中,执行以下 pyinstaller -F tcping.py-F参数: 表示覆盖打包,不管我们打包几次,都…...
保姆级教程:用Zephyr RTOS 3.x和nRF52832开发板,5分钟跑通你的第一个BLE心率监测应用
从零构建基于Zephyr RTOS的BLE心率监测系统:nRF52832开发实战指南 在物联网和可穿戴设备爆发的时代,低功耗蓝牙(BLE)技术已成为连接智能设备的重要纽带。对于嵌入式开发者而言,掌握BLE开发意味着打开了通往智能硬件世界…...
程序员十年职场经验:技术成长与生存法则
1. 程序员十年成长的血泪经验谈作为一个在代码堆里摸爬滚打十多年的老程序员,今天想和各位同行特别是刚入行的年轻开发者们聊聊那些只有时间才能教会你的事。这十年来我换过5家公司,辗转3个城市,从月薪3000到年薪百万,从单身汉到两…...
手把手教你封装OCCT_Window:一个可复用的Qt Widget组件(附完整源码)
手把手教你封装OCCT_Window:打造高复用Qt 3D显示组件 在工业软件和CAD应用开发中,将Open CASCADE的3D显示能力无缝集成到Qt界面是一个常见需求。传统做法往往需要开发者深入理解OCCT的窗口系统与Qt的交互机制,导致大量重复劳动。本文将展示如…...
基于深度学习的手把手学习 YOLOv8-Pose 关键点检测实战:杂草根茎关键点标注与训练全流程指南
YOLOv8-Pose 关键点检测实战:杂草根茎关键点标注与训练全流程指南 作者:张教授(计算机视觉与农业AI实验室主任) 引言在精准农业和智能除草领域,杂草根茎关键点检测技术具有重要意义。传统YOLO系列主要关注目标检测&…...
D3作业1-K8s 存储与服务实验手册(实验1-4)
前置准备:配置Harbor私有仓库 # 在k8s-harbor1上执行# 1. 下载镜像 docker pull registry.cn-hangzhou.aliyuncs.com/zhangshijie/nginx:1.22.0-alpine# 2. 打标签 docker tag registry.cn-hangzhou.aliyuncs.com/zhangshijie/nginx:1.22.0-alpine 192.168.44.104/library/ng…...
深入解析MyBatis查询异常:org.apache.ibatis.exceptions.PersistenceException的排查与修复
1. 初识PersistenceException:MyBatis的"红色警报" 当你看到控制台突然抛出org.apache.ibatis.exceptions.PersistenceException时,就像开车时仪表盘突然亮起故障灯。这个异常是MyBatis框架的通用异常包装器,专门用来封装数据库操作…...
