我在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)
在这一步中究竟想做什么?
答案 0 :(得分:1)
将hive.optimize.skewjoin
设为true
<强> hive.optimize.skewjoin 强>
默认值:false
添加In:Hive 0.6.0
是否启用倾斜连接优化。
您可能还想调整hive.skewjoin.key
,hive.skewjoin.mapjoin.map.tasks
和hive.skewjoin.mapjoin.min.split
。
<强> hive.skewjoin.key 强>
默认值:100000
添加In:Hive 0.6.0
确定我们是否在连接中获得了一个倾斜键。如果我们看到的不仅仅是 我们认为,在连接运算符中具有相同键的指定行数 键作为倾斜连接键。<强> hive.skewjoin.mapjoin.map.tasks 强>
默认值:10000
添加In:Hive 0.6.0
确定后续地图中使用的地图任务的数量 为歪斜加入加入工作。它应该与。一起使用 hive.skewjoin.mapjoin.min.split执行细粒度控制。<强> hive.skewjoin.mapjoin.min.split 强>
默认值:33554432
添加In:Hive 0.6.0
确定最多使用的地图任务的数量 通过指定最小拆分大小来为倾斜连接启动映射连接作业。 它应该与hive.skewjoin.mapjoin.map.tasks一起使用 执行细粒度控制。https://cwiki.apache.org/confluence/display/Hive/Configuration+Properties