MapReduce生产经验

楼高1年前技术文章457

MapReduce程序效率的瓶颈在于两点:

1)计算机性能

(1)CPU、内存、磁盘、网络

2)I/O操作优化

(1)数据倾斜

(2)Map运行时间太长,导致Reduce等待过久

(3)小文件过多

下来就根据这两点瓶颈可以进行适当调优

map端:

1.自定义分区,减少数据倾斜,代码中定义类,继承Partitioner接口,重写getPartition方法

2.减少溢写的次数,mapreduce.task.io.sort.mb,Shuffle的环形缓冲区大小默认100m,可以提高到200m,mapreduce.map.sort.spill.percent,环形缓冲区溢出的阀值默认是80%,可以提高到90%

3.增加Merge合并次数,mapreduce.task.io.sort.factor默认是10,可以提高到20

4.在不影响业务的前提下提前Combiner

5.减少磁盘IO可以采用Snappy压缩

6.Mapreduce.map.memory.mb,默认MapTask内存1g,根据实际情况提高该内存

7.Mapreduce.map.java.opts,控制MapTask堆内存大小,如果内存不够报错oom

8.Mapreduce.map.cpu.vcores,默认MapTask的CPU核数1,如果计算比较密集可以增加CPU核数

9.异常重试,mapreduce.map.maxattempts,每个MapTask最大重试次数,一旦重试次数超过,认为MapTask失败,根据机器性能可以提高

reduce端:

1.mapreduce.reduce.shuffle.parallelcopies,每个Reduce去Map中拉去数据的并行数,默认值是5,可以适当提高

2.Mapreduce.reduce.shuffle.input.buffer.percent,Buffer大小占Reduce可用内存的比例,默认值0.7,可以提高到0.8

3.Mapreduce.reduce.shuffle.merge.percent,Buffer中的数据达到多少比例开始写入磁盘,默认值0.66,可以提高到0.75

4.Maperduce.reduce.memory.mb默认ReduceTask内存上限1g,128m数据对应1g内存原则,适当提高内存到4-6g

5.Mapreduce.reduce.java.opts,控制ReduceTask堆内存大小,和map一样如果内存不够报错oom

6.Mapreduce.reduce.cpu.vcores默认ReduceTask的CPU核数1个,可以提高到2-4个

7.Mapreduce.reduce.maxattempts每个Reduce Task最大重试次数,一旦重拾次数超过认为失败,根据机器性能适当提高

8.Mapreduce.job.reduces.slowstart.completedmaps当MapTask完成的比例达到该值后才会为ReduceTask申请资源。

能不用Reduce尽可能不用


相关文章

Linux SSSD同步大量AD用户缓慢

Linux SSSD同步大量AD用户缓慢

1、背景在使用AD + sssd (ad作为ldap)同步用户,其中AD中存在10000+ 用户,同步时,用户信息获取缓慢,导致cdh的namenode 的rpc 队列打高,服务不正常。id 用户达到...

ACOS统一监控之java应用断诊

ACOS统一监控之java应用断诊

一、前言对于一些使用Java语言搭建的应用架构,java的应用诊断可以帮助开发人员快速发现和解决应用程序中的问题,提高应用程序的性能和稳定性。以下是常用Java应用诊断方法:堆转储分析:使用工具如MA...

Kafka性能维度标准

如何判断一个kafka集群是否已经处于性能瓶颈,通常的判断条件有如下几点:维度1:磁盘IO读写磁盘性能是kafka重要的参数指标,如果磁盘IO到达性能瓶颈会直接导致业务故障。Kafka读写性能跟磁盘I...

oracle PUS.SPU.CPU.BP.RU.RUR概念简介

PUS.SPU.CPU.BP.RU.RUR概念介绍PSU(Patch Set Updates):Oracle 选取在每个季度用户下载数量最多,并且得到验证具有较低风险的补丁放入到每个季度的PSU中,修...

kafka安全认证与授权

kafka安全认证与授权一、SASL、SSL、ACL介绍1.SASL鉴权协议,主要用来保证客户端登录服务器的时候,传输的鉴权数据的安全性,SASL是对用户名和密码加解密用的 2.SSL是一种间于传输层...

服务器间文件传输方法

一、windows间互传当我们想要对业务数据进行传输时,需要借助第三方工具或者系统自带的服务进行数据传输,以下介绍三种常见数据传输方法1、通过windows自带的系统映射服务拷贝数据到目标服务器;端口...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。