`hive.exec.max.dynamic.partitions` 和 `hive.exec.max.dynamic.partitions.pernode` 的区别

Bab*_*abu 3 hadoop hive

我要寻找一些文档来了解之间的差异hive.exec.max.dynamic.partitionshive.exec.max.dynamic.partitions.pernode

我们什么时候需要设置这些参数,这些参数有什么用?

hive.exec.max.dynamic.partitions=500
hive.exec.max.dynamic.partitions.pernode=500
Run Code Online (Sandbox Code Playgroud)

fra*_*ijo 5

Hive 的动态分区允许用户创建分区而无需提供分区值。分区值是在查询执行期间根据其对应的输入列值确定的。

创建的分区数将与不同的列值集成正比。这反过来会给 HDFS namenode 和 Hive Metastore 带来负担。

这些属性

hive.exec.max.dynamic.partitions
hive.exec.max.dynamic.partitions.pernode
Run Code Online (Sandbox Code Playgroud)

旨在通过限制动态分区可以创建的分区数量来控制它们。

hive.exec.max.dynamic.partitions: 一次动态分区插入总共允许创建的最大分区数。

动态分区只能通过INSERT. 该INSERT查询可能会触发一个 Map only 作业或一个基于 DML 的 MapReduce 作业。

hive.exec.max.dynamic.partitions.pernode:参与插入作业的每个mapper或reducer节点允许创建的最大分区数。

设置500为问题中提到的两个属性的值只会让一个映射器/减速器运行失败。

作为最佳实践,

hive.exec.max.dynamic.partitions ~= n * hive.exec.max.dynamic.partitions.pernode
Run Code Online (Sandbox Code Playgroud)

其中n是作业所需的映射器和(或)减速器的数量。