将事务表与 Dataproc Metastore 搭配使用

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 服务中的事务。

  1. 通过 SSH 连接到 Dataproc 集群。您可以通过浏览器或命令行执行此操作。

  2. 运行 hive 命令打开 Hive 客户端:

    $> hive
    
  3. 设置客户端配置,以便为 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;
    
  4. 创建要插入和更新的事务表。下面给出了一个示例。

    1. 创建事务表:

      create table student (id int, name string, age int)
      STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
      
    2. 检查表是否为事务表:

      describe formatted <tableName>;
      

      系统会输出表属性列表。事务表在其表参数中具有 transactional=true

    3. 将数据插入到表中:

      INSERT INTO student VALUES
      (1, 'Alice', 10),
      (2, 'Bob', 10),
      (3, 'Charlie', 10);
      
      1. 观察在服务的仓库目录中的 student 目录下创建的增量文件夹。如果运行多个插入或更新语句,则系统会创建多个增量文件夹。
    4. 查看正在运行的压缩操作及其状态。Hive Metastore 每 5 分钟便会运行一个称为“启动器”的线程,以检查需要压缩的表并请求压缩这些表。

      show compactions;
      
      1. 要启动手动压缩(minor 或 major),请运行以下命令:

          ALTER TABLE student COMPACT 'minor';
          ALTER TABLE student COMPACT 'major';
        

后续步骤