`

hadoop集群调优

阅读更多

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集群参数的自动调优,该文档写得比较详细,是个不错的资料

    Hadoop性能调优

    从Hadoop配置文件入手,经历大量的实验,以求通过改变一些配置参数以提高Hadoop集群的性能。 从Hadoop作业调度入手,优化集群作业调度算法。

    论文研究-基于资源签名与遗传算法的Hadoop参数自动调优系统.pdf

    针对以上问题,构建了Hadoop集群自动调优系统,其中在系统中设计了资源获取器与参数配置库,分别用于获取各作业的资源消耗与存储分发配置方案。该系统利用MapReduce作业的小规模数据集资源签名将任务分类,在遗传...

    美团1万台 Hadoop 集群 YARN 的调优之路

    YARN作为Hadoop的资源管理系统,负责Hadoop集群上计算资源的管理和作业调度。 美团的YARN以社区2.7.1版本为基础构建分支。目前在YARN上支撑离线业务、实时业务以及机器学习业务。 离线业务主要运行的是Hive on ...

    五分钟学大数据-Hadoop企业级调优手册1

    1.3 开启回收站配置 6 2.1 测试 HDFS 写性能 9 2.2 测试 HDFS 读性能 11 3.3 集群数据均衡之磁盘间数据均衡13 4.1 添加白名

    Hadoop集群优化手册

    请在测试环境使用本文档对集群参数调优,测试环境无不良情况可根据具体生产情况调整。

    Hadoop开发者第四期

    Hadoop开发者第四期: 海量数据处理平台架构演变;...Hadoop 集群的配置调优; Hadoop 平台的Java 规范及经验; MapReduce 开发经验总结; Hadoop 中的tar 命令的实现; Hadoop 技术论坛运营数据分享

    阿里的hadoop运维经验分享

    阿里的hadoop运维经验分享。内容: hadoop集群搭建 监控 集群性能调优 Hadoop如何被搞垮的

    Hadoop平台常见故障汇总以及操作系统性能调优.docx

    该文件为hadoop集群平台常见故障进行总结及处理问题相关的技巧,还有一些操作系统性能方面的调优策略。

    基于AWS云平台大规模集群千亿数据调优方案视频教程

    1,大规模集群调优(150台服务器)、千亿级别数据量的规模 2,全程实操,以需求为目标,逐步实现。 3,贴近真实企业开发的工作流程。 4,基于AWS云平台实现,学习如何在云上实践大数据。 适用人群 1、对大数据技术感...

    Hadoop权威指南 第二版(中文版)

     本书是Hadoop权威参考,程序员可从中探索如何分析海量数据集,管理员可以从中了解如何安装与运行Hadoop集群。 目录 第1章 初识Hadoop  数据!数据!  数据存储与分析  与其他系统相比  关系型数据库管理系统...

    Hadoop实战中文版

    9.4 在EC2 上运行MapReduce 程序 9.4.1 将代码转移到Hadoop集群上 9.4.2 访问Hadoop集群上的数据 9.5 清空和关闭EC2 实例 9.6 Amazon Elastic MapReduce 和其他AWS 服务 9.6.1 Amazon Elastic MapReduce 9.6.2...

    Hadoop权威指南(中文版)2015上传.rar

    利用基准测试程序测试Hadoop集群 Hadoop基准测试程序 用户的作业 云上的Hadoop Amazon EC2上的Hadoop 第10章 管理Hadoop HDFS 永久性数据结构 安全模式 日志审计 工具 监控 日志 度量 Java管理扩展(JMX) 维护 日常...

    Hadoop实战中文版.PDF

    1649.2.2 获得命令行工具 1669.2.3 准备SSH密钥对 1689.3 在EC2上安装Hadoop 1699.3.1 配置安全参数 1699.3.2 配置集群类型 1699.4 在EC2上运行MapReduce程序 1719.4.1 将代码转移到Hadoop集群上 1719...

    Hadoop实战(陆嘉恒)译

    在云上运行Hadoop9.1 Amazon Web Services 简介9.2 安装AWS9.2.1 获得AWS身份...Hadoop集群上9.4.2 访问Hadoop集群上的数据9.5 清空和关闭EC2 实例9.6 Amazon Elastic MapReduce 和其他AWS 服务9.6.1 Amazon Elastic ...

    Hadoop实战

    1699.3.2 配置集群类型 1699.4 在EC2上运行MapReduce程序 1719.4.1 将代码转移到Hadoop集群上 1719.4.2 访问Hadoop集群上的数据 1729.5 清空和关闭EC2实例 1759.6 Amazon Elastic MapReduce和其他AWS服务 1769.6.1 ...

    《Hadoop开发者》第四期

    Hadoop 集群的配置调优................................ 60 Hadoop 平台的Java 规范及经验......................... 63 MapReduce 开发经验总结............................... 67 Hadoop 中的tar 命令的实现.......

    hadoop和yarn原理笔记.docx

    在培训班整理的笔记 涉及到实际工作中的调优和基本原理对比hadoop1.0和2.0区别,集群的配置要求。yarn的原理和各部分的作用

Global site tag (gtag.js) - Google Analytics