Hive 中的行级事务

Posted

技术标签:

【中文标题】Hive 中的行级事务【英文标题】:Row Level Transactions in Hive 【发布时间】:2019-03-04 11:27:55 【问题描述】:

我是 HiveQL 的新手。当我创建一个表时,我开始知道我们需要保持事务的某些属性为真。然后我经历了那些是什么:

hive>set hive.support.concurrency = true;
hive>set hive.enforce.bucketing = true;
hive>set hive.exec.dynamic.partition.mode = nonstrict;
hive>set hive.txn.manager = org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
hive>set hive.compactor.initiator.on = true;
hive>set hive.compactor.worker.threads = a positive number on at least one instance of the Thrift metastore service;

Concurrency,bucketing,Dynamic.partition.mode = 'nonstrict' 到底是什么?

我一直在尝试了解这些东西,但我正在获取有关锁定机制和 ZooKeeper 以及内存概念的信息。

由于我对这个领域完全陌生,所以我无法正确了解这个属性。

任何人都可以对此有所了解吗?

【问题讨论】:

您应该添加您创建表格的方式以及为什么您认为这些必须是正确的...除此之外,您可以在这里找到所有配置cwiki.apache.org/confluence/display/Hive/…您有任何具体问题吗? 是的,但我想知道所有属性的真假目的 【参考方案1】:

来自 Hive 文档

hive.support.concurrency

Hive 是否支持并发。 ZooKeeper 实例必须是 为默认 Hive 锁管理器启动并运行以支持读写 锁。

设置为 true 以支持 INSERT ... VALUES、UPDATE 和 DELETE 事务(Hive 0.14.0 及更高版本)。如需完整列表 开启 Hive 事务所需的参数

 hive.enforce.bucketing

是否强制执行分桶。如果为真,则在插入 表,分桶是强制的。

hive.exec.dynamic.partition.mode

在严格模式下,用户必须至少指定一个静态分区 万一用户不小心覆盖了所有分区。在非严格 mode 所有分区都允许是动态的。

hive.txn.manager

将此设置为 org.apache.hadoop.hive.ql.lockmgr.DbTxnManager 作为 打开 Hive 事务。默认的 DummyTxnManager 复制 Hive-0.13 之前的行为,不提供任何事务。

hive.compactor.initiator.on

是否在此元存储上运行启动器和清理器线程 实例。在 Thrift 元存储的一个实例上将此设置为 true 服务作为打开 Hive 事务的一部分。完整列表 打开事务所需的参数,请参阅 hive.txn.manager.

仅在一项元存储服务上启用此功能至关重要 实例(尚未强制执行)。

hive.compactor.worker.threads

在此 Metastore 实例上运行多少个压缩器工作线程。 在 Thrift 的一个或多个实例上将此设置为正数 Metastore 服务作为打开 Hive 事务的一部分。为一个 开启交易所需参数的完整列表,请参阅 hive.txn.manager.

工作线程产生 MapReduce 作业来执行压缩。他们不做 压实本身。增加工作线程的数量 将减少压缩表或分区所需的时间 一旦他们确定需要压实。也将增加 随着更多 MapReduce 作业将在 Hadoop 集群上进行后台负载 在后台运行。

【讨论】:

以上是关于Hive 中的行级事务的主要内容,如果未能解决你的问题,请参考以下文章

[数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁

POSTGRESQL中的行级锁及ODOO中的应用

让Hive支持行级insertupdatedelete

[数据库事务与锁]详解六: MySQL中的共享锁与排他锁

Hive支持行级updatedelete时遇到的问题

[数据库事务与锁]详解六: MySQL中的共享锁与排他锁