搭配 Dataproc Metastore 使用交易資料表

Dataproc Metastore 中的 Apache Hive 中繼資料存放區支援 ACID 語意交易。詳情請參閱「Hive 交易」。Hive 3 預設會啟用這些交易。

設定

您必須設定伺服器和用戶端,才能啟用交易支援。

伺服器端設定

Dataproc Metastore 建立服務時,預設會設定下列伺服器端設定。如要覆寫這些設定,請在「Metastore config overrides」下方輸入「Key」和「Value」覆寫。

  • 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,則只有 Proxy 設定中的超級使用者擁有權限。如要進一步瞭解超級使用者 Proxy 權限,請參閱「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 服務相同的專案中建立 Dataproc 叢集,並使用 Hive 3。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 目錄下建立的 delta 資料夾。如果您執行多個插入或更新陳述式,系統會建立多個差異資料夾。
    4. 查看正在執行的壓縮作業及其狀態。Hive 中繼存放區每五分鐘會執行名為「啟動器」的執行緒,檢查是否有應壓縮的資料表,並要求壓縮這些資料表。

      show compactions;
      
      1. 如要啟動手動壓縮 (次要或主要),請按照下列步驟操作:

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

後續步驟