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 中的行级事务的主要内容,如果未能解决你的问题,请参考以下文章