6.2.4 任务一般性能问题

这部分将介绍那些对map和reduce任务都有影响的性能问题。

技术37 作业竞争和调度器限制

即便map任务和reduce任务都进行了调优,但整个作业仍然会因为环境原因运行缓慢。

问题

需要判断作业是否运行得比集群中其它作业要慢。

方案

将正在执行的reduce任务数和Hadoop集群的最大reduce任务数相比较。

讨论

如果根据前几节的技术,发现作业已经正确配置,任务的吞吐量也正确,那么作业的缓慢就有可能是集群的资源竞争了。下面将介绍如何诊断集群的资源竞争。

JobTracker可以查看正在运行的作业的map和reduce任务的并发数,以及集群的最大并发负载能力(Capacity)。图6.21说明了如何将这些数据进行比较。

图中显示了正在运行的reduce实例数远远小于集群的最大并发负载能力。

小结

集群提供的并发能力将会倍所有正在运行的作业,调度器等共享。这些信息可以用JobTracker UI查看。如果存在同时运行的作业,那么对作业的吞吐量的优化就变得较为复杂。

默认情况下,MapReduce使用一个先进先出(FIFO)的调度器来分配并发作业间的资源。也就是说,先提交的作业将会被先执行。后提交的作业需要等待先提交的作业执行完毕。在有的情况下,为了让资源可以被更好的分配,需要根据作业的重要性来使用公正(Fair)调度器或处理能力(Capacity)调度器。此外,还可以自定义调度器,让有的作业得到比其他作业更多的资源。

技术38 使用堆转存(stack dump)来查找未优化的用户代码

效率低下的用户代码会拖累整个作业。例如,在JAVA中常见的字符令牌化技术实际上很没效率,很容易延长作业的运行时间。

问题

需要确定是否因为用户代码导致作业运行缓慢。

方案

对堆转存进行分析,找到用户代码中的性能瓶颈。这需要确认正在运行的任务的主机和进程ID。获取一系列的堆转存。

讨论

在MapReduce1.0.0和更早的版本中并不提供Map和Reduce任务中的用户代码的执行时间的指标。在这种情况下也许需要更新代码,记录用户代码的执行时间。不过在这个技术中,也许不一定需要更新代码。

在技术30(6.2.2)中介绍了如何计算map任务的吞吐量。本技术中的计算基于map的执行时间和输入数据的大小。基本计算方法和技术35(6.2.3)类似。

如果用户代码效率不够,那么吞吐量也会随之下降。但吞吐量偏低并不意味着用户代码效率低下。这就要依靠前几节介绍方法排除其它的可能。

同时,还可以根据任务进程的堆转存来诊断用户代码的效率。图6.22介绍了如何得到作业和任务的细节信息。

图6.23介绍了如何获取堆转存。

小结

使用堆转存查看JAVA进程的运行时间看起来很原始,其实很高效。对于那些CPU绑定的进程更是如此。不得不说堆转存没有探查器(profiler)更有效,更精确。然而相比于探查器需要配置并重启JVM,堆转存就不需要在MapReduce中很麻烦的这一步了。因此它应用领域更广泛。

当获取堆转存的时候,最好能够每隔一段时间获取一次。这样,就可以通过比较这些堆转存来查找原因。如果发现了不同的堆转存中存在相同的正在执行的代码,那么这些代码就很有可能是拖累整体速度的原因。

如果没有发现上述状况,也不代表不存在低效的代码。那么接下来就需要在代码中加入一些计时器来获取精确的执行时间了。

[大牛翻译系列]Hadoop(11)MapReduce 性能调优:诊断一般性能瓶颈的更多相关文章

  1. [大牛翻译系列]Hadoop(9)MapReduce 性能调优:理解性能瓶颈,诊断map性能瓶颈

    6.2 诊断性能瓶颈 有的时候作业的执行时间会长得惊人.想靠猜也是很难猜对问题在哪.这一章中将介绍如何界定问题,找到根源.涉及的工具中有的是Hadoop自带的,有的是本书提供的. 系统监控和Hadoo ...

  2. [大牛翻译系列]Hadoop 翻译文章索引

    原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 4.1 Joining Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.c ...

  3. 【Xamarin挖墙脚系列:应用的性能调优】

    原文:[Xamarin挖墙脚系列:应用的性能调优] 官方提供的工具:网盘地址:http://pan.baidu.com/s/1pKgrsrp 官方下载地址:https://download.xamar ...

  4. [大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化

    6.4.6 优化数据序列化 如何存储和传输数据对性能有很大的影响.在这部分将介绍数据序列化的最佳实践,从Hadoop中榨出最大的性能. 压缩压缩是Hadoop优化的重要部分.通过压缩可以减少作业输出数 ...

  5. [大牛翻译系列]Hadoop(8)MapReduce 性能调优:性能测量(Measuring)

    6.1 测量MapReduce和环境的性能指标 性能调优的基础系统的性能指标和实验数据.依据这些指标和数据,才能找到系统的性能瓶颈.性能指标和实验数据要通过一系列的工具和过程才能得到. 这部分里,将介 ...

  6. [大牛翻译系列]Hadoop(15)MapReduce 性能调优:优化MapReduce的用户JAVA代码

    6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduc ...

  7. MapReduce性能调优记录

    MapReduce原理 要知道怎么对MapReduce作业进行调优前提条件是需要对Map-Reduce的过程了然于胸. Map-Reduce运行原理图: Map Side 1.从磁盘读取数据并分片 默 ...

  8. [大牛翻译系列]Hadoop(14)MapReduce 性能调优:减小数据倾斜的性能损失

    6.4.4 减小数据倾斜的性能损失 数据倾斜是数据中的常见情况.数据中不可避免地会出现离群值(outlier),并导致数据倾斜.这些离群值会显著地拖慢MapReduce的执行.常见的数据倾斜有以下几类 ...

  9. [大牛翻译系列]Hadoop(12)MapReduce 性能调优:诊断硬件性能瓶颈

    6.2.5 硬件性能问题 尽管单独的硬件的MTTF(平均失效前时间)都数以年记,然而在集群中就完全不是这么一回事了.整个集群的MTTF就要小得多.这一节要介绍如何确定CPU,内存,磁盘和网络是否过度利 ...

随机推荐

  1. javascript常见错误

    初学Javascript,每天总是被很小的问题折磨半天,今晚就有好几个小问题. 第一:全部使用双引号造成匹配错误 <input type="checkbox" onmouse ...

  2. 【阿里云产品公测】阿里云ACE配置全程图解,详细到不行!

    作者:阿里云用户sofia 看过阿里云社区的其他技术大姥们的评测教程,感觉还是不够详细,对于一个第一次接触ace.新浪sae这类的应用来说还是比较陌生的.我最喜欢写教程了,不过我有我的风格,那就是简单 ...

  3. 读取Excel文件的两种方法

    第一种方法:传统方法,采用OleDB读取EXCEL文件, 优点:写法简单,缺点:服务器必须安有此组件才能用,不推荐使用 private DataSet GetConnect_DataSet2(stri ...

  4. iOS制作gif动态图

    NSMutableArray * array = [NSMutableArray array]; for (int i = 1; i < 6; i++) { NSString * string ...

  5. maven 本地仓库nexus的安装

    首先我们将nexus下载下来:http://www.sonatype.org/downloads/nexus-latest-bundle.zip 下载下来之后我们将文件解压,解压完成之后,我们首先,打 ...

  6. JQuery方法扩展

    第一种 extend <!-- extend 扩展jQuery,其实就是增加一个静态方法 --> 定义: $.extend({ sayHello:function(name) { aler ...

  7. Umbraco文档类型定义多个template

    利用这个可以同时写PC端和手机端的网站, 在Template中,建立手机端的模板: 在文档类型中,同时选择两个模板,在浏览的时候在URL后加上Template的名称 + .aspx 就可以浏览到你写的 ...

  8. 使用开源库MagicalRecord操作CoreData

      1. 将 MagicalRecord 文件夹拖入到工程文件中,引入 CoreData.frame 框架 2. 在 .pch 文件中引入头文件 CoreData+MagicalRecord.h 注: ...

  9. Dijkstra最短路径算法

    #include <iostream> #include <vector> #include <cstring> #include <cstdio> # ...

  10. Linux Centos 怎么安装更新根证书实现支持https访问

    其实很简单就是一个命令:  mozroots --import --ask-remove    或者使用:  sudo update-ca-certificates