6.2 诊断性能瓶颈 有的时候作业的执行时间会长得惊人.想靠猜也是很难猜对问题在哪.这一章中将介绍如何界定问题,找到根源.涉及的工具中有的是Hadoop自带的,有的是本书提供的. 系统监控和Hadoop任务 在Hadoop的0.20.x版本中,并没有提供MapReduce任务的CPU和内存的性能指标的抽取方法.不过在0.22版本中,CPU和内存性能指标将会被写道作业的历史信息文件中.并且可以通过Hadoop的用户界面来查看这些. 6.2.1 理解MapReduce作业性能的影响因子 从大的方面来…
原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 4.1 Joining Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.cnblogs.com/datacloud/p/3578509.html 4.1.1 Repartition join Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.cnblogs.com/datacloud/p/3578509.h…
原文:[Xamarin挖墙脚系列:应用的性能调优] 官方提供的工具:网盘地址:http://pan.baidu.com/s/1pKgrsrp 官方下载地址:https://download.xamarin.com/profiler/profiler-windows.msi Xamarin Profiler,使用此工具,帮助我们进行软件性能的调优,找到应用的瓶颈. 内存占用较高的代码调用进行监视.快速解决影响程序性能的代码. 关于此工具的使用,请参见: https://developer.xama…
6.4.6 优化数据序列化 如何存储和传输数据对性能有很大的影响.在这部分将介绍数据序列化的最佳实践,从Hadoop中榨出最大的性能. 压缩压缩是Hadoop优化的重要部分.通过压缩可以减少作业输出数据的储存足迹,加速MapReduce作业下游接收数据.另外,在map和reduce之间的数据需要被压缩以减轻网络IO的压力.压缩技术的具体内容在第5章中介绍. 二进制文件格式 使用二进制文件格式,如Avro和SequenceFile,可以使数据的表达更为紧凑,并提高编组(marshalling)和逆…
6.1 测量MapReduce和环境的性能指标 性能调优的基础系统的性能指标和实验数据.依据这些指标和数据,才能找到系统的性能瓶颈.性能指标和实验数据要通过一系列的工具和过程才能得到. 这部分里,将介绍Hadoop自带的工具和性能指标.还将捎带介绍性能监控工具. 6.1.1 作业统计数据抽取工具 这一章中介绍的很多技术都需要从Hadoop中抽取作业和任务的性能指标.有以下三种办法抽取这些统计数据: 用JobTracker UI来查看作业和任务的计数器. 用Hadoop CLI(命令行界面)来查看…
6.2.4 任务一般性能问题 这部分将介绍那些对map和reduce任务都有影响的性能问题. 技术37 作业竞争和调度器限制 即便map任务和reduce任务都进行了调优,但整个作业仍然会因为环境原因运行缓慢. 问题 需要判断作业是否运行得比集群中其它作业要慢. 方案 将正在执行的reduce任务数和Hadoop集群的最大reduce任务数相比较. 讨论 如果根据前几节的技术,发现作业已经正确配置,任务的吞吐量也正确,那么作业的缓慢就有可能是集群的资源竞争了.下面将介绍如何诊断集群的资源竞争.…
6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduce函数.每次调用仅用较少时间.那么就不能用普通的经验来预测常见库(含JDK)的性能表现. 进一步阅读 Joshua Bloch的<Effective Java>中有很多如何调优JAVA代码的方法 在技术45中介绍如何用分析器(profiler)查找MapReduce代码中消耗时间的地方.这里要用同…
MapReduce原理 要知道怎么对MapReduce作业进行调优前提条件是需要对Map-Reduce的过程了然于胸. Map-Reduce运行原理图: Map Side 1.从磁盘读取数据并分片 默认每个block对应一个分片,一个map task 2.进行map处理 运行自定义的map业务过程 3.输出数据到缓冲区中 map输出的数据并不是直接写入磁盘的,而是会先存储在一个预定义的buffer中 4.分区.排序分组的过程 对map输出的数据进行分区,按照key进行排序和分组 5.归约(可选)…
6.4.4 减小数据倾斜的性能损失 数据倾斜是数据中的常见情况.数据中不可避免地会出现离群值(outlier),并导致数据倾斜.这些离群值会显著地拖慢MapReduce的执行.常见的数据倾斜有以下几类: 数据频率倾斜——某一个区域的数据量要远远大于其他区域. 数据大小倾斜——部分记录的大小远远大于平均值. 在map端和reduce端都有可能发生数据倾斜.在map端的数据倾斜会让多样化的数据集的处理效率更低.在reduce端的数据倾斜常常来源于MapReduce的默认分区器. 数据倾斜会导致map…
6.2.5 硬件性能问题 尽管单独的硬件的MTTF(平均失效前时间)都数以年记,然而在集群中就完全不是这么一回事了.整个集群的MTTF就要小得多.这一节要介绍如何确定CPU,内存,磁盘和网络是否过度利用了,以及如何将它们的利用率调节到一个合理的水平. 技术39 查找硬件的失效 节点失效可能有如下原因:磁盘控制器失效,磁盘空间事故,其他硬件事故,以及Hadoop自身的缺陷(可能性较低).节点失效将会导致MapReduce作业执行时间变长.在较小的集群上的影响要更为明显.接下来就要介绍如何确定集群中…