1.1 模块架构模型
Hive提供了Hadoop的SQL能力,主要参考标准的SQL,Hive进行了部分的修改,形成了自己的特有的SQL语法HQL(Hive SQL),更加适合于Hadoop的分布式体系,该SQL目前是Hadoop体系的事实标准。
Hive的架构分为
接入层:体现为用户的接口,如JDBC,ODBC,CLI(command line interface)
HiveServer:Hive的主体部分,包括了词法解析,语法解析,逻辑优化和物理优化,HiveMetaStore。
执行层:主要有两个执行引擎,MapReduce和Spark。Spark引擎更能充分利用服器的内存,性能会好于MapReduce引擎。
存储层:目前Hive通过MapReduce/Spark访问HDFS可以支持多种存储格式,最主要的格式是ORC File和Parquet File。
用户输入HQL,Hive将HQL进行词法解析,语法解析,之后生成执行计划,并对执行计划进行优化,最后提交任务给YARN去执行。所以Hive的调优分为以下几个部分:
- 接入层:主要包括用户的连接性能,如网络、认证、连接数量。
- HiveServer:以SQL的优化为主,执行计划是SQL优化的主要手段,可以看到Hive对整个SQL语句是如何进行任务的分解和编排,并结合MapReduce/Spark的执行情况针对性的进行任务的优化。
- HiveMetaStore:因为Hive的MetaStore可能是外部的独立数据库,所以它的性能也会影响到整个HiveServer的性能,主要包括HiveMetaStore访问时间,访问次数,连接数量。
- MapReduce/Spark:以该组件进行执行时,MapReduce/Spark执行的情况直接引影响到Hive的性能,如每个任务的大小,任务与资源分配均匀度,任务拆分合理度等。
- HDFS:最底层的IO读也是性能的关键,主要考虑的指标是读取和写入的性能,还包括块大小合理设置等。
其中MapReduce/Spark/HDSF组件有自己独立的调优手册及文档,请参考对应组件的调优。本文档重点讨论上述的1), 2), 3)部分的性能调优的内容,并结合MapReduce/Spark的进行调优说明。
注:上述规格参数仅作为参考,并不代表不能超过,但如果业务场景有超过这些规格,那么对性能影响比较大,需要在性能和业务能力上进行权衡。