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.
Verwendung von Lake Formation mit Athena Spark-Arbeitsgruppen
In der Release-Version von Apache Spark, Version 3.5, können Sie AWS Glue Data Catalog nutzen, AWS Lake Formation bei dem die Rolle zur Sitzungsausführung über vollständige Tabellenberechtigungen verfügt. Mit dieser Funktion können Sie Tabellen lesen und in Tabellen schreiben, die durch Lake Formation vor Ihren interaktiven Athena Spark-Sitzungen geschützt sind. In den folgenden Abschnitten erfahren Sie mehr über Lake Formation und wie Sie es mit Athena Spark verwenden können.
Schritt 1: Aktivieren Sie den vollständigen Tabellenzugriff in Lake Formation
Um den FTA-Modus (Full Table Access) zu verwenden, müssen Sie Athena Spark den Zugriff auf Daten ermöglichen, ohne dass die Validierung des IAM-Sitzungs-Tags aktiviert ist. AWS Lake Formation Folgen Sie zur Aktivierung den Schritten unter Application integration for full table access.
Schritt 1.1: Registrieren Sie Datenspeicherorte in Lake Formation mithilfe einer benutzerdefinierten Rolle
Sie müssen eine benutzerdefinierte Rolle verwenden, um Datenspeicherorte zu registrieren. AWS Lake Formation Weitere Informationen finden Sie unter Anforderungen für Rollen, die zur Registrierung von Speicherorten verwendet werden.
Schritt 2: Richten Sie IAM-Berechtigungen für die Ausführungsrolle für die Sitzung ein
Für den Lese- oder Schreibzugriff auf die zugrunde liegenden Daten benötigt die Ausführungsrolle 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
SELECTFormation-Erlaubnis. -
Spark-Jobs, für die write/delete Daten in S3 die
ALL (SUPER)Erlaubnis von Lake Formation benötigen. -
Spark-Jobs, die mit AWS Glue Data Catalog interagieren
DESCRIBEALTER, erfordern eine entsprechendeDROPGenehmigung.
Schritt 3: Initialisieren Sie eine Spark-Sitzung für den vollständigen Tabellenzugriff mithilfe von Lake Formation
Voraussetzungen
AWS Glue Der Datenkatalog muss als Metastore konfiguriert werden, um auf Lake Formation-Tabellen zugreifen zu können.
Legen Sie die folgenden Einstellungen fest, um den AWS Glue Katalog als Metastore zu konfigurieren:
{ "spark.hadoop.glue.catalogid": "ACCOUNT_ID", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "spark.hadoop.hive.metastore.glue.catalogid": "ACCOUNT_ID", "spark.sql.catalogImplementation": "hive" }
Um auf Tabellen zuzugreifen AWS Lake Formation, bei denen registriert ist, müssen die folgenden Konfigurationen während der Spark-Initialisierung festgelegt werden, um Spark für die Verwendung AWS Lake Formation von Anmeldeinformationen zu konfigurieren.
Hive
{ "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": "true", "spark.hadoop.fs.s3.folderObject.autoAction.disabled": "true", "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": "true", "spark.sql.catalog.createDirectoryAfterTable.enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true" }
Apache Iceberg
{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.warehouse": "s3://your-bucket/warehouse/", "spark.sql.catalog.spark_catalog.client.region": "REGION", "spark.sql.catalog.spark_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID", "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true" }
Amazon S3 Tables
{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.{catalogName}": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.{catalogName}.warehouse": "arn:aws:s3tables:{region}:{accountId}:bucket/{bucketName}", "spark.sql.catalog.{catalogName}.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.{catalogName}.glue.id": "{accountId}:s3tablescatalog/{bucketName}", "spark.sql.catalog.{catalogName}.glue.lakeformation-enabled": "true", "spark.sql.catalog.{catalogName}.client.region": "REGION", "spark.sql.catalog.{catalogName}.glue.account-id": "ACCOUNT_ID" }
Delta Lake
{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog", "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": "true", "spark.hadoop.fs.s3.folderObject.autoAction.disabled": "true", "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": "true", "spark.sql.catalog.createDirectoryAfterTable.enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true" }
Überlegungen und Einschränkungen
-
Der vollständige Tabellenzugriff wird für Hive-, Iceberg-, Amazon S3-Tabellen und Delta-Tabellen unterstützt. Hudi-Tabellen unterstützen keinen vollständigen Tabellenzugriff.
-
Um einer aktiven Sitzung neue Kataloge hinzuzufügen, verwenden Sie die Option
spark.conf.setMit neuen Katalogkonfigurationen. -
Katalogkonfigurationen sind unveränderlich. Wenn Sie eine Katalogkonfiguration aktualisieren möchten, erstellen Sie einen neuen Katalog mit.
spark.conf.set -
Fügen Sie der Spark-Sitzung nur Kataloge hinzu, die Sie benötigen.
-
Um den Standardkatalog zu ändern:
spark.catalog.setCurrentCatalog("s3tablesbucket") -
Wenn Sie Sonderzeichen in Ihrem Katalognamen haben,
-maskieren Sie diese in Ihrer Abfrage wie folgt:SELECT sales_amount as nums FROM `my-s3-tables-bucket`.`s3namespace`.`daily_sales` LIMIT 100