为什么蜂巢加入花费太长时间



我正在运行一个基本上像这样的代码:

Create table abc as 
select A.* from
table1 A
Left outer join
table2 B 
on 
A.col1=B.col1 and  A.col2=B.col2;

表1中的记录数= 7009102table2中的记录数= 1787493

我的脚本中有类似的6个查询,但是我的脚本被卡在第四个此类查询中。我尝试通过Tez和MapReduce跑步,但两者都有相同的问题。

在MapReduce中,它被卡在地图0%和一个小时后降低0%。没有还原器在Tez中,它在1小时内只有22%。

检查日志后,它显示了许多条目,例如'TaskAttEmpt of taskempt of_12334_m_000003_0 is:0.0'。

我在tez中跑了工作,现在已经将近3个小时了,这项工作即将完成2个MAP-2 Vertice失败。

改进蜂巢查询以更快地运行

的一般技巧

1。使用orc文件
Hive支持ORC文件 - 一种新的表存储格式,通过谓词俯卧撑(俯卧撑),压缩等技术进行出色的速度改进。
在每个蜂巢表中使用orcfile确实应该很容易,并且非常有益于获得蜂巢查询的快速响应时间。

CREATETABLEA_ORC ( 
customerIDint, namestring, age int, address string 
)

2。使用矢量化矢量性查询执行通过一次批量进行1024行执行,而不是每次行,可以提高扫描,聚合,过滤器和加入等操作的性能。在Hive 0.13中引入,此功能可显着改善查询执行时间,并通过两个参数设置轻松启用:

I. sethive.vectorized.execution.enabled = true;
II. sethive.vectorized.execution.reduce.enabled = true;

3。基于分区的连接:要优化蜂巢中的连接,我们必须减少查询扫描时间。为此,我们可以通过在" wery"子句中指定分区谓词或JOIN中的子句中的分区谓词来创建一个带有分区的蜂巢表。
例如:表"状态视图"在"状态"列上分区。以下查询仅针对给定状态检索行:优化蜂巢中的连接

SELECT state_view.* FROM state view WHERE state_view.state= ‘State-1’ AND state_view.state = ‘State-3’;

如果表状态视图与另一个表城市用户连接在一起,则可以在" on"子句中指定一系列分区,如下所示:

SELECT state_view.* FROM state_view JOIN city_users ON (state_view.state = city_users.state); 

希望这篇文章能帮助您满足Hive中的所有加入优化需求。

Hive使用MapReduce,这是为什么它慢的原因,但是如果您想找到更多信息,请参见链接bellowhttps://community.hortonworks.com/content/supportkb/48808/a-hive-join-join-query-is-is-slow-bocaus---iit-it-is-is-is-stuck-for.html

相关内容

  • 没有找到相关文章

最新更新