按 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 个缩减器。
我 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 个缩减器。