hadoop调优及常用调优参数

简介: hadoop调优及常用调优参数

MapReduce跑的慢的原因
MapReduce程序效率的瓶颈在于两点:
1.计算机性能
cpu,内存,磁盘健康,网络

2.I/O操作优化

  • 数据倾斜
  • Map和Reduce数设置不合理
  • Map运行时间过长,导致Reduce等待过久
  • 小文件过多
  • 大量不可切片的超大压缩文件
  • Spill次数过多等
  • Merge次数过多

MapReduce优化方法
MapReduce优化方法主要从六个方面考虑:

  • 数据输入
  • Map阶段
  • Reduce阶段
  • I/O传输
  • 数据倾斜问题
  • 常用调优参数

Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数。

数据输入

  • 合并小文件:在执行MapReduce任务前将小文件进行合并,大量的小文件会产生大量的Map任务,增大Map任务的装载次数,而任务的装载比较消耗时,从而导致MapReduce运行比较慢.
  • 采用CombineTextInputFormat来作为输入解决输入daunt大量小文件场景.

Map阶段

  • 减少溢写次数(Spill):通过调整mapreduce.task.io.sort.mb及mapreduce.map.sort.percent参数值,增大出发Spill的内存上限,减少Spill次数从而达到减少磁盘IO的目的
  • 减少合并次数(Merge):通过调整mapreduce.task.io.sort.factor参数,增大Merge的文件数目,减少Merge的次数,来达到缩短MR处理时间
  • 在Map之后,先进行Combine处理(在不影响业务逻辑的前提下)可以有效的减少IO

Reduce阶段

  • 合理设置Map和Reduce数:不能太多,也不能太少,太多会导致Map,Reduce任务之间竞争资源,造成处理超时等错误;太少的话会导致Task等待,延长处理时间
  • 设置Map,Reduce共存:调整mapreduce.job.reduce.slow.completedmaps参数,使Map运行到一定程度后,Reduce也开始运行,减少Reduce的等待时间
  • 规避使用Reduce:Reduce在用于连接数据集的时候将会产生大量的网络消耗
  • 合理设置Reduce端的Buffer:默认情况下,数据达到一个阈值的时候,Buffer中的数据就会写入磁盘,然后Reduce会从磁盘中获得所有的数据,也就是说.Buffer和Reduce是没有直接关联的,中间多次写入磁盘—>读磁盘的过程,可以通过参数来进行配置,使得Buffer中的一部分数据可以直接输送到Reduce,从而减少IO开销(mapreduce.reduce.input.buffer.percent,默认为0.0 ,当值大于0的时候,会保留指定比例的内存读buffer中的数据直接拿Reduce使用,这样一来,设置Buffer需要内存,读取数据需要内存,Reduce计算也需要内存,所以需要根据作业的运行情况进行调整)

I/O传输

  • 采用数据压缩的方式,减少网络IO的时间(建议安装Snappy和LZO压缩编码器)
  • 使用SequenceFile二进制文件

数据倾斜问题
数据倾斜现象:
数据频率倾斜————某一个区域的数据量要远远大于其他区域
数据大小倾斜————部分记录的大小远远大于平均值

减少数据倾斜的方法:

  • 抽样和范围分区
  • 自定义分区
  • Combiner(能用就要使用)
  • 尽量采用Map Join,避免Reduce Join

常用调优参数
1.资源相关参数
(1) 以下参数是在用户自己的MR应用程序中配置就可以生效(mapred-default.xml)

配置参数 参数说明
mapreduce.map.memory.mb 一个MapTask可使用的资源上限(单位:MB),默认为1024。如果MapTask实际使用的资源量超过该值,则会被强制杀死。
mapreduce.reduce.memory.mb 一个ReduceTask可使用的资源上限(单位:MB),默认为1024。如果ReduceTask实际使用的资源量超过该值,则会被强制杀死。
mapreduce.map.cpu.vcores 每个MapTask可使用的最多cpu core数目,默认值: 1
mapreduce.reduce.cpu.vcores 每个ReduceTask可使用的最多cpu core数目,默认值: 1
mapreduce.reduce.shuffle.parallelcopies 每个Reduce去Map中取数据的并行数。默认值是5
mapreduce.reduce.shuffle.merge.percent Buffer中的数据达到多少比例开始写入磁盘。默认值0.66
mapreduce.reduce.shuffle.input.buffer.percent Buffer大小占Reduce可用内存的比例。默认值0.7
mapreduce.reduce.input.buffer.percent 指定多少比例的内存用来存放Buffer中的数据,默认值是0.0

(2)应该在YARN启动之前就配置在服务器的配置文件中才能生效(yarn-default.xml)

配置参数 参数说明
yarn.scheduler.minimum-allocation-mb 给应用程序Container分配的最小内存,默认值:1024
yarn.scheduler.maximum-allocation-mb 给应用程序Container分配的最大内存,默认值:8192
yarn.scheduler.minimum-allocation-vcores 每个Container申请的最小CPU核数,默认值:1
yarn.scheduler.maximum-allocation-vcores 每个Container申请的最大CPU核数,默认值:32
yarn.nodemanager.resource.memory-mb 给Containers分配的最大物理内存,默认值:8192

(3)Shuffle性能优化的关键参数,应在YARN启动之前就配置好(mapred-default.xml)

配置参数 参数说明
mapreduce.task.io.sort.mb Shuffle的环形缓冲区大小,默认100m
mapreduce.map.sort.spill.percent 环形缓冲区溢出的阈值,默认80%

2.容错相关参数(MapReduce性能优化)

配置文件 参数说明
mapreduce.map.maxattempts 每个Map Task最大重试次数,一旦重试次数超过该值,则认为Map Task运行失败,默认值:4
mapreduce.reduce.maxattempts 每个Reduce Task最大重试次数,一旦重试次数超过该值,则认为Map Task运行失败,默认值:4
mapreduce.task.timeout Task超时时间,经常需要设置的一个参数,该参数表达的意思为:如果一个Task在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该Task处于Block状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远Block住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000(10分钟)。如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是:“AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by the ApplicationMaster.”
相关文章
|
1月前
|
存储 分布式计算 资源调度
hadoop配置文件参数
hadoop配置文件参数【2月更文挑战第13天】
84 6
|
10月前
|
存储 分布式计算 运维
Hadoop---10、生产调优手册(二)
Hadoop---10、生产调优手册(二)
|
9月前
|
分布式计算 资源调度 Hadoop
Hadoop调优
Hadoop调优
87 1
|
21小时前
|
分布式计算 资源调度 Hadoop
大数据Hadoop集群部署与调优讨论
大数据Hadoop集群部署与调优讨论
|
23天前
|
资源调度 分布式计算 Hadoop
Hadoop Yarn 核心调优参数
这是一个关于测试集群环境的配置说明,包括3台服务器(master, slave1, slave2)运行CentOS 7.5,每台有4核CPU和4GB内存。集群使用Hadoop 3.1.3,JDK1.8。Yarn核心配置涉及调度器选择、ResourceManager线程数、节点检测、逻辑处理器使用、核心转换乘数、NodeManager内存和CPU设置,以及容器的内存和CPU限制。配置完成后,需要重启Hadoop并检查yarn配置。
|
23天前
|
分布式计算 Hadoop Java
Hadoop MapReduce 调优参数
对于 Hadoop v3.1.3,针对三台4核4G服务器的MapReduce调优参数包括:`mapreduce.reduce.shuffle.parallelcopies`设为10以加速Shuffle,`mapreduce.reduce.shuffle.input.buffer.percent`和`mapreduce.reduce.shuffle.merge.percent`分别设为0.8以减少磁盘IO。
|
1月前
|
存储 分布式计算 资源调度
Hadoop参数众多
【5月更文挑战第8天】Hadoop参数众多
21 4
|
1月前
|
存储 分布式计算 资源调度
❤️hadoop常用命令总结及百万调优❤️
❤️hadoop常用命令总结及百万调优❤️
55 0
|
10月前
|
存储 分布式计算 Hadoop
Hadoop---10、生产调优手册(一)
Hadoop---10、生产调优手册(一)
|
11月前
|
存储 分布式计算 资源调度
Hadoop 参数调优
Hadoop 参数调优
58 0

相关实验场景

更多