hadoop mapreduce 端参数优化
在MapReduce执行过程中,特别是Shuffle阶段,尽量使用内存缓冲区存储数据,减少磁盘溢写次数;同时在作业执行过程中增加并行度,都能够显著提高系统性能,这也是配置优化的一个重要依据。
下面分别介绍I/O属性和MapReduce属性这两个类的部分属性,并指明其优化方向。
1 I/O属性类的优化
I/O属性类主要包括在Shuffle阶段中相关的I/O过程的属性,在分析了每个具体属性后从以下几个属性入手进行优化。
(1) io.sort.factor属性,int类型,Map端和Reduce端使用
该属性设置在Map端和Reduce端都使用到的对文件Sort时一次合并的最大流,其默认值是10,即一次合并10个流。在集群中,将其适当增大能够提高并行度以缩短合并所需时间。将此默认值增加到100是比较常见的。
(2) io.sort.mb属性,int类型,Map端使用
该属性设置对Map输出进行排序时使用的环形内存缓冲区的大小,以M字节为单位,默认是100M。如果允许,应该增加它的值来减少磁盘溢写的次数以提高性能。
(3) io.sort.record.percent属性,float类型,Map端使用
该属性设置保留的io.sort.mb的比例用来存储Map输出的记录边界,剩余的空间用来存储Map输出记录本身,默认是0.05。
(4) io.sort.spill.percent属性,float类型,Map端使用
该属性设置Map输出内存缓冲和边界记录索引两者使用比例的阈值,达到此值后开始溢写磁盘的过程,默认是0.80。
(5) io.file.buffer.size属性,int类型,MapReduce作业使用
该属性设置MapReduce作业的I/O操作中所提供的缓冲区的大小,以字节为单位,默认是4096字节。这是一个比较保守的设置,通过增大它的大小能够减少I/O次数以提高性能。如果系统允许,64KB(65536字节)至128KB(131072字节)是较普遍的选择。
2 MapReduce属性类的优化
MapReduce属性类主要包括在MapReduce执行过程中相关配置属性,重点从以下的部分属性去分析性能优化。
(1) mapred.reduce.parallel.copies属性,int类型,Reduce端使用
该属性设置将Map输出复制到Reduce的线程的数量,默认为5。根据需要可以将其增大到20-50,增加了Reduce端复制过程的并行数,提高了系统性能。
(2) mapred.child.java.opts属性,String类型,Map和Reduce任务虚拟机使用
该属性设置Map和Reduce任务运行时Java虚拟机指定的内存的大小,默认-Xmx200m,分配给每个任务200MB内存。只要条件允许,应该让任务节点上的内存大小尽量大,可以将其增大到-Xmx512m,即512MB,以提高MapReduce作业的性能。
(3) mapred.job.shuffle.input.buffer.percent属性,float类型,Reduce端使用
该属性设置整个堆空间的百分比,用于Shuffle的复制阶段分配给Map输出缓存,默认是0.70,适当增大比例可以使Map输出不被溢写到磁盘,能够提高系统性能。
(4) mapred.job.shuffle.merge.percent属性,float类型,Reduce端使用
该属性设置Map输出缓存中使用比例的阈值,用于启动合并输出和磁盘溢写的过程,默认是0.66。如果允许,适当增大其比例能够减少磁盘溢写次数,提高系统性能。
(5) mapred.inmem.merge.threshold属性,int类型,Reduce端使用
该属性设置启动合并输出和磁盘溢写过程的最大Map输出数量,默认为1000。由于Reduce端复制的中间值能够全部存在内存中可以获得最佳性能。如果Reduce函数内存需求很少,可以将该属性设置为0,即没有阈值限制,由mapred.job.shuffle.merge.percent属性单独控制溢写过程。
(6) mapred.job.reduce.input.buffer.percent属性,float类型,Reduce端使用
该属性设置在Reduce过程中用来在内存中保存Map输出的空间占整个堆空间的比例。Reduce阶段开始时,内存中的Map输出大小不能大于这个值。默认为0.0,说明在Reduce开始前所有的Map输出都合并到硬盘中以便为Reduce提供尽可能多的内存。然而如果Reduce函数内存需求较小,可以将该值设置为1.0来提升性能。
(7) tasktracker.http.threads属性,int类型,Map端使用
该属性设置集群中每个tasktracker用于将map输出传给reducer的工作线程的数量,默认是40。可以将其提高至40-50之间,能够增加并线线程数,提高集群性能。
调整mapred-site.xml文件,增加JVM的重用次数:
<property>
<name>mapred.job.reuse.jvm.num.tasks</name>
<value>50</value>
</property>将所有配置文件统一,重新启动JobTracker进程与所有TaskTracker进程。设置了jvm复用,即一个job内,多个task共享jvm,避免多次启动jvm,浪费资源和时间。提高运行效率,减少JOB执行的时间。
hadoop mapreduce 端参数优化的更多相关文章
- 【Hadoop离线基础总结】MapReduce参数优化
MapReduce参数优化 资源相关参数 这些参数都需要在mapred-site.xml中配置 mapreduce.map.memory.mb 一个 MapTask 可使用的资源上限(单位:MB),默 ...
- Hadoop参数优化
dfs.block.size 决定HDFS文件block数量的多少(文件个数),它会间接的影响Job Tracker的调度和内存的占用(更影响内存的使用), mapred.map.tasks.spec ...
- Hadoop.2.x_高级应用_二次排序及MapReduce端join
一.对于二次排序案例部分理解 1. 分析需求(首先对第一个字段排序,然后在对第二个字段排序) 杂乱的原始数据 排序完成的数据 a,1 a,1 b,1 a,2 a,2 [排序] a,100 b,6 == ...
- Hadoop Mapreduce 参数 (一)
参考 hadoop权威指南 第六章,6.4节 背景 hadoop,mapreduce就如MVC,spring一样现在已经是烂大街了,虽然用过,但是说看过源码么,没有,调过参数么?调过,调到刚好能跑起来 ...
- 使用eclipse的快捷键自动生成的map或者reduce函数的参数中:“org.apache.hadoop.mapreduce.Reducer.Context context”
今天在测试mapreduce的程序时,就是简单的去重,对照课本上的程序和自己的程序,唯一不同的就是“org.apache.hadoop.mapreduce.Reducer.Context contex ...
- hadoop YARN配置参数剖析—MapReduce相关参数
MapReduce相关配置参数分为两部分,分别是JobHistory Server和应用程序参数,Job History可运行在一个独立节点上,而应用程序参数则可存放在mapred-site.xml中 ...
- Hadoop YARN配置参数剖析(3)—MapReduce相关参数
MapReduce相关配置参数分为两部分,分别是JobHistory Server和应用程序参数,Job History可运行在一个独立节点上,而应用程序参数则可存放在mapred-site.xml中 ...
- hadoop MapReduce - 从作业、任务(task)、管理员角度调优
Hadoop为用户作业提供了多种可配置的参数,以允许用户根据作业特点调整这些参数值使作业运行效率达到最优. 一 应用程序编写规范 1.设置Combiner 对于一大批MapReduce ...
- 【Big Data - Hadoop - MapReduce】通过腾讯shuffle部署对shuffle过程进行详解
摘要: 通过腾讯shuffle部署对shuffle过程进行详解 摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都 ...
随机推荐
- phpwind伪静态规则(IIS,Nginx,Apache)的介绍及代码
phpwind iis下伪静态规则[ISAPI_Rewrite]RewriteRule ^(.*)/(.*)-htm-(.*)-(.*).html$ $1/$2.php?$3=$4RewriteRul ...
- PHPCMS V9 如何启用伪静态
最近在研究CMS时候,首先是使用DEDECMS,后来又转到了PHPCMS,感觉后者架构更加合理,而前者主要是模板众多,故使用者多一些,不过我都是需要自己写模板,那就无所谓了. 玩各种CMS我喜欢首先看 ...
- DeDe缩略图路径的修改
今天在使用dedecms的时候,遇到的一点小问题,移站的时候缩略图不显示.然后就去百度搜了一下,出来的都是千篇一律. 因为一个网站里面缩略图太多,手动比较慢而已费时间, 俗话说的好“时间就是生命” ...
- Symfony2源码分析——启动过程1
本文通过阅读分析Symfony2的源码,了解Symfony2启动过程中完成哪些工作,从阅读源码了解Symfony2框架. Symfony2的核心本质是把Request转换成Response的一个过程. ...
- TFT LCD控制显示总结(硬件概念、初始化相关配置)(转)
源地址:http://nervfzb.blog.163.com/blog/static/314813992011215105432369/ TFT LCD是嵌入式中比较常用的显示器,S3C2440/S ...
- js中给函数传参函数时,函数加括号与不加括号的区别
<!doctype html><html><head><script> function show() { alert("123") ...
- 以前5年只专注于.net,现今开始学习java.
从2011年毕业至今一直在学习.net和c#,大概几年6月份底开始研究java了. 虽然不知道以后的路是否好走,但是我依然会努力.不放弃! 写这篇文字是为了鼓励自己,也为这段时光留下记忆.加油,红红!
- 配置android开发环境eclipse获取ADT获取不到
在安装完Android SDK后eclipse要获取ADT, 可是由于GFW的存在, eclipse经常无法从http://dl-ssl.google.com/android/eclipse 获取到任 ...
- 防止ajax非正常访问
http://www.cnblogs.com/yagzh2000/archive/2013/06/09/3128042.html http://www.cnblogs.com/henw/archive ...
- ISAP
跑的是比Dinic快辣. 更新:指针版.... #include<iostream> #include<cstdio> #include<cmath> #inclu ...