配置单元连接卡在Map阶段

quhf5bfb  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(221)

在 hive 里,我有一张大table B (约3亿行)和一个相对较小的表 A . 我只是想 SELECT A.*, B.* FROM A LEFT JOIN B ON A.a_id = B.b_id 但是这个查询停留在map的50%,没有进展。我也试着在pyspark做同样的手术,但结果基本相同。两者 a_id 以及 b_id 是字符串,它们是 A 以及 B 分别是。为了执行连接,而不是选择 A.* 以及 B.* ,我只能选择当前分析所需的列。即使现在这个连接可以完成,谁能给我一些更深入的见解,为什么我有这个问题?只是表的大小对于工作内存来说太大了吗?

xcitsw88

xcitsw881#

既然你用的是 select * ,正在扫描所有表数据。同样,一个表的记录较少,因此没有分配适当的资源,因此由于资源不可用而卡住。
启用map join和增加堆内存应该有助于解决这个问题。您可以通过在查询之前设置下面的属性来启用这些。

set mapreduce.map.java.opts=-Xmx7200m;
set hive.auto.convert.join = true;

相关问题