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(命令行界面)来查看…
原文链接:猛戳这里 性能调优一直是运维工程师最重要的工作之一,如果您所在的生产环境中遇到了系统响应速度慢,硬盘IO吞吐量异常,数据处理速度低于预期值的情况,又或者如CPU.内存.硬盘.网络等系统资源长期处于耗尽的状态,那么这篇文章将着实的能帮助到你,如果没有也请先收藏起来. 1.hdparm查看硬度读取速度 命令:hdparm -t /dev/sda5 打印:Timing buffered disk reads: 254 MB in 3.01 seconds = 84.34 MB/sec 说明:…
6.2.3 Reduce的性能问题 Reduce的性能问题有和map类似的方面,也有和map不同的方面.图6.13是reduce任务的具体的执行各阶段,标识了可能影响性能的区域. 这一章将介绍影响reduce任务性能的常见问题. 技术33 Reduce实例不足或过多 尽管map段的并行化程度在大部分情况下是自动设置的,但是在reduce端,reduce实例的数量是完全自定义的.如果reduce实例不足或过多,集群的性能就很难得到充分发挥. 问题 需要确定reduce实例的数量是否是作业运行缓慢的…
6.4.5 优化MapReduce用户JAVA代码 MapReduce执行代码的方式和普通JAVA应用不同.这是由于MapReduce框架为了能够高效地处理海量数据,需要成百万次调用map和reduce函数.每次调用仅用较少时间.那么就不能用普通的经验来预测常见库(含JDK)的性能表现. 进一步阅读 Joshua Bloch的<Effective Java>中有很多如何调优JAVA代码的方法 在技术45中介绍如何用分析器(profiler)查找MapReduce代码中消耗时间的地方.这里要用同…
6.2.4 任务一般性能问题 这部分将介绍那些对map和reduce任务都有影响的性能问题. 技术37 作业竞争和调度器限制 即便map任务和reduce任务都进行了调优,但整个作业仍然会因为环境原因运行缓慢. 问题 需要判断作业是否运行得比集群中其它作业要慢. 方案 将正在执行的reduce任务数和Hadoop集群的最大reduce任务数相比较. 讨论 如果根据前几节的技术,发现作业已经正确配置,任务的吞吐量也正确,那么作业的缓慢就有可能是集群的资源竞争了.下面将介绍如何诊断集群的资源竞争.…
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.4.3 优化洗牌(shuffle)和排序阶段 洗牌和排序阶段都很耗费资源.洗牌需要在map和reduce任务之间传输数据,会导致过大的网络消耗.排序和合并操作的消耗也是很显著的.这一节将介绍一系列的技术来缓解洗牌和排序阶段的消耗. 技术46 规避使用reduce Reduce在用于连接数据集的时候将会产生大量的网络消耗. 问题 需要考虑在MapReduce规避reduce的使用. 方案 通过将MapReduce参数setNumReduceTasks设置为0来创建一个只有map的作业. 讨论…
6.2.5 硬件性能问题 尽管单独的硬件的MTTF(平均失效前时间)都数以年记,然而在集群中就完全不是这么一回事了.整个集群的MTTF就要小得多.这一节要介绍如何确定CPU,内存,磁盘和网络是否过度利用了,以及如何将它们的利用率调节到一个合理的水平. 技术39 查找硬件的失效 节点失效可能有如下原因:磁盘控制器失效,磁盘空间事故,其他硬件事故,以及Hadoop自身的缺陷(可能性较低).节点失效将会导致MapReduce作业执行时间变长.在较小的集群上的影响要更为明显.接下来就要介绍如何确定集群中…
5.2 基于压缩的高效存储(续) (仅包括技术27) 技术27 在MapReduce,Hive和Pig中使用可分块的LZOP 如果一个文本文件即使经过压缩后仍然比HDFS的块的大小要大,就需要考虑选择一个支持分块的压缩编码器,以防一个单一的map任务来处理整个超大的文件. LZOP可以满足分块的要求,但是使用起来很复杂.原因在于LZOP不是直接支持分块.LZOP是基于块的格式,但是并不支持块的随机访问. 问题 需要选择一个压缩编码器使MapReduce可以调用多个任务并行处理一个单一的压缩文件.…
5.2 基于压缩的高效存储 (仅包括技术25,和技术26) 数据压缩可以减小数据的大小,节约空间,提高数据传输的效率.在处理文件中,压缩很重要.在处理Hadoop的文件时,更是如此.为了让Hadoop更高效处理文件,就需要选择一个合适的压缩编码器,加快作业运行,增加集群的数据存储能力. 技术25 为待处理数据选择正确的压缩编码器在HDFS上使用压缩并不像ZFS文件系统上那样透明,特别是在处理那些可分块的压缩文件时.(这些将在本章中稍后介绍.)由于Avro和SequenceFiles等文件格式提供…
5.1 小文件 大数据这个概念似乎意味着处理GB级乃至更大的文件.实际上大数据可以是大量的小文件.比如说,日志文件通常增长到MB级时就会存档.这一节中将介绍在HDFS中有效地处理小文件的技术. 技术24 使用Avro存储多个小文件假定有一个项目akin在google上搜索图片,并将数以百万计的图片存储分别在HDFS中.很不幸的是,这样做恰好碰上了HDFS和MapReduce的弱项,如下: Hadoop的NameNode将所有的HDFS元数据保存在内存中以加快速度.Yahoo估计平均每个文件需要6…
附录A.10 LZOP LZOP是一种压缩解码器,在MapReduce中可以支持可分块的压缩.第5章中有一节介绍了如何应用LZOP.在这一节中,将介绍如何编译LZOP,在集群做相应配置. A.10.1 获得更多的信息 表A.12 有用的资源 描述 URL地址 Twitter有关于LZOP的博客文章,包括一些统计信息和安装指南 http://bit.ly/dfEvGn Todd Lipcon的LZO GitHub库.  https://github.com/toddlipcon/hadoop-lz…
4.3 抽样(Sampling) 用基于MapReduce的程序来处理TB级的数据集,要花费的时间可能是数以小时计.仅仅是优化代码是很难达到良好的效果. 在开发和调试代码的时候,没有必要处理整个数据集.但如果在这种情况下要保证数据集能够被正确地处理,就需要用到抽样了.抽样是统计学中的一个方法.它通过一定的过程从整个数据中抽取出一个子数据集.这个子数据集能够代表整体数据集的数据分布状况.在MapReduce中,开发人员可以只针对这个子数据集进行开发调试,极大减小了系统负担,提高了开发效率. 技术2…
4.1.3 半连接(Semi-join) 假设一个场景,需要连接两个很大的数据集,例如,用户日志和OLTP的用户数据.任何一个数据集都不是足够小到可以缓存在map作业的内存中.这样看来,似乎就不能使用reduce端的连接了.尽管不是必须,可以思考以下问题:如果在数据集的连接操作中,一个数据集中有的记录由于因为无法连接到另一个数据集的记录,将会被移除.这样还需要将整个数据集放到内存中吗?在这个例子中,在用户日志中的用户仅仅是OLTP用户数据中的用户中的很小的一部分.那么就可以从OLTP用户数据中只…
Hadoop系列性能部分完结.其它的部分发布时间待定. Hadoop系列将不再一日一篇,开始不定期发布.…
4.2 排序(SORT) 在MapReduce中,排序的目的有两个: MapReduce可以通过排序将Map输出的键分组.然后每组键调用一次reduce. 在某些需要排序的特定场景中,用户可以将作业(job)的全部输出进行总体排序. 例如:需要了解前N个最受欢迎的用户或网页的数据分析工作. 在这一节中,有两个场景需要对MapReduce的排序行为进行优化. 次排序(Secondary sort) 总排序(Total order sorting) 次排序可以根据reduce的键对它的值进行排序.如…
4.1.2 复制连接(Replication join) 复制连接是map端的连接.复制连接得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点.复制连接有一个假设前提:在被连接的数据集中,有一个数据集足够小到可以缓存在内存中. 如图4.5所示,MapReduce复制连接工作原理如下: 使用分布式缓存(Districubted cache)将这个小数据集复制到所有运行map任务的节点. 用各个map任务初始化方法将这个小数据集装载到一个哈希表(hashtable)中. 逐条用大…
4.1 连接(Join) 连接是关系运算,可以用于合并关系(relation).对于数据库中的表连接操作,可能已经广为人知了.在MapReduce中,连接可以用于合并两个或多个数据集.例如,用户基本信息和用户活动详情信息.用户基本信息来自于OLTP数据库.用户活动详情信息来自于日志文件. MapReduce的连接操作可以用于以下场景: 用户的人口统计信息的聚合操作(例如:青少年和中年人的习惯差异). 当用户超过一定时间没有使用网站后,发邮件提醒他们.(这个一定时间的阈值是用户自己预定义的) 分析…
4.2.2 总排序(Total order sorting) 有的时候需要将作业的的所有输出进行总排序,使各个输出之间的结果是有序的.有以下实例: 如果要得到某个网站中最受欢迎的网址(URL),就需要根据某种受欢迎的指标来对网址进行排序. 如果要让最活跃的用户能够看到某张表,就需要根据某种标准(发表文章数)对用户进行排序. 技术22 在多个reduce间对键进行排序 在MapReduce框架中,map的输出会被排序,然后被发送给reduce.不过,相同reduce的输入数据是有序的,不同redu…
4.1.4 为你的数据选择最佳连接策略 已介绍的每个连接策略都有不同的优点和缺点.那么,怎么来判断哪个最适合待处理的数据? 图4.11给出了一个决策树.这个决策树是于论文<A Comparison of Join Algorithms>中提到的一个决策树的改进版本. 图4.11中的决策树可以归纳为以下三点: 如果数据集中有一个足够小到可以放到map的内存中,那么map端的复制连接就足够了. 如果每个数据集都很大,同时其中一个数据集可以在经过一定条件过滤以后大幅度地减小,那么半连接将会很有效.…
附录D.2 复制连接框架 复制连接是map端连接,得名于它的具体实现:连接中最小的数据集将会被复制到所有的map主机节点.复制连接的实现非常直接明了.更具体的内容可以参考Chunk Lam的<Hadoop in Action>. 这个部分的目标是:创建一个可以支持任意类型的数据集的通用的复制连接框架.这个框架中提供了一个优化的小功能:动态监测分布式缓存内容和输入块的大小,并判断哪个更大.如果输入块较小,那么你就需要将map的输入块放到内存缓冲中,然后在map的cleanup方法中执行连接操作了…
附录D.1 优化后的重分区框架 Hadoop社区连接包需要将每个键的所有值都读取到内存中.如何才能在reduce端的连接减少内存开销呢?本文提供的优化中,只需要缓存较小的数据集,然后在连接中遍历较大数据集中的数据.这个方法中还包括针对map的输出数据的次排序,那么reducer先接收到较小的数据集,然后接收到较大的数据集.图D.1是这个过程的流程图. 图D.2是实现的类图.类图中包含两个部分,一个通用框架和一些类的实现样例. 连接框架 我们以和Hadoop社区连接包的近似的风格编写连接的代码.目…
http://www.itpub.net/thread-1412437-1-1.html…
.NET性能调优系列文章 系列文章索引 .NET性能调优之一:ANTS Performance Profiler的使用 .NET性能调优之二:使用Visual Studio进行代码度量 .NET性能调优之三:YSlow相关规则的调优工具和方法 在使用.NET进行快速地上手与开发出应用程序后,接下来面临的问题可能就是程序性能调优方面的问题,而性能调优有时候会涉及方方面面的问题,如程序宿主系统.数据库.网络环境等等,而当程序异常庞大复杂的时候,性能调优将变得更加无从下手. 本系列文章主要会介绍一些.…
hadoop 性能调优与运维 . 硬件选择 . 操作系统调优与jvm调优 . hadoop运维 硬件选择 1) hadoop运行环境 2)  原则一: 主节点可靠性要好于从节点 原则二:多路多核,高频率cpu.大内存, namenode 100万文件的元数据要消耗800M内存,内存决定了集群保存文件数的总量, resourcemanager同时运行的作业会消耗一定的内存. datanode 的内存需要根据cpu的虚拟核数(vcore) 进行配比,CPU的vcore数计算公式为=cpu个数 * 单…