之前转载了一篇<Hive - 数据仓库的性能优化>。博主总结的很不错。这里本人将自己平时积累的资料汇总了一下,来补充一下这篇文章:
针对方法上篇的优化方法1,2,3 主要建立在 Hive 触发了一个 MapReduce Job。但是我们都知道,启用 MapReduce Job 会消耗系统开销的(从我这篇博文 可以发现当使用 Like 关键词的时候效率比 CTAS 要快很多倍)。对于这个问题, Hive 从0.10.0 版本开始,对于简单的不需要聚合操作的语句将不会触发 MapReduce Job,直接通过 Fetch task 来获取数据。
详细信息可以参考:
数据文件的优化包含了通过数据文件格式, 压缩,存储方式的选择来进行性能提升。
Hive 最新发布的 0.14.0 版本中支持TEXTFILE, SEQUENCEFILE, RCFILE, ORC, PARQUET 和 Avro文件格式。我们可以通过以下方法来指定文件的格式:
CREATE TABLE ... STORE AS <File_Format>
ALTER TABLE ... [PARTITION partition_spec] SET FILEFORMAT <File_Format>
SET hive.default.fileformat = <File_Format> --设置表的默认文件格式
在这里,<File_Type> 可以是 TEXTFILE, SEQUENCEFILE, RCFILE, ORC, PARQUET 或者 Avro 类型.
我们可以通过 TEXTFILE 格式将 text 文件直接加载到一张表中。如果要往表中加载其他格式的数据,我们需要将数据先加载成 TEXTFILE 格式的表,之后再使用 INSERT OVERWRITE TABLE <target_file_format_table> SELECT * FROM <text_format_source_table> 语句进行转换,将期望的数据格式加载到表中。
Hive 支持如下数据格式,它们的优化如下所示: