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.
Lake Formation Vollzugriff auf Tabellen für EMR Serverless
Mit den Amazon EMR-Versionen 7.8.0 und höher können Sie AWS Lake Formation mit Glue Data Catalog nutzen, wobei die Job-Runtime-Rolle über vollständige Tabellenberechtigungen verfügt, ohne die Einschränkungen einer detaillierten Zugriffskontrolle. Diese Funktion ermöglicht es Ihnen, von Ihren EMR Serverless Spark-Batch- und interaktiven Jobs aus zu lesen und in Tabellen zu schreiben, die durch Lake Formation geschützt sind. In den folgenden Abschnitten erfahren Sie mehr über Lake Formation und dessen Verwendung mit EMR Serverless.
Lake Formation mit vollständigem Tabellenzugriff verwenden
Sie können auf AWS Lake Formation Formation-geschützte Glue Data-Katalogtabellen von EMR Serverless Spark-Jobs oder interaktiven Sitzungen aus zugreifen, in denen die Runtime-Rolle des Jobs vollen Tabellenzugriff hat. Sie müssen AWS Lake Formation in der EMR Serverless-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 Laufzeitrolle 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 detaillierte Zugriffskontrolle. Ein Job kann nicht gleichzeitig Full Table Access (FTA) und Fine-Grained Access Control (FGAC) auf demselben EMR-Cluster oder derselben EMR-Applikation ausführen.
Schritt 1: Vollständigen Tabellenzugriff in Lake Formation aktivieren
Um den Modus Full Table Access (FTA) zu verwenden, müssen Sie Drittanbieter-Abfrage-Engines den Zugriff auf Daten ohne die IAM-Sitzungs-Tag-Validierung in AWS Lake Formation gestatten. 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 Producer- als auch in Consumer-Konten aktiviert sein. Ebenso muss diese Einstellung beim Zugriff auf regionsübergreifende Tabellen sowohl in Erzeuger- als auch in Verbraucherregionen aktiviert sein.
Schritt 2: Einrichten der IAM-Berechtigungen für die Auftrag-Laufzeitrolle
Für den Lese- oder Schreibzugriff auf zugrunde liegende Daten benötigt eine Job-Runtime-Rolle zusätzlich zu den Lake Formation 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 eine Beispielrichtlinie für die 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 Lake Formation Formation-Berechtigungen konfigurieren
Spark-Jobs, die Daten aus S3 lesen, benötigen die Lake Formation SELECT-Berechtigung.
Spark-Jobs, für die write/delete Daten in S3 ist die Lake Formation ALL (SUPER) -Genehmigung erforderlich.
Spark-Jobs, die mit dem Glue-Datenkatalog interagieren, benötigen die entsprechenden DESCRIBE-, ALTER- und DROP-Berechtigungen.
Weitere Informationen finden Sie unter Erteilen von Berechtigungen für Datenkatalogressourcen.
Schritt 3: Initialisieren Sie eine Spark-Sitzung für den vollständigen Tabellenzugriff mit Lake Formation
Voraussetzungen
AWS Der 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 for EMR Serverless finden Sie unter Metastore-Konfiguration für EMR Serverless.
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 von AWS Lake Formation Formation-Anmeldeinformationen zu konfigurieren.
-
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 registrierte AWS Lake Formation-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 der Content-Type-Header „application/x-directory“ anstelle des Suffixes „$folder$“ verwendet wird. Dies ist beim Lesen von Lake Formation-Tabellen erforderlich, da die Anmeldeinformationen von Lake Formation 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 in Lake Formation registrierte Tabellen erforderlich, da die Anmeldeinformationen für Lake Formation 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 Anmeldeinformationen für Lake Formation 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 die Lake Formation 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 er AWS Lake Formation S3-Anmeldeinformationen für registrierte Lake Formation-Tabellen verwendet. 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 über interaktive Spark-Sitzungen in JupyterLab Notebooks auf registrierte Tabellen von Lake Formation 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: Ihre Konto-ID AWS
Anmerkung
Sie müssen diese Konfigurationen festlegen, bevor Sie Spark-Operationen in Ihrem Notebook ausführen.
Unterstützte Vorgänge
Bei diesen Vorgängen werden AWS Lake Formation Formation-Anmeldeinformationen für den Zugriff auf die Tabellendaten verwendet.
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 vollständigem 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 er in S3 kein
$folder$Suffix im Ordnernamen verwendet. Dies kann durch Einstellen der Spark-Konfigurationspark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueerreicht werden.Erstellen Sie mit der S3-Konsole oder AWS der S3-CLI einen AWS S3-Ordner am Speicherort
s3://path/to/table/table_nameder Tabelle.
Vollständiger 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.
Full Table Access 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 Anmeldeinformationen 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 Hudi-Standardkonfigurationen. 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 auf Tabellen mit Lake Formation Fine-Grained Access Control (FGAC) -Regeln oder Glue Data Catalog Views verweisen, schlagen fehl. Um eine Tabelle mit FGAC-Regeln oder einer Glue-Datenkatalogsicht 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 EMR Serverless with AWS Lake Formation für eine detaillierte Zugriffskontrolle.
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 vorübergehend innerhalb eines Spark-Jobs zwischenspeichert, spiegelt ein Spark-Batchjob oder eine interaktive Sitzung, die gerade ausgeführt wird, möglicherweise keine Berechtigungsänderungen wider.
Sie müssen eine benutzerdefinierte Rolle und keine dienstverknüpfte Rolle verwenden: Lake Formation 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 „Vollständiger Tabellenzugriff“:
| Tabellentyp | Operation | SQL Write-Befehl | 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 - TABELLENEIGENSCHAFTEN FESTLEGEN | Unterstützt |
| KUH | ALTER | TABELLE ÄNDERN - TBLPROPERTIES DEAKTIVIEREN | 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 | REPARIERE TABELLENSYNCHRONISIERUNGSPARTITIONEN | 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 - PARTITIONIEREN 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) | saveAsTable. Überschreiben | Unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | saveAsTable. Anhängen | Nicht unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | saveAsTable. Ignorieren | Unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | saveAsTable.ErrorIfExists | Unterstützt |
| KUH | DATENRAHMEN (EINFÜGEN) | saveAsTable - 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 - TABELLENEIGENSCHAFTEN FESTLEGEN | Unterstützt |
| MEHR | ALTER | TABELLE ÄNDERN - TABELLENEIGENSCHAFTEN DEAKTIVIEREN | 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 | REPARIERE TABELLENSYNCHRONISIERUNGSPARTITIONEN | 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 - PARTITIONIEREN NACH | Unterstützt |
| MEHR | CREATE | TABELLE ERSTELLEN, FALLS NICHT VORHANDEN | 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 (UPSERT) | saveAsTable. Überschreiben | Unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | saveAsTable. Anhängen | Nicht unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | saveAsTable. Ignorieren | Unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | saveAsTable.ErrorIfExists | Unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | saveAsTable - Externe Tabelle (Pfad) | Nicht unterstützt |
| MEHR | DATENRAHMEN (VERÄRGERT) | speichern (Pfad) — DF v1 | Nicht unterstützt |
| DATENRAHMEN (LÖSCHEN) | DATENRAHMEN (LÖSCHEN) | saveAsTable. Anhängen | Nicht unterstützt |
| MEHR | DATENRAHMEN (LÖSCHEN) | saveAsTable - Externe Tabelle (Pfad) | Nicht unterstützt |
| MEHR | DATENRAHMEN (LÖSCHEN) | speichern (Pfad) — DF v1 | Nicht unterstützt |
| DATENRAHMEN (BULK_INSERT) | DATENRAHMEN (BULK_INSERT) | saveAsTable. Überschreiben | Unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | saveAsTable. Anhängen | Nicht unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | saveAsTable. Ignorieren | Unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | saveAsTable.ErrorIfExists | Unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | saveAsTable - Externe Tabelle (Pfad) | Nicht unterstützt |
| MEHR | DATENRAHMEN (BULK_INSERT) | speichern (Pfad) — DF v1 | Nicht unterstützt |