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
Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议的更多相关文章
- Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
作者: Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Had ...
- Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述
概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代, ...
- 【十二】jvm 性能调优工具之 jhat (JVM Heap Analysis Tool)
jhat也是jdk内置的工具之一.主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言. jhat 非常耗费cpu和内存,所以一般不使 ...
- Hadoop2.6.0配置參数查看小工具
前言 使用Hadoop进行离线分析或者数据挖掘的project师,常常会须要对Hadoop集群或者mapreduce作业进行性能调优. 或许你知道通过浏览器訪问http://master:18088/ ...
- linux下改动内核參数进行Tcp性能调优 -- 高并发
前言: Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升, 以下就列举一些Tcp/ip内核 ...
- 成为Java GC专家(5)—Java性能调优原则
并不是每个程序都需要调优.如果一个程序性能表现和预期一样,你不必付出额外的精力去提高它的性能.然而,在程序调试完成之后,很难马上就满足它的性能需求,于是就有了调优这项工作.无论哪种编程语言,对应用程序 ...
- linux性能调优概述
- 什么是性能调优?(what) - 为什么需要性能调优?(why) - 什么时候需要性能调优?(when) - 什么地方需要性能调优?(where) - 什么人来进行性能调优?(who) - 怎么样 ...
- Spark的性能调优杂谈
下面这些关于Spark的性能调优项,有的是来自官方的,有的是来自别的的工程师,有的则是我自己总结的. 基本概念和原则 <1> 每一台host上面可以并行N个worker,每一个worke ...
- Mongodb性能调优
摘要 1. Mongodb 适用场景简介 2. Mongodb 性能监控与分析 3. Mongodb 性能优化建议 关于Mongodb的几个大事件 1.根据美国数据库知识大全官网发布的DB热度排行,M ...
随机推荐
- 删除小脚本 srm
提示:只能删除当前路径下的目录或文件 #!/bin/bash #将测试好的脚本,拷贝到 $PATH 能够搜索到目录下.并且改名 例如: /usr/local/bin cp /test/srm.sh / ...
- CO-PRIME(初探 莫比乌斯)NYOJ1066(经典)gcd(a,b)=1
CO-PRIME 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描写叙述 This problem is so easy! Can you solve it? You are ...
- 初学Larevel 2014-08-21 11:24 90人阅读 评论(0) 收藏
添加第一个路由时就遇到了 404错误,查了一下说要这样才能 版权声明:本文为博主原创文章,未经博主允许不得转载.
- 如何搭建Eclipse +Apache Tomcat配置Java开发环境
Linux平台下如何搭建Eclipse +Apache Tomcat配置的Java开发环境 本文出自 "李晨光原创技术博客" 博客,请务必保留此出处http://chenguang ...
- python requests请求卡住问题
最近经常接到别人反馈某个爬虫工具程序没有正常运行,需要下载的资讯数据也没有及时进行收录. 刚开始以为可能是机器的问题,偶尔机器会出现程序运行中途卡住的情况. 但随着异常的情况越来越频繁,我便只好去排查 ...
- BZOJ3130: [Sdoi2013]费用流(二分,最大流)
Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...
- 【Henu ACM Round#17 D】Hexagons!
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 题目的图吓人. 找下规律就会发现从内到外是1,6,12,18 即1,16,26,36... 即1+6(1+2+3+...) 等差求和 ...
- 【2017 Multi-University Training Contest - Team 1 1001】Add More Zero
[Link]: [Description] 让你求最大的k; 使得 10^k<=2^m-1 [Solution] 求出2^m-1的位数就好; [lg(2^m-1)] = lg(2^m) = m* ...
- 实际运用中DataSet、DataTable、DataRow点滴
DataSet.DataTable都自带有序列化标记,但是DataRow没有, 所以如果是在CS程序中,Release版本程序DataTable才是最小的数据传输单元,如果使用DataRow则会报[未 ...
- JBoss配置连接池
什么是数据库连接池? 配置连接池为的是解决效率问题.由于每创建一个连接都是非常耗时的,有了连接池,就能够提前放一些连接进去.以后我们再用连接就去连接池里面取而不是每次都创建.可是我们知道连接池是有上限 ...