Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议

作者:Shu, Alison

Hadoop作业性能调优的两种场景:

一、用户观察到作业性能差,主动寻求帮助。

(一)eBayEagle作业性能分析器

1. Hadoop作业性能异常指标

2. Hadoop作业性能调优7个建议

(二)其他參数调优方法

二、Hadoop集群报告异常,发现个别作业导致集群事故。

一、用户观察到作业性能差,主动寻求帮助。

(一)eBay Eagle作业性能分析器

对一般作业性能调优。eBay Eagle[i]的作业性能分析器已经能满足用户大部分需求。

eBayEagle作业性能分析包括两个部分,第一部分是依据定量指标。捕捉性能异常的作业。在本文中。我们不考虑Hadoop集群或者节点故障造成作业性能的普遍下降,因此我们觉得这些性能指标异常仅仅与Hadoop作业有关,能够通过性能调优来改善。

第二部分是调优建议。依据Hadoop作业性能异常指标推断作业是否须要调优。再综合採用第二部分的建议。

第二部分也能够作为Hadoop作业开发的指引,并在后期性能測试中检查。

1. Hadoop作业性能异常指标

參阅《Hadoop作业性能指标及參数调优实例(一)Hadoop作业性能异常指标》

2. Hadoop作业性能调优的7个建议

§  压缩输出文件

压缩能够节省磁盘和网络的IO,提高作业性能。

Gzip/Snappy/Lzo/Bzip2都是经常使用的压缩格式,依据须要选用。

四种经常使用压缩格式的特征[ii]


压缩格式


split


native


压缩率


速度


Hadoop自带


linux命令


换成压缩格式后,原来的应用程序是否要改动


Gzip




非常高


比較快




和文本处理一样,不须要改动


Lzo




比較高


非常快




须要建索引。还须要指定输入格式


Snappy




比較高


非常快



没有


和文本处理一样,不须要改动


Bzip2




最高





和文本处理一样,不须要改动

參数调优(用lzo压缩):

mapreduce.output.fileoutputformat.compress=true

mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.LzoCodec

mapreduce.map.output.compress=true

mapreduce.map.output.compress.codec=com.hadoop.compression.lzo.LzoCodec

§  应对数据倾斜

假设一些Reduce比其它Reduce明显耗时很多其它,我们觉得发生数据倾斜,整个作业会由于数据倾斜而耗时很多其它。

eBay Eagle对数据倾斜的定义:

(WorstReduceTime - avgReduceTime > 30 minutes)and (WorstReduceInputRecords / avgReduceInputRecords > 5)

有非常多解决方式。比如写MapReduce作业时,合并中间数据。避免大量小文件。

在工作中,我们碰到数据倾斜的咨询集中在Hive查询。參数调优例如以下:

-合并小文件((文件再小,Block再大,每一个小文件都会占用一个Block)

hive.merge.mapfiles=true

hive.merge.size.per.task=256000000

-利用Map端聚合。达到Reduce负载均衡

hive.groupby.skewindata=true

hive.optimize.skewjoin=true

hive.map.aggr=true

hive.groupby.mapaggr.checkinterval = 100000

§  添加内存,降低GC时间

当Map或Reduce内存不够时。须要很多其它的GC时间,从而影响作业性能。

eBay Eagle对GC时间过长的定义:

GC_TIME_MILLIS / CPU_MILLISECONDS > 0.1

作业參数调优。提高Heap size:

mapreduce.map.java.opts=-Xmx4g

mapreduce.reduce.java.opts=-Xmx4g

在提高Heap Size參数时,注意Heap Size不得超过物理内存。

mapreduce.map.memory.mb > mapreduce.map.java.opts

mapreduce.reduce.memory.mb >mapreduce.reduce.java.opts

§  避开资源竞争

系统资源紧张会造成Map或Reduce进展缓慢。用户能够从Scheduler中观察不同queue的资源使用情况。避开繁忙的窗体。假设作业有多个queue能够选择,选择资源空暇的queue。

设置queue:

mapreduce.queue.jobname=<queue_name>

演示样例:通过ResourceMananger web URL 观察系统资源使用情况

§  添加内存。降低磁盘溢出

设置下面作业參数降低磁盘溢出:(适当大于默认值)

mapreduce.map.sort.spill.percent=1

mapreduce.task.io.sort.mb=1024

mapreduce.map.java.opts=-Xmx4096M

§  保留系统默认的最小分片大小

有些人会设置split.minsize作业參数以控制Map数量。但这样的做法会削弱数据本地性。减少作业性能。建议保留系统默认设置。

在默认配置下。split大小和block大小是同样的。防止一个split假设相应的多个block并且这些block大多不在本地。

保留作业參数默认值:

mapreduce.input.fileinputformat.split.minsize=0

§  控制Map和Reduce数量

合理的Map和Reduce数量。有利于提高作业性能。

我们能够通过參数直接设置Reduce的数量。但无法直接指定Map的数量。參考computeSplitSize()方法。当输入文件指定时,Map的数量由SplitSize决定,我们能够通过改动dfs.blocksize和split.minsize来设定Split Size。上文我们建议使用保留系统默认的最小分片大小,所以我们仅仅能通过改动dfs.blocksize參数来控制Map数量。值得注意的是我们能够有若干办法控制输入文件。

当Map平均输入非常大,或者用时太长。通过下面办法能够添加Map数量

-事先採用Splittable的压缩格式,比方Lzo格式压缩输入文件。

-设置较小的Block Size

当Map平均输入过小,或者用时太短,通过下面办法能够降低Map数量

-事先合并输入文件,降低小文件 (小文件太多,就算Block Size再大,每一个小文件都会占用一个Block)

-设置较大的Block Size

computeSplitSize()方法说明[i]

*上图为引用Hadoop The Definitive Guide 3rd Edition[i],
所列属性为Hadoop 1。在Hadoop 2中,部分属性名称已更新,比方Hadoop 1中dfs.block.size在Hadoop2中更新为dfs.blocksize.

eBay Eagle有关Map和Reduce数量的标杆:

Map作业满足下面条件之中的一个。觉得Map数量太多:

-输入 < 5 MB且用时 < 30秒

-用时 < 10秒

Map作业满足下面条件之中的一个,觉得Map数量太少:

-输入 > 1GB

-用时 > 10分钟

Reduce作业满足下面条件之中的一个,觉得Reduce数量不合理:

-输入 < 256MB 且总用时(包含Shuffle) < 5分钟 且 输出 < 256MB

-输入 > 10GB 且总用时(包含Shuffle) > 30分钟

-总用时(包含Shuffle) < 60秒

-总用时(包含Shuffle) > 1小时 且 用时(不包含Shuffle) > 30分钟

-输入 < 10MB 且用时(不包含Shuffle) < 5分钟 且 输出 < 2GB

-输出 > 10GB 且用时(不包含Shuffle) > 30分钟

Reduce数量推荐方案:

Reduce number=Max(input / 3 G, output / 2 GB,reduceTime / 10 minute)

指定Reduce数量的作业參数:

mapreduce.job.reduces=<Reduce number>


[i] eBay Eagle是eBay自主研发的系统,用于大型Hadoop集群管理,集监控、警示和智能修复功能于一体。eBayEagle即将开源,有望成为Apache的孵化项目。

[ii] http://my.oschina.net/mkh/blog/335395

[iii] Hadoop: TheDefinitive Guide, Third Edition. Hadoop: The Definitive Guide, Third Edition,ISBN: 9781449328917

时间: 2024-10-12 15:52:37

Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议的相关文章

Java性能调优_深入Java程序性能调优(并行开发、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优)课程讲师:special课程分类:Java核心适合人群:初级课时数量:33课时更新程度:完成用到技术:阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优涉及项目:模式在实际开发中运用深入Java程序性能调优下载: http://pan.baidu.com/s/1ntn0ZTB 密码: ijluJava性能调优:国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,

Hadoop2.6.0配置參数查看小工具

前言 使用Hadoop进行离线分析或者数据挖掘的project师,常常会须要对Hadoop集群或者mapreduce作业进行性能调优. 或许你知道通过浏览器訪问http://master:18088/conf来查看配置信息.例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" /> 但是

linux下改动内核參数进行Tcp性能调优 -- 高并发

前言: Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升, 以下就列举一些Tcp/ip内核參数,解释它们的含义并通过改动来它们来优化我们的网络程序,主要是针对高并发情况. 这里网络程序主要指的是server端 1. fs.file-max 最大能够打开的文件描写叙述符数量.注意是整个系统. 在server中.我们知道每创建一个连接,系统就会打开一个文件描写叙述符,所以,文件描写叙述符打开

性能调优概述

大纲: 一.概述 二.什么是性能调优?(what) 三.为什么需要性能调优?(why) 四.什么时候需要性能调优?(when) 五.什么地方需要性能调优?(where) 六.什么人来进行性能调优?(who) 七.怎么样进行性能调优?(How) 八.总结 注,硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作系统: CentOS 6.4 x86_64(64位). 一.概述 本来呢,这篇博文上个星期就应该写好了,但最近项目比较紧,晚上老是加班,于是

成为Java GC专家(5)—Java性能调优原则

这是"成为Java GC专家"系列的第五篇文章.在第一篇深入浅出Java垃圾回收机制中,我们已经学习了不同的GC算法流程.GC的工作原理.新生代(Young Generation)和老年代(Old Generation)的概念.你应该了解了JDK7中5种GC类型以及各种类型对应用程序的影响. 在第二篇如何监控Java的垃圾回收中,阐述了JVM是怎样实际执行垃圾回收的,我们怎样去监控GC以及哪些工具能让这个过程更高效. 第三篇如何如何优化Java垃圾回收机制中展示了一些基于真实案例的最佳

性能调优概述,你不能不知的优化策略

作者:陈明乾 感谢: MageEdu 大纲 作者概述 什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么人来进行性能调优?(who) 怎么样进行性能调优?(How) 总结 硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作系统: CentOS 6.4 x86_64(64位). 概述 在这篇博文中,我不想用一些抽象的概念去说性能调优的问题,只想用最通俗的语言

性能调优概述,这是一篇最通俗易懂性能调优的总结!

1. 作者概述 2. 什么是性能调优?(what) 3. 为什么需要性能调优?(why) 4. 什么时候需要性能调优?(when) 5. 什么地方需要性能调优?(where) 6. 什么人来进行性能调优?(who) 7. 怎么样进行性能调优?(How) 8. 总结 硬件配置:CUP Xeon E5620 x 2 8核心, 内存 16G , 硬盘 RAID 10,操作系统: CentOS 6.4 x86_64(64位). 概述 在这篇博文中,我不想用一些抽象的概念去说性能调优的问题,只想用最通俗的

【scikit-learn】交叉验证及其用于參数选择、模型选择、特征选择的样例

?? 内容概要? 训练集/測试集切割用于模型验证的缺点 K折交叉验证是怎样克服之前的不足 交叉验证怎样用于选择调节參数.选择模型.选择特征 改善交叉验证 1. 模型验证回想? 进行模型验证的一个重要目的是要选出一个最合适的模型,对于监督学习而言,我们希望模型对于未知数据的泛化能力强,所以就须要模型验证这一过程来体现不同的模型对于未知数据的表现效果. 最先我们用训练精确度(用所有数据进行训练和測试)来衡量模型的表现,这样的方法会导致模型过拟合:为了解决这一问题,我们将所有数据分成训练集和測试集两部

[大数据性能调优] 第一章:性能调优的本质、Spark资源使用原理和调优要点分析

本課主題 大数据性能调优的本质 Spark 性能调优要点分析 Spark 资源使用原理流程 Spark 资源调优最佳实战 Spark 更高性能的算子 引言 我们谈大数据性能调优,到底在谈什么,它的本质是什么,以及 Spark 在性能调优部份的要点,这两点让直式进入性能调优都是一个至关重要的问题,它的本质限制了我们调优到底要达到一个什么样的目标或者说我们是从什么本源上进行调优.希望这篇文章能为读者带出以下的启发: 了解大数据性能调优的本质 了解 Spark 性能调优要点分析 了解 Spark 在资