Performance 数据倾斜导致配置单元中的查询长时间运行

Performance 数据倾斜导致配置单元中的查询长时间运行,performance,hive,Performance,Hive,我正在运行一个配置单元查询,如tableA.col1=tableB.col1和tableA.col2=tableB.col2上的tableA left join tableB。tableA拥有18亿数据,tableB拥有3100万条记录。现在,我的联接中的最后一个减缩器还没有完成,并且运行了很长时间 这可能是因为数据倾斜。我确实尝试了MAPJOIN,但由于tableA的数据量很大,因此查询失败。有没有其他更好的解决方法 我可以看到长期运行的任务如下所示 reduce > copy task

我正在运行一个配置单元查询,如tableA.col1=tableB.col1和tableA.col2=tableB.col2上的tableA left join 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)

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

设置
hive.optimize.skewjoin
true

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

您可能还需要调整
hive.skewjoin.key
hive.skewjoin.mapjoin.map.tasks
hive.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
确定下列任务中最多使用的映射任务数 通过指定最小拆分大小,向上映射倾斜联接的联接作业。 它应与hive.skewjoin.mapjoin.map.tasks一起使用,以 执行细粒度控制


请参见此处:@leftjoin,无需手动操作。配置单元支持倾斜连接。