2017-07-07 75 views
1

我正在像tableA的蜂巢查询偏斜数据左连接上tableA.col1 = tableB.col1和tableA.col2 = tableB.col2 tableB的。 tableA拥有18亿个数据,tableB拥有3100万个记录。现在,在我参加的最后减速是没有得到完成,并且运行长。造成长时间运行的查询在蜂巢

这可能是因为偏斜数据。我也试过MAPJOIN和查询失败,因为TableA的庞大的数据量。还有其他的选择可以以更好的方式处理吗?

,我可以看到运行的长期任务是如下

reduce > copy task(attempt_1498868574233_185232_m_001336_0 succeeded at 8.94 MB/s) Aggregated copy rate(1121 of 2532 at 108.94 MB/s) 

正是它试图在这一步呢?

+0

在这里看到:https://stackoverflow.com/a/37414611/2700344 – leftjoin

+0

@leftjoin,无须手动变通。 Hive支持倾斜连接。 –

回答

0

设置hive.optimize.skewjointrue

hive.optimize.skewjoin
默认值:FALSE
加入:蜂巢0.6.0
是否启用歪斜连接优化。

您可能还需要调整hive.skewjoin.keyhive.skewjoin.mapjoin.map.taskshive.skewjoin.mapjoin.min.split

hive.skewjoin.key
默认值:100000
加入:蜂巢0.6.0
确定,如果我们得到一个斜键加入。如果我们看到多于 连接运算符中具有相同键的指定行数,我们认为 键是一个偏斜连接键。

hive.skewjoin.mapjoin.map.tasks
默认值:10000
加入:蜂巢0.6.0
确定在跟进地图 使用的地图任务的数量参加工作的歪斜加入。它应与 hive.skewjoin.mapjoin.min.split被用来进行细粒度控制。

hive.skewjoin.mapjoin.min.split
默认值:33554432
加入:蜂巢0.6.0
确定在最常用的地图任务的数量遵循 了图加入工作的通过指定最小分割大小来进行歪斜连接。 应当与hive.skewjoin.mapjoin.map.tasks一起使用,以 执行细粒度控制。

https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties