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引用.不同平台和不同硬件得到的值会不一样,可 ...
随机推荐
- 环境变量/path/classpath/JAVA_HOME/JAVA环境变量配置
环境变量 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息.例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在 ...
- IOC装配Bean(注解方式)
Spring的注解装配Bean Spring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提供了与@Component注解等效的三个注解 ...
- Jquery AJAX ASP.NET IIS 跨域 超简单解决办法
第一种: 在IIS添加如下标头即可 Access-Control-Allow-Headers:Content-Type, api_key, AuthorizationAccess-Control-Al ...
- EF中执行sql语句,以及事务
EF to sql string sql = "select T_Task.BSID,T_Task.CloseDate,T_Task.CompleteDate,T_Task.CloseUse ...
- BZOJ 3157 &数学乱搞...
挖一发坑...一碰到数学题头晕眼花...看着证明感觉我幼儿园还没毕业... http://www.cnblogs.com/zhuohan123/p/3726933.html 等我会完完整整地写一发la ...
- VB下对HTML元素的操作
<!DOCTYPE html> <html> <head> <title>test</title> </head> <bo ...
- Android中AsyncTask使用
一.AsyncTask的作用: 代替Thread+Handler的组合,使创建异步任务变得简单. AsyncTask执行后台操作,并在用户界面上发布结果,而不必处理线程. 二.AsyncTask的定义 ...
- dedecms有条件sql注入(x0day)
https://www.t00ls.net/thread-35569-1-1.html http://localhost/dedecms/plus/advancedsearch.php?mid=1&a ...
- KVM 基本命令
一.问题描述: KVM中宿主机通过console无法连接客户机,卡在这里不动了. # virsh console vm01 Connected to domain vm01 Escape charac ...
- 浏览器版本不支持页面示例 supper.html
关键点在于<html>标签和js.<!--[if lt IE 10]>的配合 使用360浏览器兼容模式下查看:http://runjs.cn/code <!DOCTYPE ...