Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
作者: 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个建议
參阅《Hadoop作业性能指标及參数调优实例(二)Hadoop作业性能调优7个建议》
(二)eBay Eagle作业分析器之外,我们仍然发现一些简单实用的參数调优办法。
§ 提高Splitmetainfo文件上限以应对输入文件包括大量小文件及文件文件夹
演示样例:
$yarn logs -applicationId application_1431213413583_263303-appOwner abc
…
2015-06-02 11:15:37,971 INFO [main]org.apache.hadoop.service.AbstractService: Serviceorg.apache.hadoop.mapreduce.v2.app.MRAppMaster failed in state STARTED; cause:org.apache.hadoop.yarn.exceptions.YarnRuntimeException: java.io.IOException:Split metadata
size exceeded 10000000. Aborting job job_1431213413583_263303
…
分析:
输入文件包含大量小文件或者文件文件夹。造成Splitmetainfo文件超过默认上限。
解决的方法:
改动默认作业參数mapreduce.jobtracker.split.metainfo.maxsize =100000000 或者mapreduce.jobtracker.split.metainfo.maxsize = -1 (默认值是1000000)
§ 不要轻易降低系统默认的复制因子
演示样例:
$yarn logs -applicationIdapplication_1431213413583_187157 -appOwner abc
…
/apache/hadoop/logs/yarn.log.2015-05-26-12:2015-05-2612:43:50,003 INFOorg.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container:Container container_1431213413583_187157_01_003934 transitioned from LOCALIZINGto KILLING
/apache/hadoop/logs/yarn.log.2015-05-26-12:2015-05-2612:43:50,004 INFOorg.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container:Container container_1431213413583_187157_01_003934 transitioned from KILLING toDONE
…
分析:
Map试图下载分布式缓存中的文件,发生time out,导致作业失败。我们检查了分布式缓存中文件。发现复制数量是3份而不是默认的10份。
在apache Hadoop 的官网中有关于archive file 在 distributed cache中复制因子的说明[ii]。
“When working with a large cluster it can beimportant to increase the replication factor of the archive to increase itsavailability. This will spread the load when the nodes in the cluster localizethe archive for the first time.”
解决的方法:
添加文件复制数量,把文件放到很多其它的节点上,尽可能实现数据的本地性,以加快文件下载速度。
不要轻易降低下面參数的默认值:
dfs.replication=3(默认值)
mapreduce.client.submit.file.replication=10 (默认值)
§ 添加locateFollowingBlock办法的重试次数
演示样例:
Exception in thread "main"java.io.IOException: Unable to close file because the last block does not haveenough number of replicas.
分析:
可能是NameNode过于繁忙,locateFollowingBlock方法请求Name Node为文件加入新块错误发生,无法定位下一个块。建议添加locateFollowingBlock方法重试次数參
解决的方法:
改动默认作业參数dfs.client.block.write.locateFollowingBlock.retries=15 (默认是5)
§ 适当提高timeout阈值
演示样例:
AttemptID:attempt_1429087638744_171298_r_000148_2Timed out after 600 secs
分析:
输入数据或计算量很大,造成作业用时太长
解决的方法:
改动默认作业參数mapreduce.task.timeout=1200000(默认值是600000)
§ 选择可用资源较多的queue或窗体
演示样例:
our map reduce jobs are extremely slow and some ofthem are waiting in the UNASSIGNED state for a long time.
分析:对应的queue资源用完
解决:另选一个空暇的queue或者空暇的时间窗体
§ 适当添加内存
演示样例:
client抛出异常Exceptionin thread "main"
Exception: java.lang.OutOfMemoryError thrown fromthe UncaughtExceptionHandler in thread "main"
分析:Permanent Generation space(Non-heapsize)不够
解决方法:
添加PermSize
exportHADOOP_CLIENT_OPTS="-XX:MaxPermSize=512M $HADOOP_CLIENT_OPT"
二、Hadoop集群报告异常。发现个别作业导致集群事故
用户作业性能差不仅影响作业本身,在极端情况下会造成整个Hadoop集群故障。在实践中。以前发生两个Hadoop Pig作业由于数据类型错误,产生大量Stderror日志,将几百个节点空间用完。造成集群事故。 用户本人由于作业仍然在执行。并没有採取不论什么措施。直到作业被系统管理员强制终止。这个事件充分暴露了Hadoop开发员对作业性能差可能产生的严重后果认识不足。
Hadoop 2的作业日志包括Job History日志和Container日志,当中Job History日志包括作业启动时间、结束时间,每一个作业任务的启动时间、结束时间,各种Counter信息等。
Container日志包括Application Master日志和普通Task日志,它们均存放在Hadoop安装文件夹下的userlogs文件夹中的application_xxx文件夹下,当中ApplicationMaster日志文件夹名称为container_xxx_000001,普通task日志文件夹名称则为container_xxx_000002。container_xxx_00000,每一个文件夹下包括三个日志文件:stdout、stderr和syslog。作业日志有若干水平:OFF,
FATAL, ERROR, WARN,INFO, DEBUG, TRACE and ALL,默认设置是INFO。
通过异常添加的日志文件,我们找到了Job Id。这2个Hadoop Pig作业执行了7个多小时,重复输出Stderr,大小超过200GB,分布在200多个节点上。
终止作业后。系统管理员发现集群的NON-DFS空间已使用1PB,不得不重新启动100多个节点。
这个事故发生在eBay Eagle上线前,事后HadoopEagle专门针对NON-DFS空间的高速增长设置了监測和预警机制。
同一时候我们也建议用户更改日志的默认配置,以降低日志的存储。
mapreduce.map.log.level=WARN,TLA
mapreduce.reduce.log.level=WARN,TLA
日志文件异常添加:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
日志文件内容:
…
Failed to parse field: N for ORGNL_SHPNG_CHRG_RTG_VAL_NUM type short
java.lang.NumberFormatException: For input string:"N "
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
atjava.lang.Integer.parseInt(Integer.java:449)
atjava.lang.Integer.valueOf(Integer.java:554)
atcom.ebay.hadoop.platform.pig.TableStorageLoadFunc.parseObject(TableStorageLoadFunc.java:155)
atcom.ebay.hadoop.platform.pig.TableStorageLoadFunc.getValueTuple(TableStorageLoadFunc.java:130)
atcom.ebay.hadoop.platform.pig.TableStorageLoadFunc.getNext(TableStorageLoadFunc.java:90)
atcom.ebay.hadoop.platform.pig.TableStorage.getNext(TableStorage.java:305)
atorg.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigRecordReader.nextKeyValue(PigRecordReader.java:194)
atorg.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.nextKeyValue(MapTask.java:530)
atorg.apache.hadoop.mapreduce.MapContext.nextKeyValue(MapContext.java:67)
atorg.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
atorg.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:763)
atorg.apache.hadoop.mapred.MapTask.run(MapTask.java:363)
atorg.apache.hadoop.mapred.Child$4.run(Child.java:255)
atjava.security.AccessController.doPrivileged(Native Method)
atjavax.security.auth.Subject.doAs(Subject.java:396)
atorg.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1232)
atorg.apache.hadoop.mapred.Child.main(Child.java:249)
…
[i]
eBay Eagle是eBay自主研发的系统,用于大型Hadoop集群管理,集监控、警示和智能修复功能于一体。eBayEagle即将开源,有望成为Apache的孵化项目。
Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法的更多相关文章
- oo前三次作业博客总结
第一次作业 实现多项式的加减运算,主要问题是解决输入格式的判断问题. 输入实例: {(3,0), (2,2), (12,3)} + {(3,1), (-5,3)} – {(-199,2), (29,3 ...
- BUAA OO 2019 第三单元作业总结
目录 总 JML规格化设计 理论基础 工具链 规格验证 验证代码 代码静态检查 自动生成测试样例 生成结果 错误分析 作业设计 第九次作业 架构 代码实现 第十次作业 架构 代码实现 第十一次作业 架 ...
- OO_JAVA_JML系列第三次作业__架构之谈
OO_JAVA_JML系列第三次作业 ## ----架构之谈 目录 OO_JAVA_JML系列第三次作业 出发点 操作的可分离性 操作本身的多样性 实现手段:表驱动编程 储存 注册 出发点 操作的可分 ...
- Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议
作者:Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Hado ...
- Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)
1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3. ...
- mysql监控、性能调优及三范式理解
原文:mysql监控.性能调优及三范式理解 1监控 工具:sp on mysql sp系列可监控各种数据库 2调优 2.1 DB层操作与调优 2.1.1.开启慢查询 在My.cnf文件中添加如 ...
- 性能调优之Java系统级性能监控及优化
性能调优之Java系统级性能监控及优化 对于性能调优而言,通常我们需要经过以下三个步骤:1,性能监控:2,性能剖析:3,性能调优 性能调优:通过分析影响Application性能问题根源,进行优化 ...
- Linux服务器性能查看分析调优
一 linux服务器性能查看 1.1 cpu性能查看 1.查看物理cpu个数: cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc ...
- 基于Dubbo的压测调优实例
不久前参与开发了一个基于dubbo分布式框架的底层账单系统,并实现了其中的一部分业务接口,目前需对这些接口进行压测,以评估生产环境所能承受的最大吞吐量.笔者以其中一个查询接口为例来回顾此次压测的整体流 ...
随机推荐
- android ui篇
android ui篇主要做两件事情. 第一件事情就是能够自己去定义基本的简单的界面. 第二件事情就是能够使用开源library去构造一些复杂的界面. 第一件事情就需要对于布局等方面知识有着基本的掌握 ...
- 小白写的一个ASP.NET分页控件,仅供娱乐
无聊,第一次写博客,自己动手写了一个分页控件.由于我是新手,有很多地方写得不够好,希望各位大牛多多指正.哈哈哈 /// <summary> /// 分页控件 /// </summar ...
- C#微信公众号的开发——服务配置
最近因为需要用C#开发微信公众号的一些功能,记录一下开发公众号的一些坑..... 首先先介绍一下,微信公众号的官方文档.虽然这个文档我感觉比较糙,但是还是可以借鉴一下让我们摸着石头过河的. 首先我们得 ...
- reduce多种方法计算数组中某个值的出现次数
先来了解下reduce用法 arr.reduce(callback[, initialValue]) callback执行数组中每个值的函数,包含四个参数: accumulator 累计器累计回调的返 ...
- android黑科技系列——Android中新型安全防护策略
一.前言 最近有一个同学,发给我一个设备流量访问检测工具,但是奇怪的是,他从GP上下载下来之后安装就没有数据了,而在GP上直接安装就可以.二次打包也会有问题.所以这里就可以判断这个app应该是有签名校 ...
- PL/SQL之高级篇
原文地址:http://www.cnblogs.com/sin90lzc/archive/2012/08/30/2661117.html 参考文献:<Oracle完全学习手册> 1.概述 ...
- dubbo之事件通知
事件通知 在调用之前.调用之后.出现异常时,会触发 oninvoke.onreturn.onthrow 三个事件,可以配置当事件发生时,通知哪个类的哪个方法 1. 服务提供者与消费者共享服务接口 in ...
- react基础篇三
事件处理 React事件绑定属性的命名采用驼峰式写法,而不是小写. 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM元素的写法) 例如,传统的 HTML: < ...
- 【转】虚拟化(五):vsphere高可用群集与容错
vsphere高级功能需要vcenter server和共享存储的支持才能实现.vsphere的高级功能有 vmotion.storage vmotion.vsphere HA.vsphere DRS ...
- Git 基础教程 之 远程仓库
① 注册GitHub账号 由于本地Git仓库和GitHub仓库之间的传输是SSH加密的,所以需要一点设置: a, 创建SSH Key 在用户主目录下,看是否有 .ssh 目录,若无 ...