Transaktionstabellen

Transaktionen mit ACID-Semantiken werden von Apache Hive-Metaspeicher in Dataproc Metastore unterstützt. Weitere Informationen finden Sie unter Hive-Transaktionen. Diese Transaktionen sind in Hive 3 standardmäßig aktiviert.

Konfigurationen

Sie müssen server- und clientseitige Konfigurationen festlegen, um die Transaktionsunterstützung zu aktivieren.

Serverseitige Konfigurationen

Die folgenden serverseitigen Konfigurationen werden standardmäßig während der Erstellung des Dienstes durch Dataproc Metastore festgelegt. Sie können diese Werte überschreiben, indem Sie unter Metastore-Konfigurationsüberschreibungen die Überschreibungen Schlüssel und Wert eingeben.

  • metastore.compactor.initiator.on: Gibt an, ob der Initiator und die Bereinigungsthreads im Dataproc Metastore-Dienst ausgeführt werden sollen.

    Auf true setzen, um den Initiator zu aktivieren.

  • metastore.compactor.worker.threads: Die Anzahl der Compactor-Worker-Threads, die im Dataproc-Metastore ausgeführt werden sollen.

    Legen Sie eine positive Zahl fest, um den Verdichter zu aktivieren. Das Festlegen einer höheren Zahl kann sich auf die Leistung des Dienstes auswirken, insbesondere auf Entwicklerebene. Wenn diese Zahl angepasst werden muss, empfehlen wir die Verwendung eines niedrigeren Werts, z. B. 8.

  • hive.metastore.event.db.notification.api.auth: Gibt an, ob der Dataproc Metastore-Dienst die APIs für Datenbankbenachrichtigungen autorisieren sollte.

    Legen Sie false fest. Wenn true festgelegt ist, haben nur die Superuser in den Proxy-Einstellungen die Berechtigung. Weitere Informationen zur Superuser-Proxy-Berechtigung finden Sie unter Sicherheit der Metastore Notification API.

Clientseitige Konfigurationen

Clientseitige Konfigurationen werden im Hive-Client wie unter Transaktionen validieren beschrieben festgelegt.

  • hive.support.concurrency: Legen Sie hierfür den Wert true fest, um Transaktionen zum Einfügen, Aktualisieren und Löschen zu unterstützen.

  • hive.exec.dynamic.partition.mode: Im strikten Modus müssen Sie mindestens eine statische Partition für den Fall angeben, dass alle Partitionen versehentlich überschrieben werden. Im nicht strikten Modus dürfen alle Partitionen dynamisch sein.

    Legen Sie hierfür den Wert nonstrict fest, um Transaktionen zum Einfügen, Aktualisieren und Löschen zu unterstützen.

  • hive.txn.manager: Legen Sie hierfür den Wert org.apache.hadoop.hive.ql.lockmgr.DbTxnManager fest.

Transaktionen validieren

Sie können Hive-Transaktionen mithilfe eines Dataproc-Clusters validieren, der einen Dataproc Metastore-Dienst auf Hive 3 verwendet.

Sie müssen den Dataproc-Cluster im selben Projekt wie der Dataproc Metastore-Dienst und mit Hive 3 erstellen. Die Dataproc 2.0-Images, 2.0-ubuntu18 und 2.0-debian10, unterstützen Hive 3 und Transaktionen. Mit dem Flag --image-version können Sie das 2.0-Image festlegen. Beispiel:

gcloud dataproc clusters create DATAPROC_CLUSTER_ID \
   --dataproc-metastore=projects/PROJECT_ID/locations/LOCATION/services/SERVICE \
   --region=REGION \
   --image-version 2.0-debian10

In der folgenden Anleitung wird gezeigt, wie Sie Transaktionen in Ihrem Dataproc Metastore-Dienst validieren, der von einem Dataproc-Cluster verwendet wird.

  1. Stellen Sie eine SSH-Verbindung zum Dataproc-Cluster her. Verwenden Sie dazu einen Browser oder die Befehlszeile.

  2. Führen Sie den Befehl hive aus, um den Hive-Client zu öffnen:

    $> hive
    
  3. Richten Sie die clientseitigen Konfigurationen ein, um die Hive-ACID-Unterstützung für Transaktionen in der Hive-Clientsitzung zu aktivieren:

    SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager;
    SET hive.support.concurrency=true;
    SET hive.exec.dynamic.partition.mode=nonstrict;
    
  4. Erstellen Sie eine Transaktionstabelle zum Einfügen und Aktualisieren von Daten. Folgendes ist ein Beispiel.

    1. Erstellen Sie eine Transaktionstabelle:

      create table student (id int, name string, age int)
      STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
      
    2. Prüfen Sie, ob die Tabelle transaktional ist:

      describe formatted <tableName>;
      

      Eine Liste der Tabelleneigenschaften wird ausgegeben. Die Transaktionsparameter einer Transaktionstabelle enthalten transactional=true.

    3. Fügen Sie Daten in die Tabelle ein:

      INSERT INTO student VALUES
      (1, 'Alice', 10),
      (2, 'Bob', 10),
      (3, 'Charlie', 10);
      
      1. Beobachten Sie den Deltaordner, der im Verzeichnis student des Warehouse-Verzeichnisses des Dienstes erstellt wurde. Wenn Sie mehrere Insert- oder Update-Anweisungen ausführen, werden mehrere Deltaordner erstellt.
    4. Sehen Sie sich an, welche Komprimierungen gerade ausgeführt werden und welchen Status sie haben. Der Hive-Metaspeicher führt alle fünf Minuten einen Thread namens Initiator aus, um Tabellen zu prüfen, die für die Verdichtung fällig sind.

      show compactions;
      
      1. So starten Sie eine manuelle Verdichtung (geringfügig oder groß):

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

Nächste Schritte