倾斜数据导致hive中长时间运行的查询

时间:2017-07-07 06:11:42

标签: performance hive

我在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)

在这一步中究竟想做什么?

1 个答案:

答案 0 :(得分:1)

hive.optimize.skewjoin设为true

  

<强> hive.optimize.skewjoin
  默认值:false
  添加In:Hive 0.6.0
  是否启用倾斜连接优化。

您可能还想调整hive.skewjoin.keyhive.skewjoin.mapjoin.map.taskshive.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