蜂巢不尊重 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 个文件。
以下形式的配置单元插入语句:
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 个文件。