蜂巢不尊重 mapreduce.job.reduces

Hive not respecting mapreduce.job.reduces

以下形式的配置单元插入语句:

 insert into my_table select * from my_other_table;

正在使用一个减速器 - 即使在执行以下操作之前:

 set mapreduce.job.reduces=80;

有没有办法强制 hive 使用更多的 reducer?没有明确的理由说明为什么这个特定的查询会执行单个 reducer - 假设末尾没有 ORDER BY 子句。

顺便说一句,源表和目标表都是

  stored as parquet

SELECT * FROM table; 在 Hive 中不使用任何 reducer - 它是一个 map-only 作业。

强制 Hive 在 SELECT * 中使用缩减器的一种方法是 GROUP BY 所有字段,例如:

SELECT field1, field2, field3 FROM table GROUP BY field1, field2, field3;

不过,请注意,这将删除重复的记录。

在您提到的插入查询中,配置单元将尝试将所有数据写入单个文件。因为它只是一个 select * 语句。因此 1 个减速器。

但是如果你使用分桶。 hive 将使用与您的存储桶相同数量的减速器。

如果您有 128 个桶,Hive 将触发 128 个减速器作业,最终将创建 128 个文件。