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.
Vollständiger Tabellenzugriff auf Lake Formation für Amazon EMR auf EC2
Mit den Amazon EMR-Versionen 7.8.0 und höher können Sie AWS Lake Formation mit Glue Data Catalog nutzen, wo die Job-Runtime-Rolle über vollständige Tabellenberechtigungen verfügt, ohne die Einschränkungen einer detaillierten Zugriffskontrolle. Mit dieser Funktion können Sie von Amazon EMR auf EC2 Spark-Batch- und interaktiven Aufträgen aus Lese- und Schreibvorgängen in Tabellen lesen und schreiben, die durch Lake Formation geschützt sind. In den folgenden Abschnitten erfahren Sie mehr über Lake Formation und wie Sie es mit Amazon EMR auf EC2 verwenden können.
Verwendung von Lake Formation mit vollem Tabellenzugriff
In EC2 Spark-Jobs oder interaktiven Sitzungen, bei denen die Laufzeitrolle des Jobs vollen Tabellenzugriff hat, können Sie von Amazon EMR aus auf AWS Lake Formation-geschützte Glue Data-Katalogtabellen zugreifen. Sie müssen AWS Lake Formation in der Amazon EMR on EC2-Anwendung nicht aktivieren. Wenn ein Spark-Job für Full Table Access (FTA) konfiguriert ist, werden AWS Lake Formation-Anmeldeinformationen für read/write S3-Daten für in AWS Lake Formation registrierte Tabellen verwendet, während die Anmeldeinformationen für die Runtime-Rolle des Jobs für read/write Tabellen verwendet werden, die nicht bei AWS Lake Formation registriert sind.
Wichtig
Aktivieren Sie AWS Lake Formation nicht für eine feinkörnige Zugriffskontrolle. Ein Job kann Full Table Access (FTA) und Fine-Grained Access Control (FGAC) nicht gleichzeitig auf demselben EMR-Cluster oder derselben EMR-Applikation ausführen.
Schritt 1: Aktivieren Sie den vollständigen Tabellenzugriff in Lake Formation
Um den FTA-Modus (Full Table Access) zu verwenden, müssen Sie Abfrage-Engines von Drittanbietern den Zugriff auf Daten ermöglichen, ohne dass die IAM-Sitzungs-Tag-Validierung in AWS Lake Formation erforderlich ist. Folgen Sie zur Aktivierung den Schritten unter Application integration for full table access.
Anmerkung
Beim Zugriff auf kontenübergreifende Tabellen muss der Zugriff auf vollständige Tabellen sowohl in Produzenten- als auch in Verbraucherkonten aktiviert sein. Auf die gleiche Weise muss diese Einstellung beim Zugriff auf regionsübergreifende Tabellen sowohl in Produzenten- als auch in Verbraucherregionen aktiviert werden.
Schritt 2: Einrichten der IAM-Berechtigungen für die Auftrag-Laufzeitrolle
Für den Lese- oder Schreibzugriff auf die zugrunde liegenden Daten benötigt eine Job-Runtime-Rolle zusätzlich zu den Lake Formation-Berechtigungen die lakeformation:GetDataAccess IAM-Berechtigung. Mit dieser Berechtigung gewährt Lake Formation die Anforderung von temporären Anmeldeinformationen für den Zugriff auf die Daten.
Im Folgenden finden Sie ein Beispiel für eine Richtlinie zur Bereitstellung von IAM-Berechtigungen für den Zugriff auf ein Skript in Amazon S3, für das Hochladen von Protokollen auf S3, für AWS Glue-API-Berechtigungen und für den Zugriff auf Lake Formation.
Schritt 2.1 Konfigurieren Sie die Lake Formation-Berechtigungen
Spark-Jobs, die Daten aus S3 lesen, benötigen die Lake Formation SELECT-Erlaubnis.
Spark-Jobs, für die write/delete Daten in S3 die Erlaubnis Lake Formation ALL (SUPER) benötigen.
Spark-Jobs, die mit dem Glue Data-Katalog interagieren, benötigen je nach Bedarf die Berechtigungen DESCRIBE, ALTER, DROP.
Weitere Informationen finden Sie unter Erteilen von Berechtigungen für Datenkatalogressourcen.
Schritt 3: Initialisieren Sie eine Spark-Sitzung für den vollständigen Tabellenzugriff mithilfe von Lake Formation
Voraussetzungen
AWS Glue Data Catalog muss als Metastore konfiguriert werden, um auf Lake Formation-Tabellen zugreifen zu können.
Legen Sie die folgenden Einstellungen fest, um den Glue-Katalog als Metastore zu konfigurieren:
--conf spark.sql.catalogImplementation=hive --conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
Weitere Informationen zur Aktivierung von Data Catalog für Amazon EMR auf EC2 finden Sie unter Metastore-Konfiguration für Amazon EMR auf EC2.
Um auf Tabellen zuzugreifen, die bei AWS Lake Formation registriert sind, müssen die folgenden Konfigurationen während der Spark-Initialisierung festgelegt werden, um Spark für die Verwendung der Lake Formation-Anmeldeinformationen zu konfigurieren. AWS
-
spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: Konfigurieren Sie EMR Filesystem (EMRFS) oder EMR S3A so, dass Lake Formation S3-Anmeldeinformationen für bei AWS Lake Formation registrierte Tabellen verwendet werden. Wenn die Tabelle nicht registriert ist, verwenden Sie die Anmeldeinformationen für die Auftrag-Laufzeitrolle. -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueundspark.hadoop.fs.s3.folderObject.autoAction.disabled=true: Konfigurieren Sie EMRFS so, dass beim Erstellen von S3-Ordnern das application/x Inhaltstyp-Header-Verzeichnis anstelle des Suffixes $folder$ verwendet wird. Dies ist beim Lesen von Lake Formation-Tabellen erforderlich, da die Lake Formation-Anmeldeinformationen das Lesen von Tabellenordnern mit dem Suffix $folder$ nicht zulassen. -
spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true: Konfigurieren Sie Spark so, dass die Überprüfung, ob der Tabellenspeicherort leer ist, vor der Erstellung übersprungen wird. Dies ist für bei Lake Formation registrierte Tabellen erforderlich, da die Lake Formation-Anmeldeinformationen zur Überprüfung des leeren Speicherorts erst nach der Erstellung der Glue Data Catalog-Tabelle verfügbar sind. Ohne diese Konfiguration validieren die Anmeldeinformationen für die Auftrag-Laufzeitrolle den Speicherort der leeren Tabelle. -
spark.sql.catalog.createDirectoryAfterTable.enabled=true: Konfigurieren Sie Spark so, dass der Amazon-S3-Ordner nach der Tabellenerstellung im Hive-Metastore erstellt wird. Dies ist für in Lake Formation registrierte Tabellen erforderlich, da die Lake Formation-Anmeldeinformationen zum Erstellen des S3-Ordners erst nach der Erstellung der Glue Data Catalog-Tabelle verfügbar sind. -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: Konfigurieren Sie Spark so, dass der S3-Ordner vor dem Löschen der Tabelle im Hive-Metastore gelöscht wird. Dies ist für in Lake Formation registrierte Tabellen erforderlich, da Lake Formation-Anmeldeinformationen zum Löschen des S3-Ordners nach dem Löschen der Tabelle aus dem Glue-Datenkatalog nicht verfügbar sind. -
spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true: Konfigurieren Sie den Iceberg-Katalog so, dass die AWS Lake Formation S3-Anmeldeinformationen für bei Lake Formation registrierte Tabellen verwendet werden. Wenn die Tabelle nicht registriert ist, verwenden Sie die Standardanmeldeinformationen für die Umgebung.
Konfigurieren Sie den vollständigen Tabellenzugriffsmodus in SageMaker Unified Studio
Verwenden Sie den Kompatibilitätsberechtigungsmodus, um von interaktiven Spark-Sitzungen in JupyterLab Notebooks aus auf bei Lake Formation registrierte Tabellen zuzugreifen. Verwenden Sie den magischen Befehl %%configure, um Ihre Spark-Konfiguration einzurichten. Wählen Sie die Konfiguration basierend auf Ihrem Tabellentyp aus:
Ersetzen Sie die Platzhalter:
S3_DATA_LOCATION: Ihr S3-Bucket-PfadREGION: AWS Region (z. B. us-east-1)ACCOUNT_ID: Deine Konto-ID AWS
Anmerkung
Sie müssen diese Konfigurationen festlegen, bevor Sie Spark-Operationen in Ihrem Notebook ausführen.
Unterstützte Vorgänge
Diese Operationen verwenden AWS Lake Formation-Anmeldeinformationen, um auf die Tabellendaten zuzugreifen.
CREATE TABLE
ALTER TABLE
INSERT INTO
INSERT OVERWRITE
UPDATE
MERGE INTO
DELETE FROM
ANALYZE TABLE
REPAIR TABLE
DROP TABLE
Spark-Datenquellenabfragen
Spark-Datenquellenschreibvorgänge
Anmerkung
Operationen, die oben nicht aufgeführt sind, verwenden weiterhin IAM-Berechtigungen für den Zugriff auf Tabellendaten.
Überlegungen
Wenn eine Hive-Tabelle mit einem Job erstellt wird, für den der vollständige Tabellenzugriff nicht aktiviert ist, und keine Datensätze eingefügt werden, schlagen nachfolgende Lese- oder Schreibvorgänge aus einem Job mit vollem Tabellenzugriff fehl. Dies liegt daran, dass EMR Spark ohne vollständigen Tabellenzugriff das
$folder$Suffix zum Namen des Tabellenordners hinzufügt. Um dieses Problem zu lösen, haben Sie folgende Möglichkeiten:Fügen Sie mindestens eine Zeile aus einem Auftrag in die Tabelle ein, für den FTA nicht aktiviert ist.
Konfigurieren Sie den Job, für den FTA nicht aktiviert ist, so, dass in S3 kein
$folder$Suffix im Ordnernamen verwendet wird. Dies kann durch Einstellen der Spark-Konfigurationspark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueerreicht werden.Erstellen Sie
s3://path/to/table/table_namemithilfe der S3-Konsole oder AWS der S3-CLI einen AWS S3-Ordner am Speicherort der Tabelle.
Voller Tabellenzugriff wird mit dem EMR-Dateisystem (EMRFS) ab Amazon EMR-Version 7.8.0 und mit dem S3A-Dateisystem ab Amazon EMR-Version 7.10.0 unterstützt.
Der vollständige Tabellenzugriff wird für Hive-, Iceberg-, Delta- und Hudi-Tabellen unterstützt.
Überlegungen zum Hudi FTA Write Support:
Hudi FTA Writes müssen HoodieCredentialedHadoopStorage für den Verkauf von Zugangsdaten während der Auftragsausführung verwendet werden. Stellen Sie die folgende Konfiguration ein, wenn Sie Hudi-Jobs ausführen:
hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorageFull Table Access (FTA) -Schreibunterstützung für Hudi ist ab Amazon EMR-Version 7.12 verfügbar.
Die Hudi FTA-Schreibunterstützung funktioniert derzeit nur mit den Standard-Hudi-Konfigurationen. Benutzerdefinierte oder nicht standardmäßige Hudi-Einstellungen werden möglicherweise nicht vollständig unterstützt und können zu unerwartetem Verhalten führen.
Clustering für Hudi-Tabellen Merge-On-Read (MOR) wird derzeit im FTA-Schreibmodus nicht unterstützt.
Jobs, die Tabellen mit Lake Formation Fine-Grained Access Control (FGAC) -Regeln oder Glue Data Catalog Views referenzieren, schlagen fehl. Um eine Tabelle mit FGAC-Regeln oder einer Glue-Datenkatalogansicht abzufragen, müssen Sie den FGAC-Modus verwenden. Sie können den FGAC-Modus aktivieren, indem Sie die in der AWS Dokumentation beschriebenen Schritte ausführen: Verwenden von Amazon EMR auf EC2 mit Lake Formation für eine feinkörnige Zugriffskontrolle. AWS
Der vollständige Tabellenzugriff unterstützt Spark Streaming nicht.
Beim Schreiben von Spark DataFrame in eine Lake Formation-Tabelle wird nur der APPEND-Modus für Hive- und Iceberg-Tabellen unterstützt:
df.write.mode("append").saveAsTable(table_name)Für das Erstellen externer Tabellen sind IAM-Berechtigungen erforderlich.
Da Lake Formation Anmeldeinformationen innerhalb eines Spark-Jobs vorübergehend zwischenspeichert, spiegelt ein Spark-Batch-Job oder eine interaktive Sitzung, die gerade ausgeführt wird, möglicherweise keine Berechtigungsänderungen wider.
Sie müssen eine benutzerdefinierte Rolle und keine dienstgebundene Rolle verwenden: Lake Formation-Anforderungen für Rollen.
Hudi FTA Write Support — Unterstützte Operationen
Die folgende Tabelle zeigt die unterstützten Schreibvorgänge für Hudi- Copy-On-Write (COW) - und Merge-On-Read (MOR) -Tabellen im Modus „Volltabellenzugriff“:
| Tabellentyp | Operation | Befehl SQL Write | Status |
|---|---|---|---|
| KUH | INSERT | INSERT INTO TABLE | Unterstützt |
| KUH | INSERT | IN TABELLE EINFÜGEN - PARTITION (statisch, dynamisch) | Unterstützt |
| KUH | INSERT | INSERT OVERWRITE | Unterstützt |
| KUH | INSERT | INSERT OVERWRITE - PARTITION (statisch, dynamisch) | Unterstützt |
| UPDATE | UPDATE | UPDATE TABLE | Unterstützt |
| KUH | UPDATE | TABELLE AKTUALISIEREN — Partition ändern | Nicht unterstützt |
| DELETE | DELETE | DELETE FROM TABLE | Unterstützt |
| ALTER | ALTER | TABELLE ÄNDERN — UMBENENNEN IN | Nicht unterstützt |
| KUH | ALTER | TABELLE ÄNDERN — TABELLEN-EIGENSCHAFTEN FESTLEGEN | Unterstützt |
| KUH | ALTER | TABELLE ÄNDERN — TABELLEN-EIGENSCHAFTEN ZURÜCKSETZEN | Unterstützt |
| KUH | ALTER | TABELLE ÄNDERN — SPALTE ÄNDERN | Unterstützt |
| KUH | ALTER | TABELLE ÄNDERN — SPALTEN HINZUFÜGEN | Unterstützt |
| KUH | ALTER | TABELLE ÄNDERN — PARTITION HINZUFÜGEN | Unterstützt |
| KUH | ALTER | TABELLE ÄNDERN — PARTITION LÖSCHEN | Unterstützt |
| KUH | ALTER | TABELLE ÄNDERN — PARTITIONEN WIEDERHERSTELLEN | Unterstützt |
| KUH | ALTER | REPARIEREN SIE PARTITIONEN ZUR TABELLENSYNCHRONISIERUNG | Unterstützt |
| DROP | DROP | DROP TABLE | Unterstützt |
| KUH | DROP | TABELLE LÖSCHEN — LÖSCHEN | Unterstützt |
| CREATE | CREATE | TABELLE ERSTELLEN — VERWALTET | Unterstützt |
| KUH | CREATE | TABELLE ERSTELLEN - PARTITION NACH | Unterstützt |
| KUH | CREATE | TABELLE ERSTELLEN, FALLS SIE NICHT EXISTIERT | Unterstützt |
| KUH | CREATE | CREATE TABLE LIKE | Unterstützt |
| KUH | CREATE | CREATE TABLE AS SELECT | Unterstützt |
| CREATE | CREATE | TABELLE MIT STANDORT ERSTELLEN - Externe Tabelle | Nicht unterstützt |
| DATENRAHMEN (EINFÜGEN) | DATENRAHMEN (EINFÜGEN) | speichern AsTable.Overwrite | Unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | speichern AsTable.Append | Nicht unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | speichern AsTable.Ignore | Unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | speichern AsTable.ErrorIfExists | Unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | speichern AsTable - Externe Tabelle (Pfad) | Nicht unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | speichern (Pfad) - DF v1 | Nicht unterstützt |
| MEHR | INSERT | INSERT INTO TABLE | Unterstützt |
| MEHR | INSERT | IN TABELLE EINFÜGEN - PARTITION (statisch, dynamisch) | Unterstützt |
| MEHR | INSERT | INSERT OVERWRITE | Unterstützt |
| MEHR | INSERT | INSERT OVERWRITE - PARTITION (statisch, dynamisch) | Unterstützt |
| UPDATE | UPDATE | UPDATE TABLE | Unterstützt |
| MEHR | UPDATE | TABELLE AKTUALISIEREN - Partition ändern | Nicht unterstützt |
| DELETE | DELETE | DELETE FROM TABLE | Unterstützt |
| ALTER | ALTER | TABELLE ÄNDERN — UMBENENNEN IN | Nicht unterstützt |
| MEHR | ALTER | TABELLE ÄNDERN — TABELLEN-EIGENSCHAFTEN FESTLEGEN | Unterstützt |
| MEHR | ALTER | TABELLE ÄNDERN — TABELLEN-EIGENSCHAFTEN ZURÜCKSETZEN | Unterstützt |
| MEHR | ALTER | TABELLE ÄNDERN - SPALTE ÄNDERN | Unterstützt |
| MEHR | ALTER | TABELLE ÄNDERN - SPALTEN HINZUFÜGEN | Unterstützt |
| MEHR | ALTER | TABELLE ÄNDERN - PARTITION HINZUFÜGEN | Unterstützt |
| MEHR | ALTER | TABELLE ÄNDERN — PARTITION LÖSCHEN | Unterstützt |
| MEHR | ALTER | TABELLE ÄNDERN — PARTITIONEN WIEDERHERSTELLEN | Unterstützt |
| MEHR | ALTER | REPARIEREN SIE PARTITIONEN ZUR TABELLENSYNCHRONISIERUNG | Unterstützt |
| DROP | DROP | DROP TABLE | Unterstützt |
| MEHR | DROP | TABELLE LÖSCHEN - LÖSCHEN | Unterstützt |
| CREATE | CREATE | TABELLE ERSTELLEN — VERWALTET | Unterstützt |
| MEHR | CREATE | TABELLE ERSTELLEN - PARTITION NACH | Unterstützt |
| MEHR | CREATE | TABELLE ERSTELLEN, FALLS SIE NICHT EXISTIERT | Unterstützt |
| MEHR | CREATE | CREATE TABLE LIKE | Unterstützt |
| MEHR | CREATE | CREATE TABLE AS SELECT | Unterstützt |
| CREATE | CREATE | TABELLE MIT STANDORT ERSTELLEN - Externe Tabelle | Nicht unterstützt |
| DATENRAHMEN (UPSERT) | DATENRAHMEN (VERÄRGERT) | speichern AsTable.Overwrite | Unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | speichern AsTable.Append | Nicht unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | speichern AsTable.Ignore | Unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | speichern AsTable.ErrorIfExists | Unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | speichern AsTable - Externe Tabelle (Pfad) | Nicht unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | speichern (Pfad) - DF v1 | Nicht unterstützt |
| DATENRAHMEN (LÖSCHEN) | DATENRAHMEN (LÖSCHEN) | speichern AsTable.Append | Nicht unterstützt |
| MEHR | DATENRAHMEN (LÖSCHEN) | speichern AsTable - Externe Tabelle (Pfad) | Nicht unterstützt |
| MEHR | DATENRAHMEN (LÖSCHEN) | speichern (Pfad) - DF v1 | Nicht unterstützt |
| DATENRAHMEN (BULK_INSERT) | DATENRAHMEN (BULK_INSERT) | speichern AsTable.Overwrite | Unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | speichern AsTable.Append | Nicht unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | speichern AsTable.Ignore | Unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | speichern AsTable.ErrorIfExists | Unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | speichern AsTable - Externe Tabelle (Pfad) | Nicht unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | speichern (Pfad) - DF v1 | Nicht unterstützt |