1.2.1 衡量指标
衡量指标主要用于查看相应的指标来发现Hive服务或执行过程中的一些问题,尽快能定位Hive的性能问题。通常我们查看指标的顺序应该是通用指标,接入层指标,HiveMetaStore,HiveServer相关指标,其它相关组件的指标(如MapReduce/Spark/HDFS)。下面列举目前可查看到的相关指标信息:
- 通用指标
主要是指通用的服务器的相关性能指标:CPU使用率,内存占用量,磁盘IO读写速度,使用Core数量等,通过这些指标可以衡量任务在该类型机器或该机器上的执行情况,观察集群各机器的通用指标,可以看到集群的负载是否均衡。
- 接入层指标
Hive连接数,并行SQL数量,输入缓存值(或每批大小)。单HiveServer实例可以处理的最大并发数可以通过参数控制,默认是500,该参数主要受JVM内存和CPU的处理能力的限制。
- HiveMetaStore
HiveMetaStore连接数,并行SQL数量,语句执行计划。
- HiveServer
主要查看SQL语句的执行计划,进行SQL相关的调优,并结合MapReduce/Spark引擎的相关参数,主要是Job数量,Map数量,Reduce数量。
HiveServer编译生成MapReduce Task任务时对性能影响最大的两个因素是SQL语句涉及的表的分区数量和文件数量:
分区数量:单表的分区数量不能过多,分区信息是从HiveMetaStore读取,如果量太大,从HiveMetataStore的数据库读取分区信息比较慢。
文件数量:在生成MapReduce任务的时候,按读取文件大小进行分片,假设SQL语句涉及的表数据量达到100TB,一个文件128MB,一个块128MB,那么文件总数会达到100*1024*1024/128=82万个文件,这么大量的文件,获取文件元数据信息需要时间,这些元数据读入内存,需要大量内存。
- 通用测试标准
Hive性能上业界主要是拿TPC-DS来跟同类型的产品或者自己的老版本进行对比。标准测试仅做为性能测试的一些参考。