慢配置单元查询,为什么(左半连接)?

4uqofj5v  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(347)

我的配置单元查询挂起了,我不知道为什么(使用hadoop0.20.1,配置单元0.9)。
查询:

SELECT 
   a.field1 FROM table_1 a 
LEFT SEMI JOIN 
   (SELECT DISTINCT(usrId) FROM table_2 b 
       WHERE soemthing=true ORDER BY rand() limit 1000) random_user_ids 
WHERE a.usrId=random_user_ids.usrId

解释给我的回报:

STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-2 depends on stages: Stage-1
  Stage-3 depends on stages: Stage-2
  Stage-0 is a root stage

数据集
表内约有2亿个条目
表\u 1.usrid与表\u 1的关系应该是1:40左右,即在上面的查询中应该返回1000*40=40000
观察:
作业在最后阶段3挂起,挂起率为33%(reduce>sort),此时正在进行连接(连接结果约为40000)
除了速度慢之外,为什么reduce>排序是第三阶段的一部分?它应该只加入东西而不是订购任何东西
减速机的大小只有1(因为排序?),这几乎总是不好的,因为它不能缩放。
如果您需要更多的输入(例如,更多详细的解释信息,更多的集群信息),只需告诉。
谢谢!

gblwokeq

gblwokeq1#

联接条件应包含在on子句中,而不是where子句中。
语法示例:

SELECT a.key, a.val
FROM a LEFT SEMI JOIN b ON (a.key = b.key)

相关问题