作者: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个建议的更多相关文章

  1. Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法

    作者: Shu, Alison Hadoop作业性能调优的两种场景: 一.用户观察到作业性能差,主动寻求帮助. (一)eBayEagle作业性能分析器 1. Hadoop作业性能异常指标 2. Had ...

  2. Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述

    概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代, ...

  3. 【十二】jvm 性能调优工具之 jhat (JVM Heap Analysis Tool)

    jhat也是jdk内置的工具之一.主要是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言. jhat 非常耗费cpu和内存,所以一般不使 ...

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

    前言 使用Hadoop进行离线分析或者数据挖掘的project师,常常会须要对Hadoop集群或者mapreduce作业进行性能调优. 或许你知道通过浏览器訪问http://master:18088/ ...

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

    前言: Tcp/ip协议对网络编程的重要性,进行过网络开发的人员都知道,我们所编写的网络程序除了硬件,结构等限制,通过改动Tcp/ip内核參数也能得到非常大的性能提升, 以下就列举一些Tcp/ip内核 ...

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

    并不是每个程序都需要调优.如果一个程序性能表现和预期一样,你不必付出额外的精力去提高它的性能.然而,在程序调试完成之后,很难马上就满足它的性能需求,于是就有了调优这项工作.无论哪种编程语言,对应用程序 ...

  7. linux性能调优概述

    - 什么是性能调优?(what) - 为什么需要性能调优?(why) - 什么时候需要性能调优?(when) - 什么地方需要性能调优?(where) - 什么人来进行性能调优?(who) - 怎么样 ...

  8. Spark的性能调优杂谈

    下面这些关于Spark的性能调优项,有的是来自官方的,有的是来自别的的工程师,有的则是我自己总结的. 基本概念和原则 <1>  每一台host上面可以并行N个worker,每一个worke ...

  9. Mongodb性能调优

    摘要 1. Mongodb 适用场景简介 2. Mongodb 性能监控与分析 3. Mongodb 性能优化建议 关于Mongodb的几个大事件 1.根据美国数据库知识大全官网发布的DB热度排行,M ...

随机推荐

  1. 洛谷 P3152 正整数序列

    P3152 正整数序列 题目描述 kkk制造了一个序列,这个序列里的数全是由正整数构成的.你别认为她的数列很神奇——其实就是1, 2, …, n而已.当然,n是给定的.kkk的同学lzn认为0是一个好 ...

  2. 10 hbase源码系列(十)HLog与日志恢复

    hbase源码系列(十)HLog与日志恢复   HLog概述 hbase在写入数据之前会先写入MemStore,成功了再写入HLog,当MemStore的数据丢失的时候,还可以用HLog的数据来进行恢 ...

  3. C#读写共享目录

    C#读写共享目录 该试验分下面步骤: 1.在server设置一个共享目录.在这里我的serverip地址是10.80.88.180,共享目录名字是test,test里面有两个文件:good.txt和b ...

  4. Qt编译mysql以及创建表后进行导入操作

    鉴于很多同学对Qt编译myql总是不能成功.出现各种问题,今天特此写出本教程,希望可以帮到须要的同学.        首先,须要明确编译的目的和原理. 目的:Qt 5.2版本号曾经都是不带mysql驱 ...

  5. PowerShell中和服务相关的命令

    New-Service https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/new-s ...

  6. Firefox中使用pac

    https://campus.barracuda.com/product/websecurityservice/article/WSS/ConfigProxyWithPACFile/ https:// ...

  7. 解决The requested resource is not available的办法

    1.问题描述: eclipse中使用tomcat来运行HelloWorld时出现The requested resource is not available. 在报错中有一行Setting prop ...

  8. Android 使用Gallery组件实现图片播放预览

    Gallery(画廊)扩展了LayoutParams,以此提供可以容纳当前的转换信息和先前的位置转换信息的场所. Activity package com.app.test01; import com ...

  9. NET Native

    起因源自于微软在 MSDN 博客上宣布了 .NET Native 的开发者预览版..NET Native 可以将 C# 代码编译成本地机器码.有了它,开发者将不仅能享受 C# 的高生产力,而且能拥有 ...

  10. Vuejs2.0构建一个彩票查询WebAPP(2)

    一,Vuex的使用 import Vue from 'vue' import Vuex from 'vuex' import MsgModules from './MsgModules' Vue.us ...