热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MapReduce性能优化_3.诊断Reduce端性能瓶颈

本文翻译于《HadoopinPractice-1》,摘抄自:大牛翻译系列6.2.3Reduce的性能问题技术33Reduce实例不足或过多
本文翻译于 《Hadoop in Practice - 1》, 摘抄自: 大牛翻译系列

6.2.3 Reduce的性能问题

  • 技术33 Reduce实例不足或过多
  • 技术34 诊断reduce段的数据倾斜的问题
  • 技术35 确定reduce任务是否存在整体吞吐量过低
  • 技术36 缓慢的洗牌(shuffle)和排序

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入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 深入解析Hadoop的核心组件与工作原理
    本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ... [详细]
  • MapReduce原理是怎么剖析的
    这期内容当中小编将会给大家带来有关MapReduce原理是怎么剖析的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1 ... [详细]
  • 深入解析Spark核心架构与部署策略
    本文详细探讨了Spark的核心架构,包括其运行机制、任务调度和内存管理等方面,以及四种主要的部署模式:Standalone、Apache Mesos、Hadoop YARN和Kubernetes。通过本文,读者可以深入了解Spark的工作原理及其在不同环境下的部署方式。 ... [详细]
  • 本文介绍了Hive作为基于Hadoop的数据仓库工具的核心概念,包括其基本功能、使用理由、特点以及与Hadoop的关系。同时,文章还探讨了Hive相较于传统关系型数据库的不同之处,并展望了Hive的发展前景。 ... [详细]
  • 深入浅出:Hadoop架构详解
    Hadoop作为大数据处理的核心技术,包含了一系列组件如HDFS(分布式文件系统)、YARN(资源管理框架)和MapReduce(并行计算模型)。本文将通过实例解析Hadoop的工作原理及其优势。 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • 本文探讨了Hive作业中Map任务数量的确定方式,主要涉及HiveInputFormat和CombineHiveInputFormat两种InputFormat的分片计算逻辑。通过调整相关参数,可以有效控制Map任务的数量,进而优化Hive作业的性能。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 初探Hadoop:第一章概览
    本文深入探讨了《Hadoop》第一章的内容,重点介绍了Hadoop的基本概念及其如何解决大数据处理中的关键挑战。 ... [详细]
author-avatar
QQ文科
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有