Hive查询性能差。

4

我正在HIVE中连接3个巨大的表格(十亿行表格)。所有的统计数据都已经收集,但是性能仍然非常差(查询需要40分钟左右)。

有没有什么参数可以在HIVE提示符中设置以获得更好的性能?

当我尝试执行时,我看到了如下信息:

Sep 4, 2015 7:40:23 AM INFO: parquet.hadoop.ParquetInputFormat: Total input paths to process : 1
Sep 4, 2015 7:40:23 AM INFO: parquet.hadoop.ParquetFileReader: reading another 1 footers

所有表格都是在BigSql中使用"STORED AS PARQUETFILE"存储参数创建的。

当HIVE查询正在运行时,我如何抑制作业进度详细信息?

关于HIVE版本

hive> set system:sun.java.command;
system:sun.java.command=org.apache.hadoop.util.RunJar /opt/ibm/biginsights/hive/lib/hive-cli-0.12.0.jar org.apache.hadoop.hive.cli.CliDriver -hiveconf hive.aux.jars.path=file:///opt/ibm/biginsights/hive/lib/hive-hbase-handler-0.12.0.jar,file:///opt/ibm/biginsights/hive/lib/hive-contrib-0.12.0.jar,file:///opt/ibm/biginsights/hive/lib/hbase-client-0.96.0.jar,file:///opt/ibm/biginsights/hive/lib/hbase-common-0.96.0.jar,file:///opt/ibm/biginsights/hive/lib/hbase-hadoop2-compat-0.96.0.jar,file:///opt/ibm/biginsights/hive/lib/hbase-prefix-tree-0.96.0.jar,file:///opt/ibm/biginsights/hive/lib/hbase-protocol-0.96.0.jar,file:///opt/ibm/biginsights/hive/lib/hbase-server-0.96.0.jar,file:///opt/ibm/biginsights/hive/lib/htrace-core-2.01.jar,file:///opt/ibm/biginsights/hive/lib/zookeeper-3.4.5.jar,file:///opt/ibm/biginsights/sheets/libext/piggybank.jar,file:///opt/ibm/biginsights/sheets/libext/pig-0.11.1.jar,file:///opt/ibm/biginsights/sheets/libext/avro-1.7.4.jar,file:///opt/ibm/biginsights/sheets/libext/opencsv-1.8.jar,file:///opt/ibm/biginsights/sheets/libext/json-simple-1.1.jar,file:///opt/ibm/biginsights/sheets/libext/joda-time-1.6.jar,file:///opt/ibm/biginsights/sheets/libext/bigsheets.jar,file:///opt/ibm/biginsights/sheets/libext/bigsheets-serdes-1.0.0.jar,file:///opt/ibm/biginsights/lib/parquet/parquet-mr/parquet-column-1.3.2.jar,file:///opt/ibm/biginsights/lib/parquet/parquet-mr/parquet-common-1.3.2.jar,file:///opt/ibm/biginsights/lib/parquet/parquet-mr/parquet-encoding-1.3.2.jar,file:///opt/ibm/biginsights/lib/parquet/parquet-mr/parquet-generator-1.3.2.jar,file:///opt/ibm/biginsights/lib/parquet/parquet-mr/parquet-hadoop-bundle-1.3.2.jar,file:///opt/ibm/biginsights/lib/parquet/parquet-mr/parquet-hive-bundle-1.3.2.jar,file:///opt/ibm/biginsights/lib/parquet/parquet-mr/parquet-thrift-1.3.2.jar,file:///opt/ibm/biginsights/hive/lib/guava-11.0.2.jar


如果在所有3个表中加入100%的记录,则统计数据不会有太大的差异。而Hive查询需要40分钟并不令人惊讶。一些值得关注的点可能包括:MapReduce或Tez?哪种类型的连接(请参见EXPLAIN)?每个连接步骤有多少个映射器(请参见MR或Tez日志)?大量数据的倾斜(某些映射器处理的数据比其他映射器多,从而减慢了步骤)?中间结果的压缩等等。 - Samson Scharfrichter
当我使用存储参数作为ORC而不是PARQUET时,性能得到了很大的提升。请问您能告诉我为什么吗? - Koushik Chandra
你为什么选择Hive+Parquet?是因为Cloudera的营销炒作吗?请看我在另一篇帖子中的评论(顺便提一下,这篇帖子链接是https://dev59.com/jI7ea4cB1Zd3GeqPErNQ#0r3mnYgBc1ULPQZFrSwe)。 - Samson Scharfrichter
1个回答

0

Koushik - 这个问题我一个月前问过,它会给你一个关于ORC和Parquet性能的好洞察。

让我问一下这个问题!你的数据结构是什么样的?是嵌套的还是扁平的?如果这是扁平的数据,例如从RDBMS摄取的数据,ORC更好,因为它在数据旁边存储了轻量级索引,使得数据检索更快。

希望这可以帮到你。


数据是扁平化结构数据。原始表实际上是从bigsql创建的,并且以parquet格式存在。总共有18个这样的表被连接(其中5个是巨大的表)。如果我使用这些parquet结构并将18个表的连接分解为多步骤过程,那么填充一个去规范化的扁平化表需要大约6个小时。 - Koushik Chandra
如果我必须使用ORC格式,那么首先我必须为所有18个表创建ORC表并填充这些表,然后才能在我的多步连接过程中使用这些ORC表。因此,额外的任务是从Parquet首先填充ORC表。我认为相比现在所需的时间,这个过程的时间不会减少太多(考虑到填充ORC表的额外步骤)。 - Koushik Chandra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接