【发布时间】:2020-08-26 00:13:42
【问题描述】:
我有 2 张桌子:
db1.main_table (32 GB)
db2.lookup_table (2.5 KB)
查找表只有一个名为 id 的列,它也存在并且是 main_table 的主键。目标是只查看查找表中的值并从 main_table 中删除所有存在这些值的行。 我正在使用这个 hive 查询(在 TEZ 上),它突然开始在 Reduce 上创建交叉产品 阶段。
insert overwrite table
db1.main_table
select * from db1.main_table where nvl(id,'NV') not in (select nvl(id,'RV') from db2.lookup_table);
我正在使用 nvl,因为我的主表中存在我不想丢失的 id 列的空值。
我的查询在 Reducer 2(只有 3 个容器)上永远挂起。
我收到了有关 Reducer 2 的警告
信息:警告:随机加入 MERGEJOIN[34][tables = [$hdt$_0, 阶段“Reducer 2”中的 $hdt$_1]] 是一个叉积
我正在为这个查询获得以下计划,该计划在 TEZ 的 Reducer 2 顶点处挂起。
我们能否请您提出一种方法,让这个 Reducer 2 可以获取更多容器或解决这个运行时间很长的工作的方法。解决方案将不胜感激。
【问题讨论】:
标签: hadoop hive query-optimization hiveql apache-tez