MSCKOptimierung - Amazon EMR

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

MSCKOptimierung

Hive speichert eine Liste von Partitionen für jede Tabelle in seinem Metastore. Wenn Partitionen jedoch direkt zum Dateisystem hinzugefügt oder daraus entfernt werden, bemerkt der Hive-Metastore diese Änderungen nicht. Der MSCKBefehl aktualisiert die Partitionsmetadaten im Hive-Metastore für Partitionen, die direkt zum Dateisystem hinzugefügt oder daraus entfernt wurden. Die Syntax für den Befehl lautet:

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

Hive implementiert diesen Befehl wie folgt:

  1. Hive ruft alle Partitionen für die Tabelle aus dem Metastore ab. Aus der Liste der Partitionspfade, die im Dateisystem nicht existieren, wird dann eine Liste von Partitionen erstellt, die aus dem Metastore gelöscht werden sollen.

  2. Hive sammelt die im Dateisystem vorhandenen Partitionspfade, vergleicht sie mit der Liste der Partitionen aus dem Metastore und generiert eine Liste von Partitionen, die dem Metastore hinzugefügt werden müssen.

  3. Hive aktualisiert den Metastore im Modus ADD, DROP oder SYNC.

Anmerkung

Wenn der Metastore viele Partitionen enthält, dauert die Ausführung des Schritts zur Überprüfung, ob eine Partition nicht im Dateisystem existiert, sehr lange, da der exists API Aufruf des Dateisystems für jede Partition erfolgen muss.

In Amazon EMR 6.5.0 führte Hive eine Flagge namens ein. hive.emr.optimize.msck.fs.check Wenn dieses Flag aktiviert ist, veranlasst es Hive, anhand der Liste der Partitionspfade aus dem Dateisystem, die in Schritt 2 oben generiert wurde, nach dem Vorhandensein einer Partition zu suchen, anstatt Dateisystemaufrufe durchzuführen. API In Amazon EMR 6.8.0 hat Hive diese Optimierung standardmäßig aktiviert, sodass die Markierung nicht mehr gesetzt werden muss. hive.emr.optimize.msck.fs.check