按 HIVE 中的子句分发

Distributed by Clause in HIVE

我 table 有 100TB 的海量数据。

当我查询 table 时,我在特定列(比如 x)上使用了 distributed by 子句。

table 包含 200 个不同或唯一的 X 值。

所以当我在 X 上查询带有 distributed by 子句的 table 时,最大减速器应该是 200。但我看到它正在使用 MAX 减速器,即 999

让我举例说明

假设 emp_table 的描述与 3 列一样。

1.emp_name

2。 emp_ID

3.Group_ID

   and Group_ID has **200 distinct** values

现在我想查询table

select * 来自 emp_table 由 Group_ID;

分发

根据分布式子句,此查询应使用 200 个 Reducer。但我看到 999 个减速器得到利用。

我正在做部分优化。那么我怎样才能确保它应该使用 200 个减速器?

hive 的 reduce 数量取决于你输入的大小 file.But 如果 mapper 的输出只包含 200 groups.Then 我猜大部分 reduce 作业将什么都收不到。
如果你真的想控制减少数量。set mapred.reduce.tasks 会有所帮助。

Hive 中的 reducer 数量由两个属性决定。

  • hive.exec.reducers.bytes.per.reducer - 默认值为 1GB,这使得 hive 为每 1GB 输入 table 的大小创建一个减速器。

  • mapred.reduce.tasks - 取一个整数值,那么多的 reducer 将为这项工作做好准备。

distribute by 子句在决定 reducer 的数量上没有任何作用,它的所有工作是 distribute/partition 根据子句中给定的列从映射器到准备好的 reducer 的键值。

考虑将 mapred.reduce.tasks 设置为 200,分配方式将负责将键值以均匀的方式划分到 200 个缩减器。