Hadoop平台常用配置及优化建议
当发现作业运行效率不理想时,需要对作业执行进行性能监测,以及对作业本身、集群平台进行优化。优化后的集群可能最大化利用硬件资源,从而提高作业的执行效率。本文记录了在hadoop集群平台搭建以及作业运行过程中一些常用优化手段,在使用中会不断补充,不断翻阅。
1、避免输入大量小文件。大量的小文件(不足一个block大小)作为输入数据会产生很多的Map任务(默认一个分片对应一个Map任务),而每个Map任务实际工作量又非常小,系统要花更多的时间来将这些Map任务的输出进行整合。如果将大量的小文件进行预处理合并成一个或几个大文件,任务执行的效率可能会提升几十倍。可手动将小文件合并成大文件,或通过Hadoop的SequenceFile、CombineFileInputFormat将多个文件打包到一个输入单元中,使得每个Map处理更多的数据,从而提高性能。
2、预判并过滤无用数据。可以使用一些过滤工具,在作业执行之前将数据中无用的数据进行过滤,可极大提高MapReduce执行效率。Bloom Filter是一种功能强大的过滤器,执行效率高,时间复杂度为O(1),缺点是存在一定的误判可能,详细参考《Bloom Filter概念和原理》。当将一个非常大的表和一个非常小的表进行表连接操作时,可以使用Bloom Filter将小表数据作为Bloom Filter的输入数据,将大表的原始数据进行过滤(过滤不通过的数据一定是不可用的,过滤通过的数据可能有用可能无用),可提高程序执行的效率。
3、合理使用分布式缓存DistributedCache。DistributedCache可以将一些字典、jar包、配置文件等缓存到需要执行map任务的节点中,避免map任务多次重复读取这些资源,尤其在join操作时,使用DistributedCache缓存小表数据在map端进行join操作,可避免shuffle、reduce等操作,提高程序运行效率。
4、重用Writable类型。避免大量多次new这些Writable对象,这会花费java垃圾收集器大量的清理工作,建议在map函数外定义这些Writable对象,如下所示:
class MyMapper … {
Text wordText = new Text();
IntWritable one = new IntWritable(1);
public void map(...) {
for (String word: words) {
wordText.set(word);
context.write(wordText, one);
}
}
}
5、合理设置Combiner。Combine阶段处于Map端操作的最后一步,设置Combine操作可大大提高MapReduce的执行效率,前提是增加Combine不能改变最终的结果值,换句话说,不是所有的MapReduce程序都能添加Combine,如求平均数的MapReduce程序就不适合设置Combine操作。通常Combine函数与Reduce函数一致
1、HDFS参数调优(hdfs-site.xml)
▶ dfs.namenode.handler.count:namenode用于处理RPC的线程数,默认值10,可根据NameNode所在节点机器配置适当调大,如32、64;
▶ dfs.datanode.handler.count:datanode上用于处理RPC的线程数,2.6版本默认值10,早期1.x版本默认值为3,可根据datanode节点的配置适当调整;
2、MapReduce参数调优(mapred-site.xml)
▶ mapreduce.tasktracker.map.tasks.maximum:每个nodemanager节点上可运行的最大map任务数,默认值2,可根据实际值调整为10~100;
▶ mapreduce.tasktracker.reduce.tasks.maximum:每个nodemanager节点上可运行的最大reduce任务数,默认值2,可根据实际值调整为10~100;
▶ mapreduce.output.fileoutputformat.compress:是否对map任务产生的结果进行压缩,默认值false。对传输数据进行压缩,既可以减少文件的存储空间,又可以加快数据在网络不同节点之间的传输速度。
▶ mapreduce.output.fileoutputformat.compress.type:map产生任务数据的压缩方式,默认值RECORD,可配置值有:NONE、RECORD、BLOCK
▶ mapreduce.task.io.sort.mb:map任务输出结果的内存环形缓冲区大小,默认值100M,可根据map节点的机器进行配置,貌似不能超过值mapred.child.java.opts;
▶ mapreduce.map.sort.spill.percent:map任务输出环形缓冲区大小溢写触发最大比例,默认值80%,这个值一般不建议修改;
▶ mapreduce.reduce.shuffle.parallelcopies:reduce节点通过http拷贝map输出结果数据到本地的最大工作线程数,默认值5,可根据节点机器配置适当修改;
▶ mapreduce.reduce.shuffle.input.buffer.percent:reduce节点在shuffle阶段拷贝map输出结果数据到本地时,内存缓冲区大小所占JVM内存的比例,默认值0.7,一般不建议修改;
▶ mapreduce.reduce.shuffle.merge.percent:reduce节点shuffle内存缓冲区溢写触发最大比例,默认值0.66,一般不建议修改;
▶ mapred.child.java.opts:配置每个map或reduce使用的内存数量,默认值-Xmx200m,即200M。如果nodemanager所在节点
Hadoop平台常用配置及优化建议的更多相关文章
- Mysql常用配置及优化
[client]# 该目录下的内容常用来进行localhost登陆,一般不需要修改port = 3306 # 端口号socket = /var/lib/mysql/mysql.sock # 套接字文件 ...
- Jquery学习笔记--性能优化建议
一.选择器性能优化建议 1. 总是从#id选择器来继承 这是jQuery选择器的一条黄金法则.jQuery选择一个元素最快的方法就是用ID来选择了. 1 $('#content').hide(); 或 ...
- Tomcat记录-tomcat常用配置详解和优化方法(转载)
常用配置详解 1 目录结构 /bin:脚本文件目录. /common/lib:存放所有web项目都可以访问的公共jar包(使用Common类加载器加载). /conf:存放配置文件,最重要的是serv ...
- tomcat常用配置详解和优化方法
tomcat常用配置详解和优化方法 参考: http://blog.csdn.net/zj52hm/article/details/51980194 http://blog.csdn.net/wuli ...
- Hadoop平台配置汇总
Hadoop平台配置汇总 @(Hadoop) Hadoop hadoop-env.sh和yarn-env.sh中export log和pid的dir即可和JAVA_HOME. core-site.xm ...
- IDEA的常用配置(Maven)一键导入及优化内存
IDEA的常用配置一键导入 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载如图的压缩包 下载完成后解压缩,点击settings_bak,你会看 ...
- 四、华为VRP平台介绍和常用配置
一.华为VRP平台 华为现用的平台是VRP(Versatile Routing Platform)是华为公司数据通信产品的通用操作系统平台. 包含华为产品中的路由.交换.安全.无线等等 二.华为设备管 ...
- Unity 几种优化建议
转: http://user.qzone.qq.com/289422269/blog/1453815561?ptlang=2052 Unity 几种优化建议 最简单的优化建议: 1.PC平台的话保持场 ...
- unity优化建议
使用Profiler工具分析内存占用情况 System.ExecutableAndDlls:系统可执行程序和DLL,是只读的内存,用来执行所有的脚本和DLL引用.不同平台和不同硬件得到的值会不一样,可 ...
随机推荐
- linux apt-get install 错误: Package has no installation candidate
sudo apt-get install vim 在安装vim时报如下错误: Error accoured: This may mean that the package is missing, ha ...
- BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基
[题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即 ...
- 2016 Multi-University Training Contest 2
8/13 2016 Multi-University Training Contest 2官方题解 数学 A Acperience(CYD)题意: 给定一个向量,求他减去一个 α(>=0)乘以 ...
- 【BZOJ1076】[SCOI2008]奖励关 状压DP+期望
[BZOJ1076][SCOI2008]奖励关 Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物,每次你都可以选择吃或者不吃(必须 ...
- HTML5 标签audio添加网页背景音乐代码
<head> <meta http-equiv="Content-Type" name="viewport" content="wi ...
- hibernate 的SessionFactory的getCurrentSession 与 openSession() 的区别
1 getCurrentSession创建的session会和绑定到当前线程,而openSession不会. 2 getCurrentSession创建的线程会在事务回滚或事物提交后自动关闭,而ope ...
- --自动创建备份SQL
--自动创建备份SQL DECLARE @dbname VARCHAR(50) ,--要备份的数据库名称 @bakname VARCHAR(50) ,--备份后的bat名称 @sql VARCHAR( ...
- JAVA中的TreeSet
TreeSet简介 TreeSet是一个有序的集合,它的作用是提供一个有序的Set集合,它继承于AbstractSet抽象类实现了NavigableSet<E>, Cloneable, j ...
- 百度地图 获取两点坐标之间的驾车距离(非直线距离) c#
百度接口了解: http://lbsyun.baidu.com/index.php?title=webapi/route-matrix-api-v2 起点与终点为多对多关系,如果你只想取两个坐标,那就 ...
- java 特性
1.不支持默认参数 2. 没有指针.malloc.free .内存会自动回收 3. 解释性语言,必须跑在虚拟机上,可以实现跨平台