当前位置:网站首页>第8章、MapReduce 生产经验
第8章、MapReduce 生产经验
2022-07-03 06:18:00 【驾驭精神领域】
8.1 MapReduce 跑的慢的原因
MapReduce 程序效率的瓶颈在于两点:
1)计算机性能
CPU、内存、磁盘、网络
2)I/O 操作优化
(1)数据倾斜
(2)Map 运行时间太长,导致 Reduce 等待过久
(3)小文件过多
8.2 MapReduce 常用调优参数
8.2.1 Map阶段调优
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C321GUiK-1653447928839)(../../_resources/b116edd9e4616bf689dc557595e25af4-3.png)]](/img/31/a29c139772bc82c43840333b5c9a26.png)
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
job.setCombinerClass(xxxReducer.class);
5)为了减少磁盘IO,可以采用Snappy或者LZO压缩
conf.setBoolean(“mapreduce.map.output.compress”, true);
conf.setClass(“mapreduce.map.output.compress.codec”,
SnappyCodec.class,CompressionCodec.class);(企业常用Snappy压缩)
6)mapreduce.map.memory.mb 默认MapTask内存上限1024MB。
可以根据128m数据对应1G内存原则提高该内存。
7)mapreduce.map.java.opts:控制MapTask堆内存大小。(如果内存不够,报:java.lang.OutOfMemoryError)
8)mapreduce.map.cpu.vcores 默认MapTask的CPU核数1。计算密集型任务可以增加CPU核数
9)异常重试
mapreduce.map.maxattempts每个Map Task最大重试次数,一旦重试次数超过该值,则认为Map Task运行失败,默认值:4。根据机器性能适当提高。
8.2.2 Reduce阶段调优
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jxbXU3AN-1653447928840)(../../_resources/ea9d519d97351e1c7c32c8ae3bd05a3b-2.png)]](/img/6d/2c9eece28cbd71cc38d3a70cc70559.png)
1)mapreduce.reduce.shuffle.parallelcopies每个Reduce去Map中拉取数据的并行数,默认值是5。可以提高到10。
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)mapreduce.reduce.memory.mb 默认ReduceTask内存上限1024MB,根据128m数据对应1G内存原则,适当提高内存到4-6G
5)mapreduce.reduce.java.opts:控制ReduceTask堆内存大小。(如果内存不够,报:java.lang.OutOfMemoryError)
6)mapreduce.reduce.cpu.vcores默认ReduceTask的CPU核数1个。可以提高到2-4个。
7)mapreduce.reduce.maxattempts每个Reduce Task最大重试次数,一旦重试次数超过该值,则认为Map Task运行失败,默认值:4。
8)mapreduce.job.reduce.slowstart.completedmaps当MapTask完成的比例达到该值后才会为ReduceTask申请资源。默认是0.05。
9)mapreduce.task.timeout如果一个Task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该Task处于Block状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远Block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000(10分钟)。如果你的程序对每条输入数据的处理时间过长,建议将该参数调大。
10)如果可以不用Reduce,尽可能不用
8.3 MapReduce数据倾斜
1)数据倾斜现象
数据频率倾斜—某一个区域的数据量要远远大于其他区域
数据大小倾斜—部分记录的大小远远大于平均值
如下图,99%的数据已经运行完成,Reducer3、Reducer4仍然在运行,这就是数据倾斜的一个体现![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZfXzPPD7-1653447928841)(../../_resources/36a4d48478a0ec544f5c8fa53f371b24-3.png)]](/img/66/4fb11d95886edf957c515c65311d2e.png)
2)减少数据倾斜的方法
(1)首先检查是否空值过多造成的数据倾斜
在生产环境中,可以直接过滤掉空值;如果想保留控制,就自定义分区,将空值加上随机数打散,最后再二次聚合。
(2)能在map阶段提前处理,最好在map阶段处理。如:Combiner、MapJoin
(3)设置多个reduce个数
边栏推荐
- Openresty best practices
- GPS坐标转百度地图坐标的方法
- phpstudy设置项目可以由局域网的其他电脑可以访问
- Tabbar settings
- opencv
- Kubernetes notes (IX) kubernetes application encapsulation and expansion
- Kubesphere - build MySQL master-slave replication structure
- Floating menu operation
- Mysql database binlog log enable record
- Use selenium to climb the annual box office of Yien
猜你喜欢

.NET程序配置文件操作(ini,cfg,config)

Mysql

SVN分支管理
![[set theory] relational closure (relational closure solution | relational graph closure | relational matrix closure | closure operation and relational properties | closure compound operation)](/img/a4/00aca72b268f77fe4fb24ac06289f5.jpg)
[set theory] relational closure (relational closure solution | relational graph closure | relational matrix closure | closure operation and relational properties | closure compound operation)

Kubernetes notes (III) controller

Core principles and source code analysis of disruptor

Cesium 点击获三维坐标(经纬度高程)

In depth analysis of kubernetes controller runtime

有意思的鼠标指针交互探究

SQL实现将多行记录合并成一行
随机推荐
YOLOV2学习与总结
Jedis source code analysis (II): jediscluster module source code analysis
Cesium 点击获三维坐标(经纬度高程)
Bio, NiO, AIO details
tabbar的设置
Luogu problem list: [mathematics 1] basic mathematics problems
从小数据量分库分表 MySQL 合并迁移数据到 TiDB
Solve the problem that Anaconda environment cannot be accessed in PowerShell
Naive Bayes in machine learning
Support vector machine for machine learning
简易密码锁
Kubernetes notes (V) configuration management
Clickhouse learning notes (2): execution plan, table creation optimization, syntax optimization rules, query optimization, data consistency
Selenium - 改变窗口大小,不同机型呈现的宽高长度会不一样
Difference between shortest path and minimum spanning tree
Some thoughts on machine learning
Clickhouse learning notes (I): Clickhouse installation, data type, table engine, SQL operation
Zhiniu stock project -- 05
Kubernetes notes (IV) kubernetes network
使用 Abp.Zero 搭建第三方登录模块(一):原理篇