吐血整理!!!全网史上(不是)最详细MapReduce中合并以及组合器和压缩的定义及区别

MapReduce多表合并 MapReduce中多表合并合并选择: ​ Map:使用于一个小表一个大表 ​ reduce:使用于同时为大表的情况 Map端表合并: ​ 优点:适用于关联表中有小表的情形; ​ 可以将小表分发到所有的map节点,这样,map节点就可以在本地对自己所读到的大表数据进行合并并输出终结果,可以大大提高合并操作的并发度,加快处理速度。 代码实现: MapJoin.java public cl... 阅读详情

一、Shuffle中的两个优化:Combiner(组合器)&Compress(压缩)

首先给大家简单介绍一下MapReduce中shuffle机制:

●MapReduce中,map阶段处理的数据如何传递给reduce阶段,是MapReduce框架中最关键的一个流程,这个流程就叫shuffle;

●shuffle: 洗牌、发牌——(核心机制:数据分区,排序,缓存,合并)

●具体来说:就是将MapTask输出的处理结果数据,分发给ReduceTask,并在分发的过程中,对数据按key进行了分区和排序等处理;

1、Combiner

本质:提前进行聚合,让MapTask分担ReduceTask的工作

(针对WordCount快速了解)

不使用Combiner组合器:

这时就非常不合理,因为MapTask是有多个的,个数一般远大于ReduceTask 的个数。

解决:Combiner:发生在Map端shuffle中的Reduce的过程,提前在Map进行Reduce的聚合

本质:在Map端先做了一次Reduce的工作,分担的Reduce的任务

设计:利用MapTask有多个,每个Maptask处理数据也比较少,每个MapTask先聚合一次,聚合以后的结果再给Reduce

Combiner:就是在Map端的聚合 ,做的工作与Reduce实现的聚合是一模一样的一般称为Map端的Reduce

在MapTask中重写reduce()方法:触发条件:

  1. 每次Spill溢写时会被调用
  2. 合并时文件书超过三个会被调用

可以在环形缓存区溢写文件时调用combiner函数,也可以在溢写的小文件合并成大文件时调用combiner。但要保证不管调用几次combiner函数都不会影响最终的结果,所以不是所有处理逻辑都可以使用combiner组件,有些逻辑如果在使用了Combiner函数后会改变最后Reduce的输出结果。

Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。

2、Compress

压缩的本质:通过算法将数据重新进行存储,节省更多的空间,牺牲了CPU的资源(时间换空间)

作用:减少存储系统读写字节数、提高网络带宽和磁盘空间效率。

基本原则:

计算(CPU)密集型作业,少用压缩;

IO密集型作业,多用压缩

能压缩数据的位置:

MapTask写出(常用):MapTask写出的数据不需考虑是否可切分这个选项,只需要从性能角度考虑,推荐Snappy

ReduceTask写出:

ReduceTask写出的数据需要考虑是否是下一个作业的入口数据:

如果是,不推荐使用不可切分压缩算法;

如果计算后的结果无需再次计算,就是归档存储,且后续再计算的可能性也比较小,使用高比例压缩算法,节省存储空间

二、合并(Merge)

MapTask中:

因为溢写会产生很多有序(分区 key)的小文件,而且小文件的数目不确定

后面向Reduce传递数据带来很大的问题

所以将小文件合并成一个大文件,将来拉取的数据直接从大文件拉取即可

合并小文件的时候同样进行排序(归并排序),最终产生一个有序的大文件

每次最多合并十个文件

最终合并为file.out和file.out.index

Merge 是为了让传输的文件数量变少,但是网络传输数据量并没有改变,只是减少了网络 IO 次数。

ReduceTask中:

合并(Merge):同上

聚合(Reduce):

将文件中的数据读取到内存中

一次性将相同的key全部读取到内存中

直接将相同的key得到结果-->最终结果

大多数开发人员都弄错的Hive与MapReduce小文件合并问题 进来公司搞小文件治理(小于10Mb),小文件太多的危害就不此赘述了。公司的开发人员提供的小文件治理配置如下: -- 设置小文件合并 set hive.merge.mapfiles=true; set hive.merge.mapredfiles=true; set hive.merge.size.per.task = 256000000 ; set hive.merge.smallfiles.avgsize= 256000000 ; 看上去配置的没啥问题,不管是Map-only,还... 阅读详情

相关推荐

Hadoop-MapReduce(多表合并)

MapReduce中多表合并 需求 订单数据表t_order: id pid amount 1001 01 1 1002 02 2 1003 03 3 商品信息表t_product 将商品信息表中数据根据商品pid合并到订单数据表中。终数据形式: 需求1:Reduce端表合并(数据倾斜) 通过将关联条件作为map输出的key,将两表满足join条件的数据并...

qq_45092505的博客 1023

MapReduce:详解Shuffle过程

[size=medium] /** * author : 冶秀刚 * mail : dennyy99@gmail.com */ Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方。要想理解MapReduce, Shuffle是必须要了解的。我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混。前段时间...

每天一小步 1841

MapReduce merge机制

MapReduce merge机制 概述 在map端reduce端都会有merge过程,将segments进行多路归并成一个大的segment。在map端,一个spill-N.out文件在merge阶段使用一个segment代表。 merge过程 粗略过程: 从segments中每次remove出mergeFactor个segment进行归并,归并为一个大的segment,结束后将该segment插入segments中,继续该过程,直到segments.size<=mergeFactor,对其进行

KeePromise的博客 1606

大数据与云计算——部署Hadoop集群并运行MapReduce集群案例(超级详细)

这篇博客文章详细介绍了如何部署Hadoop集群并运行MapReduce任务。首先,我们将详细解释HadoopMapReduce的基本概念,以及它们在大数据处理中的重要性。然后,我们将逐步指导读者如何在多节点环境中部署Hadoop集群,包括硬件软件的配置,以及如何解决可能遇到的问题。接下来,我们将介绍如何在Hadoop集群上运行MapReduce任务,包括编写MapReduce程序,配置任务,以及监控任务的执行。后,我们将分享一些优化Hadoop集群性能MapReduce任务效率的技巧建议。

专注 AI、大数据、Python、爬虫、数据分析可视化、机器学习、推荐算法、知识图谱、大模型应用与全栈系统开发,长期沉淀真实项目案例、源码解析、系统设计、部署经验与工程化实践,分享可运行、可复用、可落地的技术方案。 6833

大数据开发之小文件合并

文件的平均大小=分区大小/文件数,理想情况下,文件的平均大小在128MB~256MB之间,如果文件的平均大小过于小,则认为数据表里小文件过多,可以进行文件的合并

julyclj55555的博客 1768

MapReduce 中多表合并案例

数据准备 order.txt 1001 01 1 1002 02 2 1003 03 3 1004 01 4 1005 02 5 1006 03 6 pd.txt 01 小米 02 华为 03 格力 将商品信息表中数据根据商品 pid 合并到订单数据表中。终数据形式: 需求 1: Reduce 端表合并(数据倾斜) 通过...

Da.的博客 2663

linux 组合排序,Hadoop中的排序/组合/合并

目前,海量数据处理主要存在二个问题:大规模计算(cpu+mem)、海量数据存储(disk),而Hadoop被专门设计用来针对海量数据的处理,它通过分布式文件系统解决海量数据的存储问题,组织成千上万个计算节点来共同完成一个任务解决了大规模计算问题。Hadoop的核心是MapReduce,而不是分布式文件系统HDFS,这是因为MapRduce所依赖的存储系统并不依赖于任何一个文件系统,甚至是分布式文件...

weixin_31299075的博客 149

MapReduce()常用三大组件

mapreduce三大组件:Combiner\Sort\Partitioner 默认组件:排序,分区(不设置,系统有默认值) 一、mapreduce中的Combiner 1、什么是combiner Combiner 是 MapReduce 程序中 Mapper Reducer 之外的一种组件,它的作用是在 maptask之后给 maptask 的结果进行局部汇总,以减轻 r...

weixin_30462049的博客 552

MapReduce之Reduce详解

Reduce 大致分为 copy、sort、reduce 三个阶段,重点在前两个阶段。copy 阶段包含一 个 eventFetcher 来获取已完成的 map 列表,由 Fetcher 线程去 copy 数据,在此过程中 会启动两个 merge 线程,分别为 inMemoryMerger onDiskMerger,分别将内存中的 数据 merge 到磁盘将磁盘中的数据进行 me...

qq_42214376的博客 2142

Hadoop的批处理框架MapReduce

MapReduce简介及简单案例

个人学习笔记库,一篇一篇记录成长的足迹 4137

MapReduce中多表合并案例

节点就可以在本地对自己所读到的大表数据进行合并并输出终结果,可以大大提高合并操作的并发度,加快处理速度。条件的数据并携带数据所来源的文件信息,发往同一个。节点的运算负载则很低,资源利用率不高,且在。缺点:这种方式中,合并的操作是在。(2)在驱动模块中添加缓存文件。适用于关联表中有小表的情形;将商品信息表中数据根据商品。(1)先读取缓存的文件数据。)创建商品合并后的。可以将小表分发到所有的。合并到订单数据表中。5)运行程序查看结果。阶段极易产生数据倾斜。

qq_15304885的博客 617

MapReduce处理小文件合并

一:小文件合并几种方式: 1、 在数据采集的时候,客户端就将小文件或小批数据合成大文件再上传HDFS 2、 在业务处理之前,在HDFS上使用mapreduce程序对小文件进行合并 3、 在mapreduce处理时,可采用combineInputFormat提高效率 二:自定义InputFormat合并小文件 通过自定义实现FileInputFormat,设置读取小文件时不进行切片,且使用...

qq_15076569的博客 3513

数组归并方法reduce()总结

JavaScript数组归并方法reduce()、reduceRight()

weixin_45907855的博客 1048

MapReduce

MapReduce概述 MapReduce是一种分布式并行编程框架 摩尔定律从2005年左右开始逐渐失效 MapReduce体系结构 TaskTracker是以什么方式来衡量自己的资源使用情况?使用一个slot(槽)的概念,它把机上面的所有的CPU内存资源进行打包,然后把资源进行等分,等分成很多个slot MapReduce工作流程 MapReduc...

hxxjxw的博客 413

MapReduce详细介绍---分片,分区,合并,归并>>shuffle过程

MapReduce的shuffle过程:这个过程就是输入一个杂乱,毫无规则的数据。在经过MapReduce通过自定义一些规则,分片,分区,在经过合并,归并的操作,后让其按照这个规则输出来,写入磁盘。 1.输入分片---分片 输入分片(inputSpilt):在进入map之前,需要经过分片,在我们不设置分片的大小时候,有两种规则,一种就是block充满数据,就是分片的大小大约是一个bloc...

十五亿少女的心的博客 2819

简单的MapReduce实践

简单的MapReduce实践 文章目录简单的MapReduce实践操作环境实现文件合并去重操作新建项目新建Java程序打包程序运行程序参考文章 操作环境 操作系统:Ubuntu 16.04 JDK 版本:1.8 Hadoop 版本:Hadoop 3.1.3 Java IDE:Eclipse 我的 Hadoop安装目录是“/usr/local/hadoop”,环境变量 HDAOOP_HOME也...

qq_42582489的博客 3143

Hadoop3教程(三十四):(生产调优篇)MapReduce生产经验汇总

主要介绍了MR中各阶段常用的调优参数设置,并简单分析了下当MR程序跑的慢的时候,可以从哪些角度考虑优化

经年藏殊的博客 1097

MapReduce入门(二)合并小文件

hadoop为什么要合并小文件? 小文件是指文件size小于HDFS上block大小的文件。这样的文件会给hadoop的扩展性性能带来严重问题。首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1000 0000个小文件,每个文件占用一个block,则namenode大约需要2G空间。...

weixin_30783913的博客 567
上一篇: 深入学习YARN集群的工作流程
下一篇: 腾讯面试SQL题,有一张用户签到表【t_user_attendence】,标记每天用户是否签到。
此番又为几个铜板
博客等级 码龄5年 62粉丝 · 7原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值