当前位置:网站首页>第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个数
边栏推荐
- .NET程序配置文件操作(ini,cfg,config)
- Nacos service installation
- Oracle Database Introduction
- 项目总结--01(接口的增删改查;多线程的使用)
- 有意思的鼠标指针交互探究
- Jedis source code analysis (II): jediscluster module source code analysis
- GPS坐标转百度地图坐标的方法
- Skywalking8.7 source code analysis (I): agent startup process, agent configuration loading process, custom class loader agentclassloader, plug-in definition system, plug-in loading
- pytorch练习小项目
- Oauth2.0 - using JWT to replace token and JWT content enhancement
猜你喜欢

Migrate data from Mysql to tidb from a small amount of data

Analysis of Clickhouse mergetree principle

Kubernetes notes (IV) kubernetes network

IE browser flash back, automatically open edge browser

Mysql

轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷

Selenium ide installation recording and local project maintenance

剖析虚幻渲染体系(16)- 图形驱动的秘密

Method of converting GPS coordinates to Baidu map coordinates

Simple solution of small up main lottery in station B
随机推荐
The most responsible command line beautification tutorial
Scripy learning
The most classic 100 sentences in the world famous works
Cannot get value with @value, null
Shell conditional statement
Jedis source code analysis (II): jediscluster module source code analysis
Push box games C #
Use @data in Lombok to simplify entity class code
Kubesphere - set up redis cluster
Cesium entity(entities) 实体删除方法
Migrate data from Mysql to tidb from a small amount of data
The mechanical hard disk is connected to the computer through USB and cannot be displayed
Judge whether the date time exceeds 31 days
Kubernetes notes (10) kubernetes Monitoring & debugging
Disruptor learning notes: basic use, core concepts and principles
Selenium - 改变窗口大小,不同机型呈现的宽高长度会不一样
How to scan when Canon c3120l is a network shared printer
Kubernetes notes (V) configuration management
In depth analysis of kubernetes controller runtime
Kubernetes notes (IX) kubernetes application encapsulation and expansion