Transaktionstabellen

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

Konfigurationen

Wenn Sie die Transaktionsunterstützung aktivieren möchten, müssen Server- und clientseitige Konfigurationen festgelegt werden.

Serverseitige Konfigurationen

Die folgenden serverseitigen Konfigurationen werden bei der Erstellung des Dienstes von Dataproc Metastore standardmäßig festgelegt. Sie können sie überschreiben, indem Sie unter Metastore-Konfigurationsüberschreibungen die Überschreibungen für 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.

    Legen Sie true fest, um den Initiator zu aktivieren.

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

    Geben Sie eine positive Zahl ein, um den Compactor zu aktivieren. Wenn Sie einen höheren Wert festlegen, kann sich das auf die Leistung des Dienstes auswirken, insbesondere wenn Sie sich auf der Entwicklerebene befinden. Wenn diese Zahl erhöht werden muss, empfehlen wir die Verwendung eines niedrigeren Werts wie 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 festgelegt, wie unter Transaktionen validieren beschrieben.

  • 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 mit einem Dataproc-Cluster validieren, der einen Dataproc Metastore-Dienst auf Hive 3 verwendet.

Der Dataproc-Cluster muss im selben Projekt wie der Dataproc Metastore-Dienst und mit Hive 3 erstellt werden. Die Dataproc 2.0-Images, 2.0-ubuntu18 und 2.0–debian10 unterstützen Hive 3 und Transaktionen. Sie können das Flag --image-version verwenden, um das 2.0-Image festzulegen. 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 erläutert, 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. Das ist über einen Browser oder die Befehlszeile möglich.

  2. openffnen Sie den Hive-Client mit dem Befehl hive:

    $> 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. Eine Transaktionstabelle hat transactional=true in ihren Tabellenparametern.

    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 mit dem Namen Initiator aus, um zu überprüfen, ob Tabellen aufgrund einer Verdichtung und einer Verdichtung für diese Tabellen fällig sind.

      show compactions;
      
      1. So starten Sie eine manuelle Verdichtung (entweder klein oder groß):

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

Nächste Schritte