【发布时间】:2017-11-27 07:57:59
【问题描述】:
在 hadoop 中加入 3 个表时遇到问题,其中最左边的表有 10M 条记录,每个右边的表有 1M 条记录。最右边的表与父表左连接。
SELECT distinct Table1.cid,Table2.gdtyp,Table3.ager,Table3.edcd FROM (SELECT
distinct(cid) FROM Table1 WHERE Table1.orgcd='T002' AND
(Table1.cacttrdt>=19980101 AND Table1.cacttrdt<=20171120) limit 2) Table1
LEFT JOIN Table2 Table2 ON (Table2.cid=Table1.cid) LEFT JOIN Table3 Table3
ON (Table3.cid=Table1.cid)
上述查询在 mapreduce 期间卡住了。 已将自动转换连接设置为 false。
【问题讨论】:
-
它是否给出任何错误或异常??
-
不,它没有给出任何错误,查询卡在一个阶段。有4个阶段,它总是卡在第三阶段
-
您是否在作业运行时检查过作业状态?等待它返回任何错误。否则应用压缩技术、矢量化、mapjoin(如果可以使用)然后运行查询。
-
是的,检查日志中没有错误,奇怪的是,从 hive CLI 执行相同的查询,但从直线或外部应用程序执行时卡住
-
从记录有限的主表创建阶段表并在阶段表上运行相同的查询。如果查询成功运行,那么至少我们可以断定存在内存问题并使用其他一些方法。 . 如果查询不会被执行,那么肯定有其他问题。