当前位置:网站首页>第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个数
边栏推荐
猜你喜欢

Push box games C #

Fluentd facile à utiliser avec le marché des plug - ins rainbond pour une collecte de journaux plus rapide

Skywalking8.7 source code analysis (I): agent startup process, agent configuration loading process, custom class loader agentclassloader, plug-in definition system, plug-in loading

Kubesphere - set up redis cluster

Kubesphere - build MySQL master-slave replication structure

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

技术管理进阶——你了解成长的全貌吗?

arcgis创建postgre企业级数据库

Cesium Click to obtain the longitude and latitude elevation coordinates (3D coordinates) of the model surface

Kubesphere - build Nacos cluster
随机推荐
Printer related problem record
Zhiniu stock -- 03
Naive Bayes in machine learning
Oauth2.0 - user defined mode authorization - SMS verification code login
Apifix installation
JMeter linked database
有意思的鼠標指針交互探究
The win7 computer can't start. Turn the CPU fan and stop it
The mechanical hard disk is connected to the computer through USB and cannot be displayed
Detailed explanation of findloadedclass
Kubesphere - Multi tenant management
Reinstalling the system displays "setup is applying system settings" stationary
Pdf files can only print out the first page
Oauth2.0 - Introduction and use and explanation of authorization code mode
技术管理进阶——你了解成长的全貌吗?
Judge whether the date time exceeds 31 days
冒泡排序的简单理解
phpstudy设置项目可以由局域网的其他电脑可以访问
堆排序和优先队列
What's the difference between using the Service Worker Cache API and regular browser cache?