MapReduce分区、排序、Combiner

news2024/7/6 19:08:39

Shuffle

MapReduce的Map阶段与Reduce阶段之间有一个Shuffle的过程,包括分区、排序等内容。数据从Map阶段出来后,会进入一个环形缓冲区(默认100M),环形缓冲区中会同时记录数据和索引,当使用了80%的时候,会进行反向写,已有的数据会进行溢写,写到文件中,在溢写之前,会进行排序,对数据的索引按照字典序进行快排。溢写文件的过程包括分区、排序、Combine、归并排序等过程,溢写完成之后,ReduceTask会主动拉取文件进行处理。

默认分区HashPartitioner

MpaReduce默认1个分区,分区规则是key的哈希值对ReduceTask的数量取余,用户没法控制哪个key存在哪个分区:

自定义Partitioner

继承Partitioner抽象类,实现getPartition方法:

 自定义Partioner类的泛型跟MapTask的出参的key、value类型一致,getPartition方法返回的是整数(分区号从0开始),表示哪个分区。然后还需在job中设置Partitioner的class:

 还要设置ReduceTask的个数,一般与分区数一致:

如果设置的ReduceTask的个数(1除外)小于分区数,则会报错,抛IO异常。但是ReduceTask的个数设为1是可以的,因为根据源码,分区数设为1,不会走自定义Partitioner:

 

 

如果设置的ReduceTask的个数大于分区数,也不会报错,但会产生空文件。

如果设置的ReduceTask的个数为0,则不会有ReduceTask执行,最终输出的文件仅仅是MapTask产生的输出文件。

MapReduce排序

排序是MapReduce中的一个重要的操作,MapTask和ReduceTask都会根据key进行排序,属于默认行为,不管逻辑上是否真的需要排序。默认是按照字典序排序。

自定义排序:实现WritableCompatable接口,实现其compareTo方法,根据业务逻辑需要自定义排序规则,一般是实现在自定义的可序列化的bean上。

Combiner

Combiner是MapReduce中Mapper和Reducer之外的一种组件,父类是Reducer,相当于在ReduceTask之前提前做了一些汇总工作,减轻ReduceTask的工作量,他与Reducer的区别在于Combiner是在MapTask节点运行,而ReduceTask是接受所有的MapTask的结果。应用Combiner时应确保不影响正确的业务逻辑,而且Combiner输出的key、value类型要与ReduceTask的输入的key、value类型对应。

例如不使用Combiner,会使得(a,1)、(a,1)、(a,1)这种数据想ReduceTask传三次,使用了Combiner,可以直接传(a,3)。

自定义Combiner

实现Reducer方法,实现reduce方法,然后再job中设置Combiner的class。如果Combiner的实现逻辑和自定义的Reducer逻辑一致,可以不用自定义Combiner实现类,直接在job中设置Combiner的类为自定义的Reducer类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22437.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL主从数据库数据同步

运行环境 操作系统:Debian 11.5 数 据 库:PostgreSQL 14.6 主数据库:192.168.8.68 从数据库:192.168.8.69 使用apt-get安装postgresql,安装方法可以参考 https://blog.csdn.net/itbs/article/details/127909359?…

智能家居环境小护士(原理图、pcb、源码、设计报告)

目录 ARM-STM32校园创新大赛 1 题 目: 智能家居环境小护士 1 摘要 1 引言 2 系统方案 3 整套系统的工作原理是:单片机是整套系统的控制核心,温湿度传感器负责测试环境中的温湿度;烟雾传感器负责检测空气中的有毒气体,…

数据同步工具DataX介绍和原理

目录1. DataX介绍2. 框架设计3. 架构1. DataX介绍 DataX是一个各种数据源之间的离线数据同步工具 DataX的设计理念是一种星型数据链路。DataX作为中间传输载体负责连接各种数据源,通过reader从一个数据源读取数据,再通过writer将数据写入另一个数据源。…

Hadoop运行模式

hgfhfg Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。 Hadoop官方网站:Apache Hadoop 一、本地运行模式 官方Grep案例 1. 创建在hadoop-2.7.2文件下面创建一个input文件夹 mkdir input 2. 将Hadoop的xml配置文件复制到input cp et…

FTP替代产品方案的优异性体现在哪些方面?

多年来,FTP一直是最常见的交换文件的方式,FTP-FTPS-SFTP似乎是FTP的不断迭代更新,但是究竟是技术更新导致FTP过时?还是它真的已经满足不了企业的需求了? 之前,大家选择FTP往往是因为它简单易得的特性&…

在 MySQL 中模拟外部联接 (LEFT、RIGHT、INNER JOIN、OUTER JOIN)

上周的文章详细介绍了 SELECT 查询中的外部联接。它是一种 JOIN 类型,可以从相关表中返回匹配和不匹配的行。遗憾的是,并非所有数据库(DB)供应商都支持它,包括 MySQL。但这没关系,因为可以通过组合其他三种…

【Java】构造方法及类的初始化

一. 利用构造方法给对象初始化 1. 构造方法的概念 构造方法(也称为构造器)是一个特殊的成员方法,其名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。 构造方法的作用就是给对象中的成…

心知天气api接口怎么用?

心知天气是什么?心知天气提供API吗? 心知天气是国内领先的气象服务商,由中国气象局官方授权的商业气象服务公司,基于气象数值预报和人工智能技术,提供高精度气象数据、天气监控机器人、气象数据可视化产品&#xff0c…

基于PHP+MySQL美食分享网站的设计与实现(含论文)

本系统是一个基于PHP和MySQL的美食分享网站,在本网站中用户可以通过注册登录来查看其他人分享的美食,查看周边好吃的店铺,分享和管理自己的美食,并且可以对他人分享的美食进行评论等一系类操作,通过这些操作可以让大家更加愉快的就美食进行交流 通过上图我们可以看到美食网站的…

Web APIs——DOM

JS 的组成 Web API Web API 是浏览器提供的一套操作浏览器功能和页面元素的 API ( BOM 和 DOM )。 现阶段我们主要针对于浏览器讲解常用的 API , 主要针对浏览器做交互效果。 比如我们想要浏览器弹出一个警示框, 直接使用 alert(‘弹出’) MDN 详细 API : https://d…

如何在Github精准地搜索项目

文章目录1、Github的项目有什么组成?2、如何搜索?in:name 条件in:readme 条件in:description 条件language:条件pushed: 条件stars: 条件awesome 关键字3、查看阅读项目https://blog.csdn.net/qq_45069279/article/details/107809617 https://blog.csdn.…

[附源码]SSM计算机毕业设计高校教师教学助手系统的设计与实现JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

将Nacos注册到springboot使用以及Feign实现服务调用

哈喽~大家好,这篇来看看将Nacos注册到springboot使用以及Feign实现服务调用。 🥇个人主页:个人主页​​​​​ 🥈 系列专栏:【微服务】 🥉推荐专栏: JavaEE框架 目录 …

8 年 Java 开发含泪刷题,架构岗现在好难进,有点崩溃

架构岗现在好难进,有点崩溃了。一位粉丝后台留言道。具体问了下情况,是一位 8 年工作经验的朋友,代码功底扎实,项目经验也积累了不少。 为什么要用分布式锁?分布式锁的释放,需要注意什么?锁的过…

Elastic:总结收集日志的几种方法

到目前为止,我们看到有很多中不同的方法来收集日志。甚至,我们针对同样的一个日志,有好多种方法来进行采集。在今天的这篇文章中,我来简单里回顾一下。 通过 Filebeat 采集 Filebeat 是最为常用的一种采集日志的方法。使用 Fileb…

市面上哪种耳机适合跑步用、五款最适合跑步用的蓝牙耳机分享

对于很多运动爱好者来说,跑步,就像吃饭一样,已经成为生活中非常重要的习惯,跑步时听听音乐,让跑步的过程更加愉悦,但是你的运动耳机选对了嘛?首先我们要知道一款专业的运动耳机,一定…

Zookeeper:Mac通过Docker安装Zookeeper集群

此篇为 “Mac通过Docker安装Zookeeper集群”,笔者原本计划是接下来更新Zookeeper应用系列的相关内容,但相关内容依赖Zookeeper集群,虽然前面也更新了 Linux下Zookeeper在三种模式下的部署,但是大家很可能不会有相关的Linux集群准备…

java项目-第152期ssm远程诊断系统-java毕业设计_计算机毕业设计

java项目-第152期ssm远程诊断系统-java毕业设计_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《远程诊断系统》 该项目分为3个角色,管理员、用户和医生。 用户可以在前台浏览医生信息,并且可以进行在线预约, 在后台个人中心可以…

解决常见的电脑故障

1.电脑卡顿怎么办 电脑CPU使用率高的原因有很多;例如:软件方面——驱动故障、病毒影响;硬件方面——内存容量太小,风扇散热故障等。 有效的解决方法:关闭Windows通知 在【设置】-【系统】-【通知和操作】中&#xff0c…