【问题标题】:skew data causing long running query in hive导致 hive 中长时间运行查询的倾斜数据
【发布时间】:2017-07-07 16:29:30
【问题描述】:

我在 tableA.col1=tableB.col1 和 tableA.col2=tableB.col2 上运行类似 tableA 左连接 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)

在这一步中它到底想做什么?

【问题讨论】:

标签: performance hive


【解决方案1】:

hive.optimize.skewjoin 设置为true

hive.optimize.skewjoin
默认值:假
添加于:Hive 0.6.0
是否启用倾斜连接优化。

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

hive.skewjoin.key
默认值:100000
添加于:Hive 0.6.0
确定我们是否在 join 中得到一个倾斜键。如果我们看到的不仅仅是 在连接运算符中指定具有相同键的行数,我们认为 键作为倾斜连接键。

hive.skewjoin.mapjoin.map.tasks
默认值:10000
添加于:Hive 0.6.0
确定后续地图中使用的地图任务数量 加入倾斜连接的作业。它应该与 hive.skewjoin.mapjoin.min.split 执行细粒度控制。

hive.skewjoin.mapjoin.min.split
默认值:33554432
添加于:Hive 0.6.0
确定下面最多使用的map task个数 通过指定最小拆分大小来为倾斜连接向上映射连接作业。 它应该与 hive.skewjoin.mapjoin.map.tasks 一起使用以 执行细粒度控制。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 2014-07-07
    • 2019-03-01
    • 2017-11-30
    • 2014-09-09
    相关资源
    最近更新 更多