原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 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.3 优化洗牌(shuffle)和排序阶段 洗牌和排序阶段都很耗费资源.洗牌需要在map和reduce任务之间传输数据,会导致过大的网络消耗.排序和合并操作的消耗也是很显著的.这一节将介绍一系列的技术来缓解洗牌和排序阶段的消耗. 技术46 规避使用reduce Reduce在用于连接数据集的时候将会产生大量的网络消耗. 问题 需要考虑在MapReduce规避reduce的使用. 方案 通过将MapReduce参数setNumReduceTasks设置为0来创建一个只有map的作业. 讨论…
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.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任务数相比较. 讨论 如果根据前几节的技术,发现作业已经正确配置,任务的吞吐量也正确,那么作业的缓慢就有可能是集群的资源竞争了.下面将介绍如何诊断集群的资源竞争.…
6.2.3 Reduce的性能问题 Reduce的性能问题有和map类似的方面,也有和map不同的方面.图6.13是reduce任务的具体的执行各阶段,标识了可能影响性能的区域. 这一章将介绍影响reduce任务性能的常见问题. 技术33 Reduce实例不足或过多 尽管map段的并行化程度在大部分情况下是自动设置的,但是在reduce端,reduce实例的数量是完全自定义的.如果reduce实例不足或过多,集群的性能就很难得到充分发挥. 问题 需要确定reduce实例的数量是否是作业运行缓慢的…
4.1.3 半连接(Semi-join) 假设一个场景,需要连接两个很大的数据集,例如,用户日志和OLTP的用户数据.任何一个数据集都不是足够小到可以缓存在map作业的内存中.这样看来,似乎就不能使用reduce端的连接了.尽管不是必须,可以思考以下问题:如果在数据集的连接操作中,一个数据集中有的记录由于因为无法连接到另一个数据集的记录,将会被移除.这样还需要将整个数据集放到内存中吗?在这个例子中,在用户日志中的用户仅仅是OLTP用户数据中的用户中的很小的一部分.那么就可以从OLTP用户数据中只…
4.1 连接(Join) 连接是关系运算,可以用于合并关系(relation).对于数据库中的表连接操作,可能已经广为人知了.在MapReduce中,连接可以用于合并两个或多个数据集.例如,用户基本信息和用户活动详情信息.用户基本信息来自于OLTP数据库.用户活动详情信息来自于日志文件. MapReduce的连接操作可以用于以下场景: 用户的人口统计信息的聚合操作(例如:青少年和中年人的习惯差异). 当用户超过一定时间没有使用网站后,发邮件提醒他们.(这个一定时间的阈值是用户自己预定义的) 分析…