`

MapReduce优化

 
阅读更多

相信每个程序员在编程时都会问自己两个问题“我如何完成这个任务”,以及“怎么能让程序运行得更快”。同样,MapReduce计算模型的多次优化也是为了更好地解答这两个问题。

MapReduce计算模型的优化涉及了方方面面的内容,但是主要集中在两个方面:一是计算性能方面的优化;二是I/O操作方面的优化。这其中,又包含六个方面的内容。

1. 任务调度

任务调度是Hadoop中非常重要的一环,这个优化又涉及两个方面的内容。计算方面:Hadoop总会优先将任务分配给空闲的机器,使所有的任务能公平地分享系统资源。I/O方面:Hadoop会尽量将Map任务分配给InputSplit所在的机器,以减少网络I/O的消耗。

2. 数据预处理与InputSplit的大小

MapReduce任务擅长处理少量的大数据,而在处理大量的小数据时,MapReduce的性能就会逊色很多。因此在提交MapReduce任务前可以先对数据进行一次预处理,将数据合并以提高MapReduce任务的执行效率,这个办法往往很有效。如果这还不行,可以参考Map任务的运行时间,当一个Map任务只需要运行几秒就可以结束时,就需要考虑是否应该给它分配更多的数据。通常而言,一个Map任务的运行时间在一分钟左右比较合适,可以通过设置Map的输入数据大小来调节Map的运行时间。在FileInputFormat中(除了CombineFileInputFormat),Hadoop会在处理每个Block后将其作为一个InputSplit,因此合理地设置block块大小是很重要的调节方式。除此之外,也可以通过合理地设置Map任务的数量来调节Map任务的数据输入。

3. Map和Reduce任务的数量

合理地设置Map任务与Reduce任务的数量对提高MapReduce任务的效率是非常重要的。默认的设置往往不能很好地体现出MapReduce任务的需求,不过,设置它们的数量也要有一定的实践经验。

首先要定义两个概念—Map/Reduce任务槽。Map/Reduce任务槽就是这个集群能够同时运行的Map/Reduce任务的最大数量。比如,在一个具有1200台机器的集群中,设置每台机器最多可以同时运行10个Map任务,5个Reduce任务。那么这个集群的Map任务槽就是12000,Reduce任务槽是6000。任务槽可以帮助对任务调度进行设置。

设置MapReduce任务的Map数量主要参考的是Map的运行时间,设置Reduce任务的数量就只需要参考任务槽的设置即可。一般来说,Reduce任务的数量应该是Reduce任务槽的0.95倍或是1.75倍,这是基于不同的考虑来决定的。当Reduce任务的数量是任务槽的0.95倍时,如果一个Reduce任务失败,Hadoop可以很快地找到一台空闲的机器重新执行这个任务。当Reduce任务的数量是任务槽的1.75倍时,执行速度快的机器可以获得更多的Reduce任务,因此可以使负载更加均衡,以提高任务的处理速度。

4. Combine函数

Combine函数是用于本地合并数据的函数。在有些情况下,Map函数产生的中间数据会有很多是重复的,比如在一个简单的WordCount程序中,因为词频是接近与一个zipf分布的,每个Map任务可能会产生成千上万个<the, 1>记录,若将这些记录一一传送给Reduce任务是很耗时的。所以,MapReduce框架运行用户写的combine函数用于本地合并,这会大大减少网络I/O操作的消耗。此时就可以利用combine函数先计算出在这个Block中单词the的个数。合理地设计combine函数会有效地减少网络传输的数据量,提高MapReduce的效率。

在MapReduce程序中使用combine很简单,只需在程序中添加如下内容:

job.setCombinerClass(combine.class);

在WordCount程序中,可以指定Reduce类为combine函数,具体如下:

job.setCombinerClass(Reduce.class);

5. 压缩

编写MapReduce程序时,可以选择对Map的输出和最终的输出结果进行压缩(同时可以选择压缩方式)。在一些情况下,Map的中间输出可能会很大,对其进行压缩可以有效地减少网络上的数据传输量。对最终结果的压缩虽然会减少数据写HDFS的时间,但是也会对读取产生一定的影响,因此要根据实际情况来选择(第7章中提供了一个小实验来验证压缩的效果)。

6. 自定义comparator

在Hadoop中,可以自定义数据类型以实现更复杂的目的,比如,当读者想实现k-means算法(一个基础的聚类算法)时可以定义k个整数的集合。自定义Hadoop数据类型时,推荐自定义comparator来实现数据的二进制比较,这样可以省去数据序列化和反序列化的时间,提高程序的运行效率(具体会在第7章中讲解)。

原文地址:http://blog.csdn.net/wisgood/article/details/8789906

分享到:
评论

相关推荐

    【MapReduce篇08】MapReduce优化1

    数据倾斜是MapReduce优化中常见的问题,表现为某些Key的值远大于其他Key,导致部分Reducer负载过高。解决方法包括: 1. **抽样和范围分区**:通过抽样预设分区边界值,均衡数据分布。 2. **自定义分区**:基于业务...

    MapReduce平台优化详解.pdf

    本文将从MapReduce优化的角度,深入剖析MapReduce平台的优化方法,涵盖Combiner、Partitioner、数据压缩等方面。 一、Combiner优化 Combiner是MapReduce中的一种特殊组件,位于Mapper和Reducer之间,负责对Mapper...

    MapReduce平台优化详解.pptx

    这份"MapReduce平台优化详解.pptx"主要涵盖了MapReduce优化的几个重要方面,包括Combiner、Partitioner、数据压缩以及YARN在Hadoop中的作用和优点。 首先,Combiner是一种有效的优化手段,它可以在Mapper阶段本地化...

    KNN分类算法的MapReduce并行化实现1

    总结来说,KNN分类算法的MapReduce并行化实现是大数据环境下优化KNN算法性能的重要手段。通过合理分配计算任务,减少通信开销,以及充分利用分布式计算的优势,这一实现策略为处理大规模数据集提供了可行且高效的...

    MapReduce2.0源码分析与实战编程

    第6章:MapReduce优化 本章讨论MapReduce性能优化的策略,如Combiner的使用、分区策略调整、数据本地性和 speculative tasks。优化MapReduce作业可以显著提高大数据处理的效率和资源利用率。 第7章:实战编程案例 ...

    20_尚硅谷大数据之MapReduce_Hadoop企业优化1

    本文主要围绕标题"20_尚硅谷大数据之MapReduce_Hadoop企业优化1"展开,讨论MapReduce优化的关键点。 首先,我们关注的是MapReduce程序效率的瓶颈,主要分为两大部分:计算机性能和I/O操作。计算机性能涉及CPU、内存...

    大数据技术原理及应用课实验5 :MapReduce初级编程实践

    **三、MapReduce优化与改进** 在实现上述功能时,可以考虑以下优化: - **分区策略**:根据输入数据的特性调整分区策略,使得相同`key`的数据尽可能在同一台机器上处理,减少网络传输。 - **Combiner函数**:在...

    Mapreduce原理

    #### 四、MapReduce优化策略 **1. 数据本地化优化** - **Map任务本地化策略**:为了减少网络传输成本,Map任务会优先在存储数据的节点上执行。如果无法在本地执行,则会选择同一机架内的节点执行。 - **Reduce任务...

    Google-MapReduce中文版_1.0.pdf

    2. **内存与磁盘使用**: MapReduce优化了内存使用策略,同时通过合理的数据分区策略减少了磁盘I/O开销。 3. **并行度与负载均衡**: 通过合理设置Map和Reduce任务的数量以及数据切分策略,可以实现良好的并行处理效果...

    多MapReduce作业协同下的大数据挖掘类算法资源效率优化.pdf

    文章还提到,优化关键词包括MapReduce优化、Item-Based算法、内存文件系统、I/O效率以及资源优化。这些关键词表明文章涉及的技术范围和研究内容,即主要集中在MapReduce模型下的资源优化,以及如何利用分布式缓存...

    Hadoop-MapReduce实践示例

    4. MapReduce优化技巧:在MapReduce的实践中,优化技巧包括但不限于合理设置map和reduce任务的数量、优化数据分区、调整内存使用等。例如,适当增加map任务的数量可以提高数据处理的并行度,而合理的数据分区则可以...

    MALK:一种高效处理大规模键值的MapReduce框架.pdf

    总结以上信息,可以看出MALK框架是一种针对大规模键值数据处理的MapReduce优化方案。虽然文档提供的信息有限,无法详细了解MALK框架的所有技术细节,但可以确定的是,它旨在通过一系列的优化策略提高处理效率,解决...

    mapreduce开发优化文档

    ### MapReduce开发优化详解 #### 一、概述 MapReduce是一种分布式编程模型,主要用于处理海量数据集。在实际应用中,为了提高MapReduce作业的执行效率,需要对多个配置参数进行优化调整。本文将详细介绍MapReduce...

    使用MapReduce优化大数据K均值聚类

    本篇研究论文的主题是关于如何使用MapReduce框架来优化大数据环境下的K均值聚类算法。首先,论文提出聚类分析是计算机科学及相关领域(如机器学习、数据挖掘、模式识别等)中的一个基础问题,其中K均值算法由于其...

    MapReduce基础实战.pdf

    #### 五、MapReduce优化技巧 - **数据倾斜处理**:通过预分区或自定义分区器等方式解决某些Reducer处理数据量过大的问题。 - **合并小文件**:将多个小文件合并成较大文件,以减少处理时间。 - **使用Combiner**:...

    阿里云 专有云Enterprise版 E-MapReduce V3.3.0 技术白皮书 20180312.pdf

    八、E-MapReduce优化 E-MapReduce提供了多种优化策略,包括: 1. 资源优化:通过调整资源配置来提高性能。 2. 数据优化:通过调整数据处理流程来提高性能。 3. 应用程序优化:通过调整应用程序参数来提高性能。 ...

    MapReduce技术原理深入理解.pdf

    MapReduce优化 MapReduceshuffle过程是一个很重要的步骤,可以对其进行优化。例如,可以使用combiner来合并map输出,减少reduce输入的数量。 MapReduce输入处理类 MapReduce提供了多种输入处理类,例如...

    MapReduce高级编程之本地聚集与Combinner

    总的来说,本地聚集和Combinner是MapReduce优化的重要手段,它们通过减少网络通信和提前聚合数据,提高了系统的整体性能。在实际应用中,开发者需要根据具体需求和数据特性灵活运用这些技术,以实现更高效、更节省...

    hadoop技术内幕 深入解析mapreduce架构设计与实现原理

    #### 四、MapReduce优化技巧 为了进一步提升MapReduce的性能,可以采取以下几种策略: - **数据压缩**:通过对输入数据进行压缩,可以减少网络传输的数据量,从而提高整体处理速度。 - **本地化读取**:尽可能地让...

Global site tag (gtag.js) - Google Analytics