Dataproc Metastore 中的 Apache Hive Metastore 支持具有 ACID 语义的事务。如需了解详情,请参阅 Hive 事务。默认情况下,这些事务在 Hive 3 上处于启用状态。
配置
您必须设置服务器和客户端配置才能启用事务支持。
服务器端配置
默认情况下,在通过 Dataproc Metastore 创建服务期间,系统会设置以下服务器端配置。您可以通过在 Metastore 配置替换文件下输入键和值来替换这些内容。
metastore.compactor.initiator.on
- 是否在 Dataproc Metastore 服务上运行启动器和清理器线程。设为
true
以启用启动器。metastore.compactor.worker.threads
— 要在 Dataproc Metastore 上运行的压缩工作器线程数。设为正值以启用压缩器。将此值设置为较大的数字可能会影响服务的性能,尤其是在开发者层级上。如果此数字需要调节,我们建议使用较小的值,例如 8。
hive.metastore.event.db.notification.api.auth
— Dataproc Metastore 服务是否应针对数据库通知相关 API 进行授权。设置为
false
。如果设置为true
,则只有代理设置中的超级用户才具有权限。如需详细了解超级用户代理权限,请参阅 Metastore 通知 API 安全。
客户端配置
客户端配置在 Hive 客户端中进行设置,如验证事务中所述。
hive.support.concurrency
— 设置为true
以支持插入、更新和删除事务。hive.exec.dynamic.partition.mode
— 在严格模式下,您必须至少指定一个静态分区,以防所有分区被意外覆盖。在非严格模式下,所有分区都可以是动态的。设置为
nonstrict
以支持插入、更新和删除事务。hive.txn.manager
- 设置为org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
。
验证事务
您可以通过在 Hive 3 上使用 Dataproc Metastore 服务的 Dataproc 集群来验证 Hive 事务。
您必须在 Dataproc Metastore 服务所属的项目中使用 Hive 3 创建 Dataproc 集群。Dataproc 2.0 映像、2.0-ubuntu18 和 2.0-debian10 支持 Hive 3 和事务。您可以使用 --image-version
标志设置 2.0 映像。例如:
gcloud dataproc clusters create DATAPROC_CLUSTER_ID \
--dataproc-metastore=projects/PROJECT_ID/locations/LOCATION/services/SERVICE \
--region=REGION \
--image-version 2.0-debian10
以下说明介绍了如何验证 Dataproc 集群使用的 Dataproc Metastore 服务中的事务。
通过 SSH 连接到 Dataproc 集群。您可以通过浏览器或命令行执行此操作。
运行
hive
命令打开 Hive 客户端:$> hive
设置客户端配置,以便为 Hive 客户端会话中的事务启用 Hive ACID 支持:
SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; SET hive.support.concurrency=true; SET hive.exec.dynamic.partition.mode=nonstrict;
创建要插入和更新的事务表。下面给出了一个示例。
创建事务表:
create table student (id int, name string, age int) STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
检查表是否为事务表:
describe formatted <tableName>;
系统会输出表属性列表。事务表在其表参数中具有
transactional=true
。将数据插入到表中:
INSERT INTO student VALUES (1, 'Alice', 10), (2, 'Bob', 10), (3, 'Charlie', 10);
- 观察在服务的仓库目录中的
student
目录下创建的增量文件夹。如果运行多个插入或更新语句,则系统会创建多个增量文件夹。
- 观察在服务的仓库目录中的
查看正在运行的压缩操作及其状态。Hive Metastore 每 5 分钟便会运行一个称为“启动器”的线程,以检查需要压缩的表并请求压缩这些表。
show compactions;
要启动手动压缩(minor 或 major),请运行以下命令:
ALTER TABLE student COMPACT 'minor'; ALTER TABLE student COMPACT 'major';