Hadoop-使用优化整合

Hadoop企业优化

MapReduce跑得慢的原因

在这里插入图片描述

MapReduce优化的方法

MapReduce 优化方法主要从六个方面考虑:数据输入、Map 阶段、Reduce 阶段、IO 传输、数据倾斜问题和常用的调优参数。

数据输入

在这里插入图片描述

CombineTextInputFormat 用于小文件过多的场景,它可以将多个小文件从逻辑上规划到一个切片中,这样,多个小文件就可以交给一个 MapTask 处理。因此CombineTextInputFormat切片可用于小文件处理。

Map阶段

在这里插入图片描述

io.sort.mb:环形缓冲区区的大小,默认100M

sort.spill.percent:缓存到达百分之多少的时候,进行溢写操作,默认80%

io.sort.factor:每次merge的文件数,默认为10个

Combiner适用于汇总,不适用于平均。

Reduce阶段

在这里插入图片描述

影响map个数的因素是切片的个数;Reduce的直接配置(最好与分区数相同),默认是1个。

mapreduce.job.reduce.slowstart.completedmaps:当MapTask完成的比例达到该值后才会为ReduceTask申请资源,默认是0.05,即有100个MapTask,当有5个以上MapTask完成之后,就会为ReduceTask申请资源使其提前开始工作。

mapred.job.reduce.input.buffer.percent:在reduce过程中,在内存中保存map输出的空间占整个堆空间的比例;默认是0.0。reduce阶段开始时,内存中的map输出大小不能大于该值。默认情况下,在reduce任务开始之前,所有的map输出都合并到磁盘上,以便为reducer提供尽可能多的内存。然而,如果reducer需要的内存较少,则可以增加此值来最小化访问磁盘的次数,以提高reduce性能。

I/O传输

在这里插入图片描述

使用Snappy和LZO进行压缩是大数据优化常用的手段。

数据倾斜问题

在这里插入图片描述

常用参数的调优

资源相关的参数

以下参数是在用户自己的 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.percentBuffer中的数据达到多少比例开始写入磁盘。默认值0.66
mapreduce.reduce.shuffle.input.buffer.perceBuffer大小占Reduce可用内存的比例。默认值0.7
mapreduce.reduce.input.buffer.percent指定多少比例的内存用来存放 Buffer 中的数据,默认值是0.0

应该在 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

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

配置参数参数说明
mapreduce.task.io.sort.mbShuffle 的环形缓冲区大小,默认 100M
mapreduce.map.sort.spill.percent环形缓冲区溢出的阈值,默认 80%
容错相关参数(MapReduce性能优化)
配置参数参数说明
mapreduce.map.maxattempts每 MapTask最大重试次数,一旦重试参数超过该值,则认为 MapTask运行失败,默认值:4。
mapreduce.reduce.maxattempts每 ReduceTask最大重试次数,一旦重试参数超过该值,则认为 ReduceTask运行失败,默认值:4。
mapreduce.task.timeoutTask 超时时间,经常需要设置的一个参数,该参数表达的意思为:
如果一个 Task 在一定时间内没有任何进入,即不会读取新的数据,也没有输出数据,则认为该 Task 处于 Block 状态,可能是卡住了,也许永远会卡住,为了防止因为用户程序永远 Block 住不退出,则强制设置了一个该超时时间(单位毫秒),默认是600000。
如果你的程序对每条输入数据的处理时间过长(比如会访问数据库,通过网络拉取数据等),建议将该参数调大,该参数过小常出现的错误提示是“ AttemptID:attempt_14267829456721_123456_m_000224_0 Timed out after 300 secsContainer killed by theApplicationMaster.”。

HDFS小文件优化方法

小文件弊端

HDFS 上每个文件都要在 NameNode 上建立一个索引,这个索引的大小约为 150byte,这样当小文件比较多的时候,就会产生很多的索引文件,**一方面会大量占用 NameNode 的内存空间,另一方面就是索引文件过大使得索引速度变慢。**NN的运行速度直接决定了整个集群的运行速度。

小文件解决方案

小文件的优化无非以下几种方式:

1、在数据采集的时候,就将小文件或小批数据合成大文件再上传 HDFS,SequenceFile。

2、在业务处理之前,在 HDFS 上使用 MapReduce 程序对小文件进行合并,Har包、SequenceFile。

3、在 MapReduce 处理时,可采用 CombineTextInputFormat 提高效率。

在这里插入图片描述

mapreduce.job.jvm.numtasks,一个jvm可连续启动多个同类型任务,默认值1,若为-1表示不受限制

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值