hadoop集群调优分两个方面,map和reduce
map调优:
map 任务执行会产生中间数据,但这些中间结果并没有直接IO到磁盘上,而是先存储在缓存(buffer)中,并在缓存中进行一些预排序来优化整个map的性能,该存储map中间数据的缓存默认大小为100M,由io.sort.mb 参数指定.这个大小可以根据需要调整。当map任务产生了非常大的中间数据时可以适当调大该参数,使缓存能容纳更多的map中间数据,而不至于大频率的IO磁盘,当系统性能的瓶颈在磁盘IO的速度上,可以适当的调大此参数来减少频繁的IO带来的性能障碍.
由于map任务运行时中间结果首先存储在缓存中,但是不是当整个缓存被填满时才将其写入磁盘,这样会增加map任务的等待,所以默认当 缓存的使用量达到80%(或0.8)的时候就开始写入磁盘,这个过程叫做spill(也叫做磁盘溢出),进行spill的缓存大小可以通过io.sort.spill.percent 参数调整,这个参数可以影响spill的频率.进而可以影响IO的频率.当map任务计算成功完成之后(也可以不成功单个的map)如果map任务有输出.则会产生多个spill。这些文件就是map的输出结果,但是此时map任务虽然产生了输出结果,但是切记此时map任务仍然没有退出作业,接下来map必须将些spill进行合并,这个过程叫做merge, merge过程是并行处理spill的,每次并行多少个spill是由参数io.sort.factor指定的默认为10个.但是当spill的数量非常大的时候,merge一次并行运行的spill仍然为10个,这样仍然会频繁的IO处理,因此适当的调大每次并行处理的spill数有利于减少merge数因此可以影响map的性能。当map输出中间结果的时候也可以配置压缩.
reduce调优:
reduce 运行阶段分为shuflle(copy) sort reduce, shuffle 阶段为reduce 全面拷贝map任务成功结束之后产生的中间结果,如果上面map任务用了压缩的方式,那么reduce 将map任务中间结果拷贝过来的时候首先要做的第一件事情就是解压缩,这一切是在reduce的 缓存中做的,当然也会占用一部分cpu,但是应该不会cpu的性能有影响,我的pc 没有发现cpu 因为这个过程被占用的 过多.为了优化reduce的执行时间,reduce也不是等到所有的map数据都拷贝过来的时候才开始运行reduce任务,而是当job执行完第一个map执行完才开始运行的.reduce 在shuffle阶段 实际上是从不同的并且已经完成的map上去下载属于自己的这个reduce,由于map任务数很多,所有这个copy过程是并行的,既同时有许多个reduce取拷贝map.这个并行 的线程是通过mapred.reduce.parallel.copies 参数指定的默认为5个,也就是说无论map的任务数是多少个,默认情况下一次只能有5个reduce的线程去拷贝map任务的执行结果.所以当map任务数很多的情况下可以适当的调整该参数,这样可以让reduce快速的获得运行数据来完成任务。reduce线程在下载map数据的时候也可能因为各种各样的原因,网络原因,系统原因,存储该map数据所在的datannode 发生了故障,这种情况下reduce任务将得不到该datanode上的数据了,同时该 download thread 会尝试从别的datanode下载,可以通过mapred.reduce.copy.backoff (默认为30秒)来调整下载线程的下载时间,如果网络不好的集群可以通过增加该参数的值来增加下载时间,以免因为下载时间过长reduce将该线程判断为下载失败。
reduce 下载线程在map结果下载到本地时,由于是多线程并行下载,所以也需要对下载回来的数据进行merge,所以map阶段设置的io.sort.factor 也同样会影响这个reduce的。同map也一样,reduce 将从map下载来的数据也立刻写入磁盘,而是当缓冲区被占用到一定的阀值的时候才写入磁盘,reduce的这个大小mapred.job.shuffle.input.buffer.percent(默认为0.7)来指定,同map一样 该缓冲区大小也不是等到完全被占满的时候才写入磁盘而是默认当当完成0.66的时候就开始写磁盘操作,该参数是通过mapred.job.shuffle.merge.percent 指定的。当reduce 开始进行计算的时候通过:mapred.job.reduce.input.buffer.percent 来指定需要多少的内存百分比来作为reduce读已经sort好的数据的buffer百分比,默认为0.当默认时reduce是全部从磁盘开始读处理数据
总结:总之map reduce调优的一个原则就是 给shuffle 尽量多的内存,给中间结果多些内存,给并行任务数调大(当然一些都得因人而异,根据自己集群及网络的实际情况来调优,调优的时候可以根据工具ganglia来查看效果)
相关推荐
Hadoop作业调优是提升大数据处理效率的关键环节,通过对Hadoop MapReduce框架中的参数进行精细调整,可以显著改善作业的性能。以下是对标题和描述中涉及的参数及原理的详细说明: 1. **MapTask运行内部原理** - **...
3. 由于每个Hadoop集群的机器和硬件之间都存在一定差别,所以Hadoop框架应根据其集群特性做配置优化,可能需要经历大量的实验。 下面分别介绍I/O属性和MapReduce属性这两个类的部分属性,并指明其优化方向: I/O...
在实际应用中,Hadoop集群通常面临着各种挑战,如数据量的增长、查询复杂度的提高以及用户对响应时间的需求增加等。因此,通过合理地调整配置参数、优化硬件资源分配等方式来提升系统的整体性能显得尤为重要。调优的...
- **1.6hadoop集群调优.docx**:这份文档可能详细介绍了如何优化Hadoop集群的性能,包括参数调整、资源调度、网络优化等方面。 - **1.1安装顺序.txt**:这个文本文件可能列出了搭建Hadoop集群的正确步骤和顺序,以...
Datanode的热插拔是指在Hadoop集群中动态添加或删除Datanode节点的过程。这种操作可以提高Hadoop集群的可扩展性和灵活性。 添加Datanode的步骤: 1. 在新机器上安装好Hadoop,并配置好和NameNode的SSH连接。 2. 把...
【Hadoop配置项调优详解】 Hadoop作为一个分布式计算框架,其性能往往受到配置参数的影响。通过对Hadoop的配置项...通过深入理解这些配置项的作用和相互关系,可以有效地优化Hadoop集群的性能,提高数据处理的效率。
安装完成后,还需要根据实际需求和硬件资源对Hadoop集群进行性能调优,包括内存分配、线程设置、网络优化等。 通过以上步骤,你将拥有一个运行在5台虚拟机上的基本Hadoop集群。若在安装过程中遇到问题,可联系...
### Hadoop集群安装与配置详解 #### 一、引言 随着互联网技术的快速发展和企业数据量的激增,高效处理大规模数据的需求日益迫切。Hadoop作为一种开源的大数据处理框架,因其优秀的分布式处理能力和可扩展性,成为...
本篇文章将深入探讨Hadoop集群的高可用性和性能优化策略,帮助你构建更加稳定、高效的Hadoop环境。 一、Hadoop高可用性 1. **NameNode HA**: Hadoop集群中的NameNode是元数据管理的关键节点,其高可用性至关重要。...
7. **Hadoop集群部署与管理**:包括配置Hadoop环境、安装集群、数据分布策略、故障检测与恢复、性能调优等内容。 8. **案例分析**:通过实际案例展示Hadoop在日志分析、推荐系统、机器学习等领域的应用,加深对...
### Hadoop集群搭建总结 #### 一、Hadoop概述与应用场景 Hadoop是一个由Apache基金会维护的开源分布式计算框架,其主要目标是处理大规模数据集的存储与计算问题。通过Hadoop,用户能够轻松地在分布式环境中开发和...
从Hadoop配置文件入手,经历大量的实验,以求通过改变一些配置参数以提高Hadoop集群的性能。 从Hadoop作业调度入手,优化集群作业调度算法。
【标题】:“五分钟学大数据-Hadoop企业级调优手册1” ...综上所述,Hadoop企业级调优涵盖了从基础参数配置到集群性能测试、扩展与维护的全方位流程,旨在最大化HDFS的性能和稳定性,为企业的大数据应用提供有力支撑。
【标题】"Hadoop集群搭建共10页.pdf.zip" 提供的是关于Hadoop集群建设的详细教程,可能涵盖了从规划、配置到实际...不过,真正的Hadoop集群管理还需要深入理解和实践经验,包括故障排查、日志分析以及性能调优等方面。