我在Hive Table中拥有1.2亿条记录.在执行select具有某些where条件或执行任何条件的语句时avg,max(mathematical operation)查询执行需要2到3个小时.我是否在Hive中遗漏了一些配置.因为查询花了这么多时间似乎很不寻常.我在Microsoft Azure服务上使用Hortonworks 2.5 Sandbox.
请给出任何解决方案.谢谢.
有许多方法可以优化查询,但根据您的数据集记录,这可能对您有所帮助.根据我的理解和实践,我在这里强调了几点:
1:使用Tez Hive可以使用Apache Tez执行引擎而不是古老的Map-reduce引擎.我想提出一个简单的建议:如果在您的环境中默认情况下没有打开它,请在Hive查询的开头使用Tez设置为"true":
set hive.execution.engine=tez;
Run Code Online (Sandbox Code Playgroud)
通过上述设置,您执行的每个HIVE查询都将利用Tez.
2:使用ORCFile
Hive支持ORCfile,这是一种新的表存储格式,通过谓词下推,压缩等技术支持速度提升.
3:使用矢量化
矢量化查询执行通过一次批量执行1024行而不是每行一行来提高扫描,聚合,过滤器和连接等操作的性能.
这个功能在Hive 0.13中引入,显着缩短了查询执行时间,并且可以通过两个参数设置轻松启用:
set hive.vectorized.execution.enabled = true;
set hive.vectorized.execution.reduce.enabled = true;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
5:写好SQL
SQL是一种强大的声明性语言.与其他声明性语言一样,编写SQL语句的方法不止一种.尽管每个语句的功能都相同,但它可能具有截然不同的性能特征.
| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |