Hadoop性能调优

2019-03-28 13:36|来源: 网络

最近看了些Hadoop性能调优的文章,现总结如下。

1、关于集群物理机器:

配置noatime选项。(配置方式:/etc/fstab)(相关知识点:atime,ctime,mtime。)

对于datanode/tasktracker机器,不需要配置raid或lvm。

尽量避免使用到tasktracker的swap。

磁盘问题会导致task重试,降低效率。在blacklist中的node大多是因为磁盘问题,smart monitor 在磁盘资源。

2、使用数据压缩配置:

在mapred的中间结果(map输出)或有后续任务的mapred任务的输出,使用压缩配置选项。(mapred.compress.map.output,mapred.output.compress)

增加一部分的CPU开销,减少IO开销(包括网络IO和磁盘IO)

3、合理的设置task的数目:

任务的input过大时,split的数量很多,会导致过多的map task。可以通过加大hdfs block size来减小maptask的数量。( hadoop distcp -Ddfs.block.size=$[256*1024*1024] /path/to/inputdata /path/to/inputdata-with-largeblocks)

如果任务数多且小,比如在一分钟之内完成,减少task数量以减少任务初始化的消耗。可以通过配置JVM重用选项减少task的消耗。(mapred.job.reuse.jvm.num.tasks表示一个job的task可利用相同的JVM顺序执行多少个)

任务数和集群slot数目之间应满足一定的关系。比如slot的数量是100个,那么最好不要有101个mapper(类似于图中的关键路径的理念,不论你那100个mapper多快,最后一个不做完,reduce就不能起,也就是说,近似相当于调度两轮map的时耗)。reduce task的数量有两种方案推荐,比如0.95*reduce slot。一轮reduce完成,预留的reduce task是用作重做的。或1.75*reduce slot,同样道理,只不过调度两轮reduce,负载更均衡

4、合理的利用combiner:

首先,从业务场景出发,reduce的结果应该不受影响。其次,combiner所带来的性能消耗要远小于网络传输和排序所带来的消耗。这个的判断可以从几个方面来:shuffle的数据量;spill的counter。(理解shuffle sort的过程)

5、使用合理的数据类型:

非文本类型的数据可选择非Text类型的二进制writable类型,避免类如数值类型转换到string的CPU性能消耗。可根据自己的业务特点定义高效的writable类型。

采用intwritable或者longwritable时,若数值大小差异很大,可以采用变长的类型,减少磁盘和IO消耗。

6、在map或reduce中注意重用writable对象

相关问答

更多
  • 一、操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。。 【适用场景】任何项目。 二、java虚拟机调优 Tomact本身不能直接在虚拟机上运行,需要依赖于硬件基础之上的的操作系统和和一个java虚拟机,你可以根据个人的需要选择不同的操作系统和对应的版本,例如选择SUN的JDK或JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率 ...
  • 这种工具书,建议还是买实体书吧,即翻即用。各大网店也都有卖。 另外这本书,真的很棒。我也是从事Linux运维的。
  • 书名《高性能mysql》,外国人写的,有中文版本。自己网上找。
  • 你还是讲打开Servlet重新载入功能吧(在修改servlet后,有时tomcat不会立即识别,打开该功能后,运行时servlet程序会重新载入内存,从而修改后能立即识别) 方法如下:在tomcat的安装目录下找到conf文件夹,打开找到context.xml文件,用记事本的方式打开,找到 标签 改为 就这样了
  • 操作系统调优,对于操作系统优化来说,是尽可能的增大可使用的内存容量、提高CPU的频率,保证文件系统的读写速率等。 1. 经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快。 2. Java虚拟机调优,应该选择SUN的JVM,在满足项目需要的前提下,尽量选用版本较高的JVM,一般来说高版本产品在速度和效率上比低版本会有改进。 3. Web服务器专门处理HTTP请求,应用服务器是通过很多协议为应用提供商业逻辑。 4. 把Apache和Tomcat集成起来,将html和Jsp的功能部 ...
  • oracle怎么调优[2023-09-03]

    简单些方法就是用oracle自带的工具 调整sga和pga把命中率提高到90以上就可以 了
  • JVM性能调优有很多设置,这个参考JVM参数即可. 主要调优的目的: 控制GC的行为.GC是一个后台处理,但是它也是会消耗系统性能的,因此经常会根据系统运行的程序的特性来更改GC行为 控制JVM堆栈大小.一般来说,JVM在内存分配上不需要你修改,(举例)但是当你的程序新生代对象在某个时间段产生的比较多的时候,就需要控制新生代的堆大小.同时,还要需要控制总的JVM大小避免内存溢出 控制JVM线程的内存分配.如果是多线程程序,产生线程和线程运行所消耗的内存也是可以控制的,需要通过一定时间的观测后,配置最优结果
  • 根据Core Java Server Faces的第1章,纯HTML(静态)在JSF标记的编码阶段之前经过。 如果你有一些不需要与Backing Bean交换的JSF标签,我怀疑你只需将静态数据限制在vanilla HTML中,就可以享受一个小的性能提升。 JSF生命周期的编码和解码短语在组件标记和香草HTML之间转换。 如果你使用一个组件来避免循环遍历一个表并填充行(例如),而不是使用ajax或绑定到支持bean的 ,与一个

    html元素相比。 简而言之,如果您不需要充分 ...

  • 您应该描述您想要的行为。 最大线程约束为100的工作管理器不会将您的应用程序限制为100个用户,但会将其限制为同时为100个并发请求提供服务。 http://blogs.oracle.com/jamesbayer/entry/weblogic_server_work_manager_demo 如果要将其限制为100个用户,请考虑在使用会话时设置最大内存中会话。 您可以在weblogic.xml部署描述符中或在部署的configuration-> general部分的wls控制台中进行设置。 http://d ...
  • 首先,永远不要使用字符串连接来设置SQL中的变量字段。 String queryString = "select emp from Employee emp where emp.id = :id and emp.status.statusCd = 'A'"; Query query = Session.createQuery(queryString); query.setInteger("id", 168); 其次,您可以尝试使用一个查询获取所有目标记录, docs : String queryStrin ...