调优概述

几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况.

IO受限例子:

索引
分组
数据倒入导出
数据移动和转换

CPU受限例子:

聚类/分类
复杂的文本挖掘
特征提取
用户画像
自然语言处理

我们需要从硬件规划和软件规划等多方面结合实现性能和效率的提升。

异构集群

目前Hadoop发展为一个无所不包的数据平台,所以不仅仅是MapReudce使用,多种计算模型可插拔和Hadoop无缝结合,Hadoop2.x版本Yarn资源管理器,可以兼容多种技术模型;如:内存计算代表的saprk,impala,tez,drill,presto.磁盘计算代表的hive,mapreduce,pig. 对于一个异构集群,会同时存在多种计算模型!在硬件配置上面就需要高内存,大磁盘; Impala推荐最低配置128G内存,才能发挥优势;spark典型的CPU密集型,需要更多CPU和内存。Hive,MR磁盘计算,多磁盘读写比较频繁!当你在为集群硬件选型的时候,需要考虑的软件组件包括Apache HBase、Cloudera Impala、Presto Or Drill、Apache Phoenix和Apache spark。

可以考虑引入了Yarn的资源池,Label based scheduling基于标签的调度机制。基于标签的调度策略是hadoop yarn新引入的feature,它能让YARN更好地运行在异构集群中,进而更好地管理和调度混合类型的应用程序。

监控数据分析

在做调优之前集群应该已经有基本的资源监控 比如 CPU、文件IO、网络IO、内存。如果没有则需要安装监控工具或监控脚步完成主机性能参数收集,常用工具(nmon/nmonanalyser,dstat等等)。

性能瓶颈的表象:资源消耗过多、外部处理系统的性能不足、资源消耗不多但程序的响应速度却仍达不到要求。

我们分析性能的主要来源数据就是主机监控数据和MR计算过程中的计数器数据等等,常见的分析点:

work节点的CPU资源是否有效利用,一般维持在70%左右,如果不到40%表面没有充分利用CPU

观察磁盘IO是否有压力,CPU wa比例是不是很大

观察网络流量是否正常

MR性能主要看shuffle阶段的计数器的表现,spill IO是否为瓶颈等

内存方面结合JVM优化进行调整

结合前面讲的一些优化参数点,反复测试分析结果。解决高层次性能瓶颈后再考虑应用级别的优化,比如文件格式,序列化性能,这方向调优可以使用JVM/HotSpot原生profile能力。