Hive Join卡在Map阶段

时间:2018-07-23 00:50:32

标签: hive hiveql

在Hive中,我有一个大表B(约3亿行)和一个相对较小的表A。我只是想做 SELECT A.*, B.* FROM A LEFT JOIN B ON A.a_id = B.b_id 但查询停留在地图的50%,并且无法继续进行。我也尝试在PySpark中执行相同的操作,但基本上得到了相同的结果。 a_idb_id都是字符串,分别是AB的唯一键。为了执行联接,我不必选择A.*B.*,而只需要选择我当前分析中绝对需要的列。即使现在可以完成此加入,但是任何人都可以请我更深入地了解我为什么会遇到这个问题吗?仅仅是表的大小对于工作者内存而言太大了吗?

1 个答案:

答案 0 :(得分:0)

由于您使用的是select *,因此将扫描所有表数据。同样,一个表的记录更少,因此没有分配适当的资源,因此由于资源的不可用而被卡住了。

启用映射联接和增加堆内存应有助于解决此问题。您可以通过在查询之前设置以下属性来启用这些功能。

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