Hadoop优化点记录

1、  combiner函数,规约Map的结果,降低Reduce的压力

2、  定期运行均衡器,平衡集群上的数据块分布。

3、  对map的中间结果进行压缩(对优化可能有用)

mapper的数量

mapper需要运行多长时间?如果平均只要几秒钟,则可以看是否能用更少
mapper
运行更长的时间,通常是一分钟左右。时间长度取决于使用的输入格式。

7.2.2

reducer的数量

为了达到最高性能,集群中reducer数应该略少于reducer的任务槽数。这将使
reducer
能够在同一个周期(in one wave)完成任务,并在reducer阶段充分使用集群。

7.1.1

combiner

作业能否充分利用combiner来减少通过shuffle传输的数据量。

2.4.2

中间值的压缩

map输出进行压缩几乎总能使作业执行的更快。

4.2.3

自定义序列

如果使用自定义的writable对象或者自定义的comparator,则须确保已实现RawComparator

4.3.3

调整shuffle

MapReduceshuffle过程可以对一些内存管理的参数进行调整,以弥补性能的不足

map端的调优属性

属性名称

类型

默认值

说明

io.sort.mb

int

100

排序map输出时所使用的内存缓冲区的大小,以兆字节为单位

io.sort.record.percent

float

0.05

用作存储map输出记录边界的io.sort.mb的比例。剩余的空间用来存储map输出记录本身。
该属性在1.x版本后删除了。因为shuffle代码被提高来更好的执行作业,通过使map输出可
使用所有可用的内存和计数信息。

io.sort.spill.percent

float

0.80

map输出内存缓冲和用来开始磁盘溢出写过程的记录边界索引,这两者使用比例的阀值。

io.sort.factor

int

10

排序文件时,一次最多合并的流数。这个属性也在reduce中使用。将此值增加到100是很常见的。

min.num.spills.for.combine

int

3

运行combiner所需的最少溢出文件数(如果已指定combiner)

mapred.compress.map.output

Boolean

false

压缩map输出

mapred.map.output.compression.codec

Class name

org.apache.hadoop.io.compress.DefaultCodec

用于map输出的压缩编解码器

tasktracker.http.threads

int

40

每个tasktracker的工作线程数,用于将map输出到reducer。这是集群范围的设置,不能由单个作业设置。在Mapreduce2中不适用。


reduce
端的调优属性

属性名称

类型

默认值

描述

mapred.reduce.parallel.copies

int

5

用于把map输出复制到reducer的线程数

mapred.reduce.copy.backoff

int

300

在声明失败之前,reducer获取一个map输出所花的的最大时间,已秒为单位。
如果失败(根据指数后退)reducer可以在此时间内尝试重传。

io.sort.factor

int

10

排序文件时一次最多合并的流的数量。这个属性也在map端使用。

mapred.job.shuffle.input.buffer.percent

float

0.70

shuffle的复制阶段,分配给map输出的缓冲区占堆空间的百分比

mapred.iob.shuffle.merge.percent

float

0.66

map输出缓冲区(mapred.job.shuffle.input.buffer.percent定义)的阀值使用比例,
用于启动合并输出和磁盘溢出写的过程。

mapred.inmem.merge.threshold

int

1000

启动合并输出和磁盘溢出写过程的map输出的阀值。0或更小的数意味着没有阀值限制,
溢出写行为由mapred.job.shuffle.merge.percent单独控制。

mapred.iob.reduce.input.buffer.percent

float

0.0

reduce过程中,在内存中保存map输出的空间占整个堆空间的比例。reduce阶段开始时,
内存中的map输出大小不能大于这个值。默认情况下,在reduce任务开始前,所有map输出
都合并到磁盘上,以便为reducer提供尽可能多的内存。然后,如果reducer需要的内存较少,
可以增加这个值来最小化访问磁盘的次数。


Hadoop
使用默认4KB的缓冲区,可以设置io.file.buffer.size属性来增加它。

reduce端,中间数据全部在内存就可以获得最佳性能。如果reduce函数的内存需求不大,可以把mapred.inmem.merge.threshold设置为0,把mapred.iob.reduce.input.buffer.percent设置为1.0,可以提高性能。

推测执行(SpeculativeExecution)

Speculative Execution机制的为了解决Hadoop中出现缓慢某些Task拖延整个Job运行的问题,Speculative Execution会针对那些慢于平均进度的Task启动Speculative Task,此时如果原TaskSpeculative Task前完成,则Speculative Task会被终止,同样的,如果Speculative Task先于原Task完成则原来的Task会被终止

默认情况下SpeculativeExecution是启用的,下面的属性可以控制是否开启该功能:但是关闭推测执行,只针对某些任务开启推测执行,有利于提高集群的效率。

跳过坏记录

在大数据中经常有一些损坏的记录,当Job开始处理这个损坏的记录时候,导致Job失败,如果这些记录并不明显影响运行结果,我们就可以跳过损坏记录让Job成功运行

Task JVM重用

启动JVM重用后,可以让不同Task重用一个JVM,节省了重建销毁JVM的时间,在Hadoop2.0中默认情况不提供这种功能

4、   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值