当前位置:网站首页>第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阶段调优
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阶段调优
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仍然在运行,这就是数据倾斜的一个体现
2)减少数据倾斜的方法
(1)首先检查是否空值过多造成的数据倾斜
在生产环境中,可以直接过滤掉空值;如果想保留控制,就自定义分区,将空值加上随机数打散,最后再二次聚合。
(2)能在map阶段提前处理,最好在map阶段处理。如:Combiner、MapJoin
(3)设置多个reduce个数
边栏推荐
- Pdf files can only print out the first page
- 使用conda创建自己的深度学习环境
- PMP笔记记录
- Cesium Click to obtain the longitude and latitude elevation coordinates (3D coordinates) of the model surface
- Analysis of Clickhouse mergetree principle
- conda和pip的区别
- Floating menu operation
- 23 design models
- Read blog type data from mysql, Chinese garbled code - solved
- Cesium 点击获三维坐标(经纬度高程)
猜你喜欢
Kubernetes notes (IX) kubernetes application encapsulation and expansion
Oauth2.0 - user defined mode authorization - SMS verification code login
Read blog type data from mysql, Chinese garbled code - solved
Kubernetes notes (VIII) kubernetes security
YOLOV3学习笔记
Clickhouse learning notes (I): Clickhouse installation, data type, table engine, SQL operation
Kubernetes notes (VI) kubernetes storage
Method of converting GPS coordinates to Baidu map coordinates
JMeter performance automation test
The most responsible command line beautification tutorial
随机推荐
Mysql5.7 group by error
CKA certification notes - CKA certification experience post
JMeter performance automation test
代码管理工具
JMeter linked database
Judge whether the date time exceeds 31 days
Redis cluster creation, capacity expansion and capacity reduction
Floating menu operation
【C#/VB.NET】 将PDF转为SVG/Image, SVG/Image转PDF
PHP用ENV获取文件参数的时候拿到的是字符串
Scripy learning
Kubesphere - build Nacos cluster
轻松上手Fluentd,结合 Rainbond 插件市场,日志收集更快捷
Oracle database synonym creation
Introduction to software engineering
Kubernetes notes (IX) kubernetes application encapsulation and expansion
Read blog type data from mysql, Chinese garbled code - solved
pytorch练习小项目
Luogu problem list: [mathematics 1] basic mathematics problems
Shell conditional statement