搭配 Dataproc Metastore 使用交易資料表

Dataproc Metastore 中的 Apache Hive 中繼資料可支援具有 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,則只有 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 服務相同的專案中,使用 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 目錄下方建立的 delta 資料夾。如果執行多個插入或更新陳述式,系統會建立多個差異資料夾。
    4. 查看正在執行的壓縮作業和其狀態。Hive 中繼存放區每五分鐘執行一個名為啟動子的執行緒,檢查需要壓縮的資料表,並要求壓縮這些資料表。

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

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

後續步驟