主页 > 新闻资讯 > 大数据学习:MapReduce性能优化

大数据学习:MapReduce性能优化

作者:张老师 浏览次数: 2020-12-07 17:13
作为Hadoop核心计算引擎的MapReduce,虽然在后来的发展当中,因为不适应新的要求,逐步遭到企业主流的抛弃,但是不得不承认,MapReduce的分布式计算思想,仍然是适用于大数据的。今天的大数据学习分享,我们就来讲讲MapReduce性能优化的知识。

对MapReduce进行性能优化,本质上来说,还是因为在企业级大数据系统的运行当中,总会遇到各种各样的现实情况,需求的变化也会带来数据处理任务的新的要求。

大数据学习:MapReduce性能优化

MapReduce性能优化,我们分为两个部分来看——Map任务和Reduce任务。

Map任务的流程

Read阶段:从HDFS读取固定大小(64M)的数据块

Map阶段:需要测量整个Map函数执行时间和处理的记录数。来判断是否有某个Map处理了超常规数据;过多的文件数量(小文件)或者过大的文件大小(单个不可拆分的文件)

Spill阶段:对数据进行本地排序,并针对不同的reduce进行划分,同时如果有可用的combiner则进行合并,然后把中间数据写入磁盘

Fetch阶段:把Map的输出缓冲到内存,记录产生的中间数据量

Merge节点:针对每一个reduce任务,把Map输出合并成单个溢写文件

Reduce任务的流程

Shuffle阶段:Map任务向Reduce传输中间数据,并对其进行合并和排序

Reduce阶段:测量每个数据键及其对应的所有值上运行reduce函数的耗时

Write阶段:将结果输出到HDFS

优化MapReduce任务

1、使用Combiner

类似于本地Reduce操作,可以提升全局Reduce操作效率。习惯上一般直接把reduce函数当做Combiner,逻辑需满足交换律和结合律。

Combiner会在Map函数生成的键值对收集到列表,并经过Combiner运算直到Combiner缓冲区达到一定数目时,才会发送给reduce。因此在数据量非常大的情况下可以很好的改善性能。

2、使用压缩技术

输入压缩:在有大量数据且计划重复处理时,应考虑输入压缩。Hadoop会自动对合适扩展名的文件启用压缩和解压。

压缩Mapper输出:当map任务中间数据量大时,应考虑在此阶段启用压缩。能改善Shuffle过程,降低网络开销。

压缩Reducer输出:可以减少要存储的结果数据量,同时降低下游任务的输入数据量。

如果磁盘IO和网络影响了MR作业性能,则在任意阶段(压缩输入,Mapper或Reduce输出)启用压缩都可以改善处理时间,减小IO和网络开销。

3、复用类型

复用已存在的实例比创建新的代价更低,尽量避免创造短生命周期的对象,会造成GC压力变大。开启JVM复用,降低新启动JVM造成的开销。

关于大数据学习,MapReduce性能优化,以上就是给到大家的一些思路了。对于大数据计算任务的优化,需要对MapReduce数据处理流程做到足够的了解,知道该从哪里下手很关键。成都加米谷大数据,专业大数据培训机构,大数据开发、数据分析与挖掘,本月正在招生中,课程大纲及试学视频,可联系客服获取!
热点排行
推荐文章
立即申请>>