hadoop性能优化指南《Hadoop Performance Tuning Guide》

原文件下载:《Hadoop Performance Tuning Guide》

部分翻译:

3.0性能优化

hadoop集群的软件和硬件都正常工作的情况下,我们可以进一步优化hadoop配置文件来提升hadoop系统的性能。配置参数从

hadoop框架、jvm到系统都会影响hadoop工作性能。在此,依据TeraSort在hadoop的上的经验,总结出一些提升hadoop性能

的指导意见。

3.1 hadoop配置优化

1、hadoop默认的map、reduce 槽位数、java内存等或许并不适合你现有的hadoop系统。所以,首先调整这些到一个合适的

水平,以提高hadoop集群对cpu、内存等硬件的利用率。内存的工作负载、map reduce tasks的工作负载、cpu的核数、线程

数以及io带宽、可用内存的量等都会影响配置文件的配置。

a)调整磁盘数以满足最低的存储需求。(每个datanode使用4个盘)

b)配置map、reduce槽位数,以充分利用cpu。reduce阶段充分利用cpu资源。(每个cpu核分配2个map,1个reduce)

c)配置map、reduce 任务的内存大小,但是需要确保为系统预留了足够的系统缓存和缓存以满足map、reduce任务需要。

(map、reduce jvm最大1G内存)

需要配置的参数有:

mapred-site.xml  中的

mapred.map.tasks,mapred.tasktracker.map.tasks.maximum,

mapred.reduce.tasks,mapred.tasktracker.reduce.tasks.maximum,

mapred.map.child.java.opts

mapred.reduce.child.java.opts 

3.1.2数据磁盘扩展

可以通过配置mapred-site.xml 中的mapred.local.dir和hdfs-site.xml中的dfs.name.dir、dfs.data.dir来配置磁盘的使用。可以增加

磁盘数提高io性能。


3.1.3压缩

hadoop在输入、中间数据、输出均提供压缩支持。同时,提供众多的压缩、解压缩算法。需要在压缩时间、压缩效率、压缩负载

等方面做好平衡。

对中间数据进行压缩可以减小系统io、降低网络负载,但需要消耗cpu资源。

可用参数:mapred-site.xml

mapred.compress.map.output,

mapred.map.output.compression.codec,

mapred.output.compress,

mapred.output.compression.type,

mapred.output.compression.codec 

建议选用

Snappy 或者lzo压缩

3.1.4 jvm重用策略

jvm重用策略决定了map、reduce的jvm是否可以继续使用以执行下一个任务。默认为1;若为-1那么将没有限制。jvm重用可以节省

task启动jvm、关闭jvm的耗时,毕竟相对来说,启动、关闭jvm比较耗时。

参数:

mapred.job.reuse.jvm.num.tasks

3.1.5hdfs块大小

每一个map的输入都是一个文件分片。由mapred.min.split.size\dfs.block.size\mapred.max.split.size确定。分片大小和输入文件的大小

决定了map任务的个数。 增大输入文件分片来减少map任务数,也就一位置减少的jvm启动、关闭的耗时,从而减少工作负载。

应尽量确保输入分片跟块大小一致。

3.1.6map端分片

map将生成的中间数据放到缓存中。这个缓存块占用的是map jvm的最内存。默认值是100m,可以通过io.sort.mb来配置。

这个缓存块中的一部分来存储分片记录的元信息,默认是io.sort.mb的0.05,即5mb,可以通过io.sort.record.percent配置。

每条记录的元信息室16字节,那么总共能存储的元数据就是327680条。若缓存块的使用量或者元数据量达到阈值,那么信息将被存储到磁盘

阈值可以通过io.sort.spill.percent来配置,默认是0.8。

通过计算map的总输出的大小和map输出中的总记录数,然后可以计算出所需的缓存块大小,那么就可以设置合适的io.sort.mb、

和io.sort.spill.percent来满足缓存块和缓存元信息的需求。io.sort.spill.percent可以设置为0.99,那么一个map 任务的输出信息就可以在

一个buffer中完成,而不需要写到磁盘。

3.1.7 copy、shuffle阶段优化

如果所有的map任务结束后,map的复制任务没有很快在之后完成,那么表面这个集群的配置是很差的。又多个原因可以造成复制进度的

缓慢。

a)map并行拷贝的最大数,又mapred.reduce.parallel.copies控制,默认为5。

b)tasktracker支持map输出到reduce端的最大工作线程数,由tasktracker.http.threads控制,默认40.这事TaskTracker级别的参数。可以

逐级调整这个参数,观察对copy阶段的影响。

c)优化dfs.datanode.handler.count、dfs.namenode.handler.count、mapred.job.tracker.handler.count等参数。

d)reduce端的瓶颈同样会减慢copy阶段。避免reduce端的磁盘分片的溢出同样可以提高copy阶段的效率。

e)网络硬件的瓶颈同样也是因素之一。用跑分工具如netperf可以确定网络带宽是否达到所有工作节点都可以接受的水平。

3.1.8 reduce端的分片

reduce阶段对hadoop工作时长的影响是很大的。reduce阶段又更多的网络和磁盘io有关的工作。毕竟,由大量的map任务生成的中间数据需要

复制、聚合、处理,而且,有可能需要写回hdfs。因此,要使得reduce阶段达到最大优化,需要的更多的reduce任务和比map的jvm更大的内存需求。

当map task完成,那么map的输出就开始排序、按reducer进行分区,并写到TaskTracker所在的节点。然后,这些map分区被复制到reducer所在

的节点。由mapred.job.shuffle.input.buffer.percent 控制的reduce jvm内存,默认0.7,buffer将保存这些数据。若超出buffer的阈值,则写到磁盘。此阈值由mapred.job.shuffle.merge.percent ,默认0.66








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值