我正在运行一个基本上像这样的代码:
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