hadoop - `hive.exec.max.dynamic.partitions` 和 `hive.exec.max.dynamic.partitions.pernode` 的区别
问题描述
我正在寻找一些文档来了解 和 之间的hive.exec.max.dynamic.partitions
区别hive.exec.max.dynamic.partitions.pernode
。
我们什么时候需要设置这些参数,这些参数有什么用?
hive.exec.max.dynamic.partitions=500
hive.exec.max.dynamic.partitions.pernode=500
解决方案
Hive 的动态分区允许用户创建分区而无需提供分区值。分区值是在查询执行期间根据其对应的输入列值确定的。
创建的分区数将与不同的列值集成比例。这反过来又会给 HDFS 名称节点和 Hive Metastore 带来负担。
这些属性
hive.exec.max.dynamic.partitions
hive.exec.max.dynamic.partitions.pernode
旨在通过限制动态分区可以创建的分区数量来控制它们。
hive.exec.max.dynamic.partitions
: 一次动态分区插入总共允许创建的最大分区数。
动态分区只能通过INSERT
. INSERT
查询可能会触发仅 Map 作业或基于 DML 的 MapReduce 作业。
hive.exec.max.dynamic.partitions.pernode
: 每个参与插入作业的 mapper 或 reducer 节点允许创建的最大分区数。
设置500
为问题中提到的两个属性的值只会让一个映射器/减速器运行失败。
作为最佳实践,
hive.exec.max.dynamic.partitions ~= n * hive.exec.max.dynamic.partitions.pernode
其中n
是作业所需的映射器和(或)减速器的数量。
推荐阅读
- spring - 如何映射不相关的 JPA 实体
- python - 从 VBA 子调用 Shell 时不运行 python 脚本
- c++ - Opengl 纹理重复
- python - 有没有更好的方法在模块之间共享变量?
- javascript - 有没有办法将 webrtc 帧发送到 python 脚本?
- c# - 如何在运行时指定泛型类型?
- elasticsearch - ElasticSearch:查询字符串查询、术语查询和匹配查询之间的区别?
- ms-access - 报表内的 MS Access 子报表
- chart.js - 列过多时不渲染
- angular - 将 Reactive 转换为 typescript angular