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。