作为Hadoop核心计算引擎的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数据处理流程做到足够的了解,知道该从哪里下手很关键。成都加米谷大数据,专业
大数据培训机构,大数据开发、数据分析与挖掘,本月正在招生中,课程大纲及试学视频,可联系客服获取!