[大牛翻译系列]Hadoop(10)MapReduce 性能调优:诊断reduce性能瓶颈
6.2.3 Reduce的性能问题
Reduce的性能问题有和map类似的方面,也有和map不同的方面。图6.13是reduce任务的具体的执行各阶段,标识了可能影响性能的区域。
这一章将介绍影响reduce任务性能的常见问题。
技术33 Reduce实例不足或过多
尽管map段的并行化程度在大部分情况下是自动设置的,但是在reduce端,reduce实例的数量是完全自定义的。如果reduce实例不足或过多,集群的性能就很难得到充分发挥。
问题
需要确定reduce实例的数量是否是作业运行缓慢的原因。
方案
用JobTracker UI来诊断作业中运行的reduce实例的数量。如图6.14所示。
讨论
Reduce实例的数量最好能小于集群中设置的reduce的槽(slot)的数量。在JobTracker UI中也可以找到reduce槽的数量。如图6.15所示。
小结
有的时候,为了减小外部资源(如数据库)的压力,不得不只使用很少的reduce实例。
有的时候,为了对所有数据进行排序,有的人会采用单独的reduce实例。实际上,可以用总排序和TotalOrderPartitioner来避免这个做法。(具体参考第4章。)
在对HDFS进行写操作的时候,应该在留出部分富余量的前提下,尽可能多用集群中的reduce槽。留出的那一部分,用于防备有部分节点宕机。如果reduce实例太少的话,显然是浪费集群性能。如果reduce实例比reduce槽还多,就会分两批执行,导致作业执行时间变长。
以上讨论仅仅针对只运行一个作业的情况。如果多个作业同时运行,就要具体情况,具体分析了。不过reduce的槽的数量仍然会是判断标准。
技术34 诊断reduce段的数据倾斜的问题
在reduce端,数据倾斜指的是少数键的记录的数量大得不成比例,比其它大部分键的记录数量要多得多。
问题
需要诊断是否是因为数据倾斜导致作业运行缓慢。
方案
使用JobTracker UI来比较作业中所有reduce实例的字节吞吐量,确定是否存在部分reduce实例得到了过大的数据量。在这个技术中还要用到map和reduce任务的运行时的可视化。
讨论
如果存在数据倾斜,JobTracker UI中将会观察到,一小部分reduce任务的运行时间会不成比例地比其他大部分任务长得多。如图6.16所示。这和map端有数据倾斜时很类似。
这种方法能很快地诊断潜在的数据倾斜问题。本书也提供了一个简单的工具来生成任务级别的统计信息,包括输入/输入记录数,输入/输出字节数。输出的内容有两部分,分别是map和reduce。每个部分又分了三个子部分。所有的结果按照执行时间,输入记录数,输入字节数进行排序。命令如下:
$ bin/run.sh com.manning.hip.ch6.DataSkewMetrics --hdfsdir output
本书还有一个工具,可以生成tab分隔的任务执行时间(或输入字节数)。可以基于这些数据生成图表,就可以直接目测问题了。命令如下:
$ bin/run.sh com.manning.hip.ch6.DataSkewGnuplot --hdfsdir output
图6.17是生成的图表。在这个例子中,很容易发现部分map任务的时间特别长。Reduce任务似乎就比较均匀。
小结
在确认了reduce实例中的数据倾斜之后,下一步就是减轻它的影响。技术50和51尝试如何确定数据倾斜的成因。(技术50和51在6.4.4。)
技术35 确定reduce任务是否存在整体吞吐量过低
有很多原因会导致reduce任务运行缓慢,代码,硬件等。要确定根本原因是比较有挑战性的。
问题
需要诊断是否是吞吐量过低导致作业运行缓慢。
方案
使用JobTracker UI或作业历史信息元数据来计算renduce任务的吞吐量。
讨论
通过JobTracker获得任务的执行时间,就可以计算出单个任务的吞吐量了。图6.18说明了如何计算reduce热舞的吞吐量。
本书还提供了工具来通过作业历史文件来计算吞吐量的统计信息。如图6.19所示。
小结
本书的计算工具提供了四个吞吐量指标。通过它们可以找到reduce任务中是否存在某个环节过于缓慢。下个技术将介绍洗牌(shuffle)和排序阶段。
由于reduce阶段需要从磁盘上读取map的输出,处理,并将数据输出到某个接收器,那么有以下潜在因素会影响reduce的吞吐量:
- 本地磁盘事故。MapReduce需要从磁盘上读取数据作为reduce的输入。
- 效率底下的reduce处理代码
- 网络问题,在作业的输出是HDFS的时候。
- 延迟或吞吐量问题,在数据接收器不是HDFS的时候。
不同的技术将被运用到处理上述除最后一个外的其它各个因素,以便确定reduce低吞吐量的根本原因。
技术36 缓慢的洗牌(shuffle)和排序
洗牌阶段要从任务跟踪器(TaskTracker)来获取map的输出数据,并在后台合并它们。排序阶段要把文件进行合并,并减少文件的数量。
问题
需要确定作业是否因为洗牌和排序阶段而运行缓慢。
方案
从作业历史元数据中提取洗牌和排序阶段执行时间的统计信息。
讨论
图6.20使用本书提供的工具代码来检查作业的洗牌和排序时间的统计信息,并查看其中的潜在改进空间。
小结
如果要减小洗牌和排序阶段的时间,最简单的方法就是使用combine实例,并压缩map的输出。这些方法都可以极大地减少map和reduce任务之间的数据量,减轻网络,CPU和磁盘在洗牌和排序阶段的压力。
另外还可以调节排序阶段缓存大小,reduce端或map端的实例数量等。这些将在6.4.2中介绍。
[大牛翻译系列]Hadoop(10)MapReduce 性能调优:诊断reduce性能瓶颈的更多相关文章
- [大牛翻译系列]Hadoop(9)MapReduce 性能调优:理解性能瓶颈,诊断map性能瓶颈
6.2 诊断性能瓶颈 有的时候作业的执行时间会长得惊人.想靠猜也是很难猜对问题在哪.这一章中将介绍如何界定问题,找到根源.涉及的工具中有的是Hadoop自带的,有的是本书提供的. 系统监控和Hadoo ...
- [大牛翻译系列]Hadoop 翻译文章索引
原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 4.1 Joining Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.c ...
- 【Xamarin挖墙脚系列:应用的性能调优】
原文:[Xamarin挖墙脚系列:应用的性能调优] 官方提供的工具:网盘地址:http://pan.baidu.com/s/1pKgrsrp 官方下载地址:https://download.xamar ...
- [大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
6.4.6 优化数据序列化 如何存储和传输数据对性能有很大的影响.在这部分将介绍数据序列化的最佳实践,从Hadoop中榨出最大的性能. 压缩压缩是Hadoop优化的重要部分.通过压缩可以减少作业输出数 ...
- [大牛翻译系列]Hadoop(8)MapReduce 性能调优:性能测量(Measuring)
6.1 测量MapReduce和环境的性能指标 性能调优的基础系统的性能指标和实验数据.依据这些指标和数据,才能找到系统的性能瓶颈.性能指标和实验数据要通过一系列的工具和过程才能得到. 这部分里,将介 ...
- 盘点linux操作系统中的10条性能调优命令,一文搞懂Linux系统调优
原文链接:猛戳这里 性能调优一直是运维工程师最重要的工作之一,如果您所在的生产环境中遇到了系统响应速度慢,硬盘IO吞吐量异常,数据处理速度低于预期值的情况,又或者如CPU.内存.硬盘.网络等系统资源长 ...
- [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码
6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...
- [大牛翻译系列]Hadoop(11)MapReduce 性能调优:诊断一般性能瓶颈
6.2.4 任务一般性能问题 这部分将介绍那些对map和reduce任务都有影响的性能问题. 技术37 作业竞争和调度器限制 即便map任务和reduce任务都进行了调优,但整个作业仍然会因为环境原因 ...
- MapReduce性能调优记录
MapReduce原理 要知道怎么对MapReduce作业进行调优前提条件是需要对Map-Reduce的过程了然于胸. Map-Reduce运行原理图: Map Side 1.从磁盘读取数据并分片 默 ...
随机推荐
- Mispelling4
Problem Description Misspelling is an art form that students seem to excel at. Write a program that ...
- 基于 SOA 的组件化业务基础平台
业务基础平台是业务逻辑应用和基础架构平台之间的一个中间层,解决 “应用软件的业务描述和操作系统平台.软件基础架构平台之间的交互与管理问题”.操作系统平台解决了“应用软件系统与硬件之间的交互与管理问题” ...
- 【python,排序】几种常用的排序算法,使用python实现
1. 选择排序 -- -- def selectSort(l): for i in range(len(l)): j = i + 1 t_min = l[i] loc_min = i for j in ...
- css+div网页设计(二)--布局与定位
在网页设计中,能否控制好各个模块中在页面中的位置是非常关键的,与传统的表格定位不同,css+div定位方式更加的灵活,本篇博客将为大家介绍css+div的布局与定位. 一.盒子模型 由图可以看出 盒子 ...
- HTML 5 History API的”前生今世”
History是有趣的,不是吗?在之前的HTML版本中,我们对浏览历史记录的操作非常有限.我们可以来回使用可以使用的方法,但这就是一切我们能做的了. 但是,利用HTML 5的History API,我 ...
- ionic 中使用ion-slide-box
ion-slide-box 用法: <ion-slide-box class="slide" auto-play="true" does-continue ...
- codeforces 675C C. Money Transfers(贪心)
题目链接: C. Money Transfers time limit per test 1 second memory limit per test 256 megabytes input stan ...
- hdu 4099 Revenge of Fibonacci 大数+压位+trie
最近手感有点差,所以做点水题来锻炼一下信心. 下周的南京区域赛估计就是我的退役赛了,bless all. Revenge of Fibonacci Time Limit: 10000/5000 MS ...
- AjaxPro.2使用小结
这是我最近没事的时候研究的东东,使用AjaxPro.2.dll,从前台调用后台Ajax方法,希望对各位亲有帮助哦.. 1.首先将AjaxPro.2.dll从网上下载下来,打开VS项目,点击项目,右键- ...
- Layabox:全球唯一Flash直接开发H5的工具Laya.Flash终于开放(转)
HTML5是风口,但年轻幼稚,Flash昔日黄花,但丰满妖娆,Layabox使用Flash直接开发HTML5(或编译页游),渴望性感而青春,但久在深闺,只见于一些大企业和朋友圈中,被指“饥饿营销”,保 ...