2

下面是我尝试在 Hive 上运行的查询,执行引擎为 tez。

SELECT A.CITY, A.NAME, B.PRICE
  ,(ROW_NUMBER() OVER (PARTITION BY A.NAME ORDER BY B.PRICE) ) AS RNUM
  FROM TABLE1 A
  LEFT JOIN TABLE2 B 
   ON A.NAME = B.NAME 
   WHERE ( A.COLUMN2 >= B.COLUMN3 AND A.COLUMN2 < B.COLUMN4)
GROUP BY A.CITY, A.NAME, B.PRICE;
  • 当我在 Hive 中对我的数据运行上面的查询时,它会持续运行几个小时而没有任何结果,但在语法上上面的查询是正确的。
  • TABLEA 和 TABLEB 都有数百万条记录。

我尝试更改数据格式、增加容器大小、更改减速器数量和更改堆大小。无论我更改什么参数,查询都会被卡住。

在我的进一步调查中,我注意到 where 条件和窗口函数导致查询无限运行。

这是我的问题:

  • 使查询在海量数据上端到端运行的变化是什么?

谢谢你的帮助

4

1 回答 1

0

我猜这不是由内存分配或减速器计数引起的。可能是由数据倾斜引起的。也从这点分析。此链接将有所帮助: https ://cwiki.apache.org/confluence/display/Hive/Skewed+Join+Optimization

下面的链接提供了有关倾斜表和列表分桶的见解。不要错过阅读。

https://cwiki.apache.org/confluence/display/Hive/ListBucketing

谢谢!

于 2016-07-01T14:55:54.417 回答