1. Hive调优前相关规划设计
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供Hive SQL(简称HQL)查询功能,可以将HQL语句转换为MapReduce、Tez、Spark任务运行。本文仅讨论Hive on MapReduce的性能调优场景。
在进行Hive参数调优和SQL调优之前,要进行相应的规划设计,包括:Hive表使用高效的文件格式,Hive表文件及中间文件使用合适的文件压缩格式,根据业务特征创建分区表以及创建分桶表。
1.1. Hive表文件使用高效的文件格式
(1)建议使用ORC
ORC文件格式可以提供一种高效的方法来存储Hive数据,运用ORC可以提高Hive的读、写以及处理数据的性能。
以下两种场景需要应用方权衡是否使用ORC:
(a)文本文件加载到ORC格式的Hive表的场景:由于文本格式到ORC,需要耗费较高的CPU计算资源,相比于直接落地成文本格式Hive表而言加载性能会低很多;
(b)Hive表作为计算结果数据,导出给Hadoop之外的外部系统读取使用的场景:ORC格式的结果数据,相比于文本格式的结果数据而言其易读性低很多。
除以上两种场景外,其他场景均建议使用ORC作为Hive表的存储格式。
(2)考虑使用Parquet
Parquet的核心思想是使用“record shredding and assembly algorithm”来表示复杂的嵌套数据类型,同时辅以按列的高效压缩和编码技术,实现降低存储空间,提高IO效率,降低上层应用延迟。
Parquet是语言无关的,而且不与任何一种数据处理框架绑定在一起,适配多种语言和组件,能够与Parquet配合的组件有:
查询引擎:Hive、Impala、Pig;
计算框架:MapReduce、Spark、Cascading;
数据模型:Avro、Thrift、Protocol Buffers、POJOs。
对于Impala和Hive共享数据和元数据的场景,建议Hive表存储格式为Parquet。