Transaktionen mit ACID-Semantik werden von Apache Hive-Metastores 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 serverseitige und clientseitige Konfigurationen festlegen, um die Transaktionsunterstützung zu aktivieren.
Serverseitige Konfigurationen
Die folgenden serverseitigen Konfigurationen werden standardmäßig bei der Erstellung des Dienstes durch Dataproc Metastore festgelegt. Sie können diese überschreiben, indem Sie unter Metastore config overrides (Überschreibungen der Metastore-Konfiguration) Überschreibungen für Key (Schlüssel) und Value (Wert) eingeben.
metastore.compactor.initiator.on
: Gibt an, ob der Initiator und die Bereinigungsthreads im Dataproc Metastore-Dienst ausgeführt werden sollen.Setzen Sie den Wert auf
true
, 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 Compactor zu aktivieren. Wenn Sie hier eine höhere Zahl festlegen, kann sich das auf die Leistung des Dienstes auswirken, insbesondere wenn Sie die Entwicklerstufe nutzen. Wenn diese Zahl angepasst werden muss, empfehlen wir einen niedrigeren Wert, 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. Wenntrue
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 Werttrue
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 Wertorg.apache.hadoop.hive.ql.lockmgr.DbTxnManager
fest.
Transaktionen prüfen
Sie können Hive-Transaktionen mit einem Dataproc-Cluster validieren, der einen Dataproc Metastore-Dienst unter Hive 3 verwendet.
Sie müssen den Dataproc-Cluster im selben Projekt wie den Dataproc Metastore-Dienst und mit Hive 3 erstellen. Die Dataproc-Images 2.0, 2.0-ubuntu18 und 2.0-debian10 unterstützen Hive 3 und Transaktionen. Mit dem Flag --image-version
können Sie das 2.0-Bild 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.
Stellen Sie eine SSH-Verbindung zum Dataproc-Cluster her. Sie können dazu einen Browser oder die Befehlszeile verwenden.
Führen Sie den Befehl
hive
aus, um den Hive-Client zu öffnen:$> hive
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;
Erstellen Sie eine Transaktionstabelle zum Einfügen und Aktualisieren von Daten. Folgendes ist ein Beispiel.
Transaktionstabelle erstellen:
create table student (id int, name string, age int) STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
Prüfen Sie, ob die Tabelle transaktional ist.
describe formatted <tableName>;
Eine Liste der Tabelleneigenschaften wird ausgegeben. Eine transaktionale Tabelle hat
transactional=true
in ihren Tabellenparametern.Fügen Sie Daten in die Tabelle ein:
INSERT INTO student VALUES (1, 'Alice', 10), (2, 'Bob', 10), (3, 'Charlie', 10);
- 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.
- Beobachten Sie den Deltaordner, der im Verzeichnis
Sehen Sie sich an, welche Komprimierungen gerade ausgeführt werden und welchen Status sie haben. Hive-Metastore führt alle fünf Minuten einen Thread mit dem Namen Initiator aus, um nach Tabellen zu suchen, die verdichtet werden müssen, und fordert die Verdichtung für diese Tabellen an.
show compactions;
So legen Sie eine manuelle Komprimierung fest: entweder klein oder groß.
ALTER TABLE student COMPACT 'minor'; ALTER TABLE student COMPACT 'major';