当前位置: 首页 > news >正文

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或者空闲的时间窗口

 

§  适当增加内存

示例:

客户端抛出异常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

 

日志文件异常增加:

日志文件内容:

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的孵化项目。

[ii] http://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/DistributedCacheDeploy.html


相关文章:

  • 漫谈程序控制流
  • Hadoop集群硬盘故障分析与自动化修复
  • jQuery数据赋值解析
  • Apache Kylin的快速数据立方体算法——概述
  • eBay RUM实践
  • 基于数理统计分析的服务器端持续性能压力测试方案
  • 支付结果通知机制研究
  • Apache Eagle:eBay开源分布式实时Hadoop数据安全引擎
  • Ebay开源:Eclipse Plugin Repository Portal
  • eBay WebRex: 动态web资源优化工具
  • MapOutputBuffer理解的三重境界
  • Druid at Pulsar
  • AngularJS渲染性能分析
  • Ebay开源基于大数据的可视化框架:Pulsar Reporting
  • JavaScript 异步原理
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • flask接收请求并推入栈
  • Java Agent 学习笔记
  • PHP 的 SAPI 是个什么东西
  • SAP云平台里Global Account和Sub Account的关系
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 分布式事物理论与实践
  • 服务器从安装到部署全过程(二)
  • 关于Flux,Vuex,Redux的思考
  • 如何设计一个微型分布式架构?
  • 使用权重正则化较少模型过拟合
  • 我看到的前端
  • 小而合理的前端理论:rscss和rsjs
  • 与 ConTeXt MkIV 官方文档的接驳
  • 走向全栈之MongoDB的使用
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​学习一下,什么是预包装食品?​
  • # centos7下FFmpeg环境部署记录
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (LeetCode) T14. Longest Common Prefix
  • (pytorch进阶之路)扩散概率模型
  • (笔试题)分解质因式
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (力扣题库)跳跃游戏II(c++)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)IOS中获取各种文件的目录路径的方法
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .net CHARTING图表控件下载地址
  • .NET 解决重复提交问题
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • @Autowired @Resource @Qualifier的区别
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [.net] 如何在mail的加入正文显示图片
  • [@Controller]4 详解@ModelAttribute