sql - Hive 中的查询性能问题

标签 sql azure hadoop

我的 Hive 表中有 1.2 亿条记录。在执行带有某些 where 条件的 select 语句或执行任何 avg 时,max(数学运算) 查询正在执行2至3小时。我是否缺少 Hive 中的某些配置?因为查询花费这么多时间似乎很不寻常。我正在 Microsoft Azure 服务上使用 Hortonworks 2.5 Sandbox。

请给出解决方案。谢谢。

最佳答案

优化查询的方法有很多,但这可能对您有所帮助,根据您的数据集记录。根据我的理解和实践,我在这里强调了几点:

1:使用 Tez Hive 可以使用 Apache Tez 执行引擎而不是古老的 Map-reduce 引擎。我想提出一个简单的建议:如果您的环境中默认情况下未打开它,请通过在 Hive 查询开头将以下内容设置为“true”来使用 Tez:

set hive.execution.engine=tez;

通过上述设置,您执行的每个 HIVE 查询都将利用 Tez。

2:使用ORCFile

Hive 支持 ORCfile,这是一种新的表存储格式,可通过谓词下推、压缩等技术提高速度。

3:使用矢量化

矢量化查询执行通过一次批量执行 1024 行而不是每次单行来提高扫描、聚合、过滤和联接等操作的性能。

此功能在 Hive 0.13 中引入,显着缩短了查询执行时间,并且可以通过两个参数设置轻松启用:

set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;

4:基于成本的查询优化

Hive 最近添加的基于成本的优化可根据查询成本执行进一步的优化,从而产生可能不同的决策:如何对连接进行排序、执行哪种类型的连接、并行度等。

要使用基于成本的优化(也称为 CBO),请在查询开始时设置以下参数:

set hive.cbo.enable=true;
set hive.compute.query.using.stats=true;
set hive.stats.fetch.column.stats=true;
set hive.stats.fetch.partition.stats=true;

5:编写良好的 SQL

SQL 是一种强大的声明性语言。与其他声明性语言一样,编写 SQL 语句的方法不止一种。尽管每个语句的功能相同,但其性能特征可能截然不同。

关于sql - Hive 中的查询性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42827524/

相关文章:

hadoop - 将时间序列数据写入按月和日分区的 hdfs?

MySQL 用可变数字搜索/替换

java - 覆盖 Azure 应用程序配置存储中的属性

xml - HDP 沙盒上的 Hive ADD JAR

ios - 在ios应用程序swift中使用Azure表存储(NoSQL)

python - 无法打开库 'ODBC Driver 17 for SQL Server' : file not found

hadoop - hive 表丢失

mysql - 如何删除数据透视表中的空值?

sql - 如何 md5 所有列而不考虑类型

mysql - 在 sql 脚本中插入之间的等待时间?