reduce的运行是分成三个阶段的。分别为copy->sort->reduce。
由于job的每一个map都会根据reduce(n)数将数据分成map 输出结果分成n个partition,
所以map的中间结果中是有可能包含每一个reduce需要处理的部分数据的。
所以,为了优化reduce的执行时间,hadoop中是等job的第一个map结束后,
所有的reduce就开始尝试从完成的map中下载该reduce对应的partition部分数据。
这个过程就是通常所说的shuffle,也就是copy过程。
参数:mapred.reduce.parallel.copies(default 5)
说明:每个reduce并行下载map结果的最大线程数
Reduce task在做shuffle时,实际上就是从不同的已经完成的map上去下载属于自己这个reduce的部分数据,
由于map通常有许多个,所以对一个reduce来说,下载也可以是并行的从多个map下载,这个并行度是可以调整的,
调整参数为:mapred.reduce.parallel.copies(default 5)。
默认情况下,每个只会有5个并行的下载线程在从map下数据,如果一个时间段内job完成的map有100个或者更多,
那么reduce也最多只能同时下载5个map的数据,
所以这个参数比较适合map很多并且完成的比较快的job的情况下调大,有利于reduce更快的获取属于自己部分的数据。
参数:mapred.reduce.copy.backoff(default 300秒)
说明:reduce下载线程最大等待时间(秒)
reduce的每一个下载线程在下载某个map数据的时候,有可能因为那个map中间结果所在机器发生错误,
或者中间结果的文件丢失,或者网络瞬断等等情况,这样reduce的下载就有可能失败,
所以reduce的下载线程并不会无休止的等待下去,当一定时间后下载仍然失败,那么下载线程就会放弃这次下载,
并在随后尝试从另外的地方下载(因为这段时间map可能重跑)。
所以reduce下载线程的这个最大的下载时间段是可以调整的,
调整参数为:mapred.reduce.copy.backoff(default 300秒)。
如果集群环境的网络本身是瓶颈,那么用户可以通过调大这个参数来避免reduce下载线程被误判为失败的情况。
不过在网络环境比较好的情况下,没有必要调整。通常来说专业的集群网络不应该有太大问题,所以这个参数需要调整的情况不多。
参数:io.sort.factor
Reduce将map结果下载到本地时,同样也是需要进行merge的,所以io.sort.factor的配置选项同样会影响reduce进行merge时的行为,
该参数的详细介绍上文已经提到,当发现reduce在shuffle阶段iowait非常的高的时候,就有可能通过调大这个参数来加大一次merge时的并发吞吐,优化reduce效率。
参数:mapred.job.shuffle.input.buffer.percent(default 0.7)
说明:用来缓存shuffle数据的reduce task heap百分比
Reduce在shuffle阶段对下载来的map数据,并不是立刻就写入磁盘的,而是会先缓存在内存中,然后当使用内存达到一定量的时候才刷入磁盘。
这个内存大小的控制就不像map一样可以通过io.sort.mb来设定了,而是通过另外一个参数来设置:mapred.job.shuffle.input.buffer.percent(default 0.7),
这个参数其实是一个百分比,意思是说,shuffile在reduce内存中的数据最多使用内存量为:0.7 × maxHeap of reduce task。
也就是说,如果该reduce task的最大heap使用量(通常通过mapred.child.java.opts来设置,比如设置为-Xmx1024m)的一定比例用来缓存数据。
默认情况下,reduce会使用其heapsize的70%来在内存中缓存数据。
如果reduce的heap由于业务原因调整的比较大,相应的缓存大小也会变大,这也是为什么reduce用来做缓存的参数是一个百分比,而不是一个固定的值了。
参数:mapred.job.shuffle.merge.percent(default 0.66)
说明:缓存的内存中多少百分比后开始做merge操作
假设mapred.job.shuffle.input.buffer.percent为0.7,reduce task的max heapsize为1G,
那么用来做下载数据缓存的内存就为大概700MB左右,这700M的内存,跟map端一样,
也不是要等到全部写满才会往磁盘刷的,而是当这700M中被使用到了一定的限度(通常是一个百分比),就会开始往磁盘刷。
这个限度阈值也是可以通过job参数来设定的,设定参数为:mapred.job.shuffle.merge.percent(default 0.66)。
如果下载速度很快,很容易就把内存缓存撑大,那么调整一下这个参数有可能会对reduce的性能有所帮助。
参数:mapred.job.reduce.input.buffer.percent(default 0.0)
说明:sort完成后reduce计算阶段用来缓解数据的百分比
当reduce将所有的map上对应自己partition的数据下载完成后,就会开始真正的reduce计算阶段
(中间有个sort阶段通常时间非常短,几秒钟就完成了,因为整个下载阶段就已经是边下载边sort,然后边merge的)。
当reduce task真正进入reduce函数的计算阶段的时候,有一个参数也是可以调整reduce的计算行为。
也就是:mapred.job.reduce.input.buffer.percent(default 0.0)。
由于reduce计算时肯定也是需要消耗内存的,而在读取reduce需要的数据时,同样是需要内存作为buffer,
这个参数是控制,需要多少的内存百分比来作为reduce读已经sort好的数据的buffer百分比。
默认情况下为0,也就是说,默认情况下,reduce是全部从磁盘开始读处理数据。
如果这个参数大于0,那么就会有一定量的数据被缓存在内存并输送给reduce,
当reduce计算逻辑消耗内存很小时,可以分一部分内存用来缓存数据,反正reduce的内存闲着也是闲着。
参考原文链接:
http://cloud.csdn.net/a/20110121/290650.html
分享到:
相关推荐
Hadoop作业调优是提升大数据处理效率的关键环节,通过对Hadoop MapReduce框架中的参数进行精细调整,可以显著改善作业的性能。以下是对标题和描述中涉及的参数及原理的详细说明: 1. **MapTask运行内部原理** - **...
hadoop调优参数列表.hadoop调优参数列表.hadoop调优参数列表.
总的来说,Hadoop的配置调优是一个综合考虑硬件资源、数据特性、作业需求和系统性能的过程。每个参数的调整都需要谨慎,因为它们之间存在相互影响的关系。通过深入理解这些配置项的作用和相互关系,可以有效地优化...
标题《Hive及Hadoop作业调优》与描述《阿里巴巴内部hive优化经验文档》指明了本文档的核心内容,它涉及到了在大数据处理领域内,如何针对Hive以及Hadoop作业进行优化的详细方法和经验分享。标签“hive”, “hadoop”...
在使用Hadoop和Hive过程中,可能会遇到一些问题,例如Mapreduce任务结束了,但是Reduce任务停止了,或者HDFS抛出错误等情况。 1. Mapreduce任务结束了,但是Reduce任务停止了 这种情况可能是由于Mapreduce任务的...
Hadoop参数调优 Hadoop参数调优是指通过调整Hadoop配置文件中的各个参数来达到性能优化的目的。...Hadoop参数调优需要根据实际情况进行调整,需要考虑到集群的硬件特性和实际需求,通过实验和测试来获得最合适的设置。
Cloudera Hadoop 5&Hadoop高阶管理及调优课程,完整版,提供课件代码资料下载。 内容简介 本教程针对有一定Hadoop基础的学员,深入讲解如下方面的内容: 1、Hadoop2.0高阶运维,包括Hadoop节点增加删除、HDFS和...
本文档旨在探讨Hadoop与HBase的参数优化技术,旨在为有需求的读者提供指导与帮助。欢迎对此领域感兴趣的朋友查阅并交流。
Hadoop 开发运维和调优实战考试 Hadoop 是一种基于 Java 的分布式计算框架,它主要由 HDFS(Hadoop Distributed File System)和 MapReduce 两个部分组成。HDFS 是一种分布式文件系统,负责存储数据,而 MapReduce ...
hadoop调优参数列表
本篇文章将详细阐述如何利用Eclipse有效地调试Hadoop作业,以及与之相关的源码分析和工具使用技巧。 首先,调试Hadoop作业的准备工作至关重要。你需要确保已经安装并配置好Eclipse,同时在本地或远程服务器上安装了...
本课程“Hadoop大数据开发与性能调优实战培训课程-Hadoop组件详解”旨在深入探讨Hadoop的主要组件及其优化策略,帮助开发者和数据工程师提升在大数据环境中的实践能力。 首先,我们要了解Hadoop的基础架构,它主要...
本文将详细讨论Hadoop调优的关键参数,分为资源相关参数、Shuffle性能优化参数以及容错相关参数。 1. **资源相关参数**: - `mapreduce.map.memory.mb` 和 `mapreduce.reduce.memory.mb` 分别设定MapTask和Reduce...
7. 在Hadoop配置中,通过编辑hdfs-site.xml文件可以设置名称节点的相关参数,如要使用的名称节点。 8. dfs.data.dir属性用于指定数据节点上存放数据的目录,而不是元数据。 9. 修改NameNode的Web监控端口可以通过...
【标题】:“五分钟学大数据-Hadoop企业级调优手册1” ...综上所述,Hadoop企业级调优涵盖了从基础参数配置到集群性能测试、扩展与维护的全方位流程,旨在最大化HDFS的性能和稳定性,为企业的大数据应用提供有力支撑。
**负载**:用户可以通过配置文件或命令行参数向Map-Reduce作业添加自定义的负载,如设置Map或Reduce任务的数量,调整数据的分区策略等,以适应不同规模的数据处理需求。 **作业配置**:作业配置是控制Map-Reduce...
### Hadoop调优指南 Hadoop作为一种分布式计算框架,在大数据处理领域扮演着极其重要的角色。为了充分发挥Hadoop的性能优势,进行合理的系统调优是非常必要的。本文将基于提供的标题、描述、标签以及部分内容,深入...