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.
Ausführen von ETL-Jobs auf Amazon S3 S3-Tabellen mit AWS Glue
AWS Glue ist ein serverloser Datenintegrationsdienst, der es Analytics-Benutzern erleichtert, Daten aus mehreren Quellen zu ermitteln, aufzubereiten, zu verschieben und zu integrieren. Sie können AWS Glue Jobs verwenden, um ETL-Pipelines (Extrahieren, Transformieren und Laden) auszuführen, um Daten in Ihre Data Lakes zu laden. Weitere Informationen zu finden Sie AWS Glue unter Was ist AWS Glue? im AWS Glue
Entwicklerhandbuch.
Ein AWS Glue Job kapselt ein Skript, das eine Verbindung zu Ihren Quelldaten herstellt, sie verarbeitet und sie dann in Ihr Datenziel schreibt. In der Regel führt ein Auftrag Extraktions-, Transformations- und Ladeskripts (Extract, Transform and Load, ETL) aus. Jobs können Skripts ausführen, die für Apache Spark Laufzeitumgebungen entwickelt wurden. Sie können Auftragsausführungen überwachen, um mehr über Laufzeitmetriken wie Bearbeitungsstatus, Dauer und Startzeit zu erfahren.
Sie können AWS Glue Jobs verwenden, um Daten in Ihren S3-Tabellen zu verarbeiten, indem Sie über die Integration mit AWS Analytics-Services eine Verbindung zu Ihren Tabellen herstellen, oder Sie können eine direkte Verbindung über den Amazon Iceberg REST S3-Tabellen-Endpunkt oder den Amazon S3 S3-Tabellenkatalog für herstellenApache Iceberg. Dieses Handbuch behandelt die grundlegenden Schritte für den Einstieg in die Verwendung von AWS Glue S3-Tabellen, darunter:
Wählen Sie Ihre Zugriffsmethode auf der Grundlage Ihrer spezifischen AWS Glue ETL-Jobanforderungen:
-
AWS Integration von Analysediensten (empfohlen) — Wird empfohlen, wenn Sie ein zentrales Metadatenmanagement für mehrere AWS Analysedienste benötigen, bestehende AWS Glue Datenkatalogberechtigungen und eine detaillierte Zugriffskontrolle mit Lake Formation nutzen müssen oder ETL-Pipelines für die Produktion aufbauen müssen, die sich in andere AWS Services wie Athena oder Amazon EMR integrieren lassen.
-
Iceberg RESTEndpunkt Amazon S3 S3-Tabellen — Wird empfohlen, wenn Sie eine Verbindung zu S3-Tabellen von Abfrage-Engines von Drittanbietern herstellen müssenApache Iceberg, die benutzerdefinierte ETL-Anwendungen unterstützen, erstellen müssen, die direkten REST-API-Zugriff benötigen, oder wenn Sie die Kontrolle über Katalogvorgänge ohne Abhängigkeiten vom AWS Glue Datenkatalog benötigen.
-
Amazon S3 S3-Tabellenkatalog für Apache Iceberg — Nur für ältere Anwendungen oder bestimmte programmatische Szenarien verwenden, die die Java-Clientbibliothek benötigen. Diese Methode wird aufgrund des zusätzlichen JAR
Abhängigkeitsmanagements und der Komplexität nicht für die Implementierung neuer AWS Glue ETL-Jobs empfohlen.
Schritt 1 — Voraussetzungen
Bevor Sie Tabellen aus einem AWS Glue Job abfragen können, müssen Sie eine IAM-Rolle konfigurieren, mit der der Job ausgeführt werden AWS Glue kann. Wählen Sie Ihre Zugriffsmethode, um sich über die spezifischen Voraussetzungen für diese Methode zu informieren.
- AWS analytics services integration (Recommended)
-
Voraussetzungen, die erforderlich sind, um die AWS Analyseintegration von S3 Tables zur Ausführung von AWS Glue Jobs zu verwenden.
- Amazon S3 Tables Eisberg REST endpoint
-
Voraussetzungen für die Verwendung des Amazon S3 Iceberg REST Tables-Endpunkts zur Ausführung von AWS Glue ETL-Jobs.
- Amazon S3 Tables Catalog for Apache Iceberg
-
Voraussetzungen: Verwenden Sie den Amazon S3 S3-Tabellenkatalog für Apache Iceberg die Ausführung von AWS Glue ETL-Jobs.
Schritt 2 — Erstellen Sie ein Skript, um eine Verbindung zu Tabellen-Buckets herzustellen
Um auf Ihre Tabellendaten zuzugreifen, wenn Sie einen AWS Glue ETL-Job ausführen, konfigurieren Sie dafür eine Spark Sitzung, Apache Iceberg die eine Verbindung zu Ihrem S3-Tabellen-Bucket herstellt. Sie können ein vorhandenes Skript ändern, um eine Verbindung zu Ihrem Tabellen-Bucket herzustellen, oder ein neues Skript erstellen. Weitere Informationen zum Erstellen von AWS Glue Skripten finden Sie unter Tutorial: Ein AWS Glue for Spark-Skript schreiben im AWS Glue
Entwicklerhandbuch.
Sie können die Sitzung so konfigurieren, dass sie über eine der folgenden Zugriffsmethoden für S3-Tabellen eine Verbindung zu Ihren Tabellen-Buckets herstellt:
-
Integration der AWS Analysedienste für S3-Tabellen (empfohlen)
-
Iceberg RESTEndpunkt Amazon S3 S3-Tabellen
-
Amazon S3 S3-Tabellenkatalog für Apache Iceberg
Wählen Sie aus den folgenden Zugriffsmethoden, um Anweisungen zur Einrichtung und Konfigurationsbeispiele einzusehen.
- AWS analytics services integration (Recommended)
-
Als Voraussetzung für das Abfragen von Tabellen mit oder Spark unter AWS Glue
Verwendung der AWS Analytics Services-Integration müssen Sie Ihre Tabellen-Buckets in AWS Analytics-Services integrieren
Sie können die Verbindung zu Ihrem Tabellen-Bucket über eine Spark Sitzung in einem Job oder mit AWS Glue Studio Magics in einer interaktiven Sitzung konfigurieren. Um die folgenden Beispiele zu verwenden, ersetzen Sie die durch die placeholder values
Informationen für Ihren eigenen Tabellen-Bucket.
- Verwenden Sie ein PySpark Skript
-
Verwenden Sie den folgenden Codeausschnitt in einem PySpark Skript, um einen AWS Glue Job zu konfigurieren, der mithilfe der Integration eine Verbindung zu Ihrem Tabellen-Bucket herstellt.
spark = SparkSession.builder.appName("SparkIcebergSQL") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog","s3tables") \
.config("spark.sql.catalog.s3tables", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3tables.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
.config("spark.sql.catalog.s3tables.glue.id", "111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
") \
.config("spark.sql.catalog.s3tables.warehouse", "s3://amzn-s3-demo-table-bucket
/warehouse/") \
.getOrCreate()
- Verwenden Sie eine interaktive Sitzung AWS Glue
-
Wenn Sie eine interaktive Notebook-Sitzung mit AWS Glue
5.0 verwenden, geben Sie vor der Codeausführung dieselben Konfigurationen mithilfe von %%configure
Magic in einer Zelle an.
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3tables --conf spark.sql.catalog.s3tables=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3tables.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.s3tables.glue.id=111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
--conf spark.sql.catalog.s3tables.warehouse=s3://amzn-s3-demo-table-bucket
/warehouse/"}
- Amazon S3 Tables Eisberg, Ruhe. endpoint
-
Sie können die Verbindung zu Ihrem Table-Bucket über eine Spark Sitzung in einem Job oder mit AWS Glue Studio Magics in einer interaktiven Sitzung konfigurieren. Um die folgenden Beispiele zu verwenden, ersetzen Sie die durch die placeholder values
Informationen für Ihren eigenen Tabellen-Bucket.
- Verwenden Sie ein PySpark Skript
Verwenden Sie den folgenden Codeausschnitt in einem PySpark Skript, um einen AWS Glue Job so zu konfigurieren, dass er über den Endpunkt eine Verbindung zu Ihrem Tabellen-Bucket herstellt.
spark = SparkSession.builder.appName("glue-s3-tables-rest") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog", "s3_rest_catalog") \
.config("spark.sql.catalog.s3_rest_catalog", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3_rest_catalog.type", "rest") \
.config("spark.sql.catalog.s3_rest_catalog.uri", "https://s3tables.Region
.amazonaws.com/iceberg") \
.config("spark.sql.catalog.s3_rest_catalog.warehouse", "arn:aws:s3tables:Region
:111122223333
:bucket/amzn-s3-demo-table-bucket
") \
.config("spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled", "true") \
.config("spark.sql.catalog.s3_rest_catalog.rest.signing-name", "s3tables") \
.config("spark.sql.catalog.s3_rest_catalog.rest.signing-region", "Region
") \
.config('spark.sql.catalog.s3_rest_catalog.io-impl','org.apache.iceberg.aws.s3.S3FileIO') \
.config('spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled','false') \
.getOrCreate()
- Verwenden Sie eine interaktive Sitzung AWS Glue
Wenn Sie eine interaktive Notebook-Sitzung mit AWS Glue 5.0 verwenden, geben Sie vor der Codeausführung dieselben Konfigurationen mithilfe von %%configure
Magic in einer Zelle an. Ersetzen Sie die Platzhalterwerte durch die Informationen für Ihren eigenen Tabellen-Bucket.
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3_rest_catalog --conf spark.sql.catalog.s3_rest_catalog=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3_rest_catalog.type=rest --conf spark.sql.catalog.s3_rest_catalog.uri=https://s3tables.Region
.amazonaws.com/iceberg --conf spark.sql.catalog.s3_rest_catalog.warehouse=arn:aws:s3tables:Region
:111122223333
:bucket/amzn-s3-demo-table-bucket
--conf spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled=true --conf spark.sql.catalog.s3_rest_catalog.rest.signing-name=s3tables --conf spark.sql.catalog.s3_rest_catalog.rest.signing-region=Region
--conf spark.sql.catalog.s3_rest_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled=false"}
- Amazon S3 Tables Catalog for Apache Iceberg
-
Als Voraussetzung für die Verbindung zu Tabellen mithilfe des Amazon S3 S3-Tabellenkatalogs müssen Apache Iceberg Sie zunächst die neueste Katalog-JAR-Datei herunterladen und in einen S3-Bucket hochladen. Wenn Sie dann Ihren Job erstellen, fügen Sie den Pfad zum Client-Katalog JAR als speziellen Parameter hinzu. Weitere Informationen zu Job-Parametern finden Sie im AWS Glue Developer Guide unter Spezielle Parameter AWS Glue, die in AWS Glue Jobs verwendet werden.
Sie können die Verbindung zu Ihrem Tabellen-Bucket über eine Spark Sitzung in einem Job oder mithilfe von AWS Glue Studio Magics in einer interaktiven Sitzung konfigurieren. Um die folgenden Beispiele zu verwenden, ersetzen Sie die durch die placeholder values
Informationen für Ihren eigenen Tabellen-Bucket.
- Verwenden Sie ein PySpark Skript
-
Verwenden Sie den folgenden Codeausschnitt in einem PySpark Skript, um einen AWS Glue Job für die Verbindung mit Ihrem Tabellen-Bucket mithilfe von zu konfigurieren. JAR Ersetzen Sie die Platzhalterwerte durch die Informationen für Ihren eigenen Tabellen-Bucket.
spark = SparkSession.builder.appName("glue-s3-tables") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog", "s3tablesbucket") \
.config("spark.sql.catalog.s3tablesbucket", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3tablesbucket.catalog-impl", "software.amazon.s3tables.iceberg.S3TablesCatalog") \
.config("spark.sql.catalog.s3tablesbucket.warehouse", "arn:aws:s3tables:Region
:111122223333:bucket/amzn-s3-demo-table-bucket
") \
.getOrCreate()
- Verwenden Sie eine interaktive Sitzung AWS Glue
-
Wenn Sie eine interaktive Notebook-Sitzung mit AWS Glue 5.0 verwenden, geben Sie vor der Codeausführung dieselben Konfigurationen mithilfe von %%configure
Magic in einer Zelle an. Ersetzen Sie die Platzhalterwerte durch die Informationen für Ihren eigenen Tabellen-Bucket.
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3tablesbucket --conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog --conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:Region
:111122223333:bucket/amzn-s3-demo-table-bucket
", "extra-jars": "s3://amzn-s3-demo-bucket
/jars/s3-tables-catalog-for-iceberg-runtime-0.1.5
.jar"}
Beispielskripte
Die folgenden PySpark Beispielskripten können verwendet werden, um das Abfragen von S3-Tabellen mit einem AWS Glue Job zu testen. Diese Skripten stellen eine Verbindung zu Ihrem Tabellen-Bucket her und führen Abfragen aus, um: einen neuen Namespace zu erstellen, eine Beispieltabelle zu erstellen, Daten in die Tabelle einzufügen und die Tabellendaten zurückzugeben. Um die Skripten zu verwenden, ersetzen Sie sie durch die placeholder values
Informationen für Ihren eigenen Tabellen-Bucket.
Wählen Sie je nach Ihrer Zugriffsmethode für S3-Tabellen aus den folgenden Skripten.
- S3 Tables integration with AWS analytics services
-
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("SparkIcebergSQL") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog","s3tables")
.config("spark.sql.catalog.s3tables", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3tables.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
.config("spark.sql.catalog.s3tables.glue.id", "111122223333
:s3tablescatalog/amzn-s3-demo-table-bucket
") \
.config("spark.sql.catalog.s3tables.warehouse", "s3://amzn-s3-demo-table-bucket
/bucket/amzn-s3-demo-table-bucket
") \
.getOrCreate()
namespace = "new_namespace
"
table = "new_table
"
spark.sql("SHOW DATABASES").show()
spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()
spark.sql(f"""
CREATE TABLE IF NOT EXISTS {namespace}.{table} (
id INT,
name STRING,
value INT
)
""")
spark.sql(f"""
INSERT INTO {namespace}.{table}
VALUES
(1, 'ABC', 100),
(2, 'XYZ', 200)
""")
spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
- Amazon S3 Tables Iceberg REST endpoint
-
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("glue-s3-tables-rest") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog", "s3_rest_catalog") \
.config("spark.sql.catalog.s3_rest_catalog", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3_rest_catalog.type", "rest") \
.config("spark.sql.catalog.s3_rest_catalog.uri", "https://s3tables.Region
.amazonaws.com/iceberg") \
.config("spark.sql.catalog.s3_rest_catalog.warehouse", "arn:aws:s3tables:Region
:111122223333
:bucket/amzn-s3-demo-table-bucket
") \
.config("spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled", "true") \
.config("spark.sql.catalog.s3_rest_catalog.rest.signing-name", "s3tables") \
.config("spark.sql.catalog.s3_rest_catalog.rest.signing-region", "Region
") \
.config('spark.sql.catalog.s3_rest_catalog.io-impl','org.apache.iceberg.aws.s3.S3FileIO') \
.config('spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled','false') \
.getOrCreate()
namespace = "s3_tables_rest_namespace
"
table = "new_table_s3_rest
"
spark.sql("SHOW DATABASES").show()
spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()
spark.sql(f"""
CREATE TABLE IF NOT EXISTS {namespace}.{table} (
id INT,
name STRING,
value INT
)
""")
spark.sql(f"""
INSERT INTO {namespace}.{table}
VALUES
(1, 'ABC', 100),
(2, 'XYZ', 200)
""")
spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
- Amazon S3 Tables Catalog for Apache Iceberg
-
from pyspark.sql import SparkSession
#Spark session configurations
spark = SparkSession.builder.appName("glue-s3-tables") \
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
.config("spark.sql.defaultCatalog", "s3tablesbucket") \
.config("spark.sql.catalog.s3tablesbucket", "org.apache.iceberg.spark.SparkCatalog") \
.config("spark.sql.catalog.s3tablesbucket.catalog-impl", "software.amazon.s3tables.iceberg.S3TablesCatalog") \
.config("spark.sql.catalog.s3tablesbucket.warehouse", "arn:aws:s3tables:Region
:111122223333
:bucket/amzn-s3-demo-table-bucket
") \
.getOrCreate()
#Script
namespace = "new_namespace
"
table = "new_table
"
spark.sql(f"CREATE NAMESPACE IF NOT EXISTS s3tablesbucket.{namespace}")
spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()
spark.sql(f"""
CREATE TABLE IF NOT EXISTS {namespace}.{table} (
id INT,
name STRING,
value INT
)
""")
spark.sql(f"""
INSERT INTO {namespace}.{table}
VALUES
(1, 'ABC', 100),
(2, 'XYZ', 200)
""")
spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
Schritt 3 — Erstellen Sie einen AWS Glue Job, der Tabellen abfragt
Die folgenden Verfahren zeigen, wie Sie AWS Glue Jobs einrichten, die eine Verbindung zu Ihren S3-Tabellen-Buckets herstellen. Sie können dies mithilfe der AWS CLI oder mithilfe der Konsole mit dem AWS Glue Studio Skripteditor tun. Weitere Informationen finden Sie AWS Glue im AWS Glue Benutzerhandbuch unter Authoring-Jobs.
Das folgende Verfahren zeigt, wie Sie mit dem AWS Glue Studio Skript-Editor einen ETL-Job erstellen, der Ihre S3-Tabellen abfragt.
Öffnen Sie die AWS Glue Konsole unter https://console.aws.amazon.com/glue/.
-
Wählen Sie im Navigationsbereich die Option ETL-Jobs aus.
-
Wählen Sie Skripteditor und dann Skript hochladen und laden Sie das Skript hoch, das PySpark Sie für die Abfrage von S3-Tabellen erstellt haben.
-
Wählen Sie die Registerkarte Jobdetails und geben Sie Folgendes für Basiseigenschaften ein.
-
Geben Sie unter Name einen Namen für den Job ein.
-
Wählen Sie unter IAM-Rolle die Rolle aus, für AWS Glue die Sie erstellt haben.
-
(Optional) Wenn Sie die Zugriffsmethode Amazon S3 Tables Catalog als Apache Iceberg Zugriffsmethode verwenden, erweitern Sie Erweiterte Eigenschaften und geben Sie für Dependent JARs path als Voraussetzung die S3-URI der Client-Katalog-Jar ein, die Sie in einen S3-Bucket hochgeladen haben. Zum Beispiel s3://amzn-s3-demo-bucket1
/jars
/s3- tables-catalog-for-iceberg -runtime- .jar 0.1.5
-
Wählen Sie Speichern, um den Job zu erstellen.
-
Wählen Sie „Ausführen“, starten Sie den Job und überprüfen Sie den Jobstatus auf der Registerkarte „Ausführungen“.
Das folgende Verfahren zeigt, wie Sie mit dem AWS CLI einen ETL-Job erstellen, der Ihre S3-Tabellen abfragt. Um die Befehle zu verwenden, ersetzen Sie die placeholder
values
durch Ihre eigenen.
-
Erstellen Sie einen AWS Glue Job.
aws glue create-job \
--name etl-tables-job
\
--role arn:aws:iam::111122223333
:role/AWSGlueServiceRole
\
--command '{
"Name": "glueetl",
"ScriptLocation": "s3://amzn-s3-demo-bucket1
/scripts/glue-etl-query.py
",
"PythonVersion": "3"
}' \
--default-arguments '{
"--job-language": "python",
"--class": "GlueApp"
}' \
--glue-version "5.0"
(Optional) Wenn Sie die Apache Iceberg Zugriffsmethode Amazon S3 Tables Catalog für den Zugriff verwenden, fügen Sie den Client-Katalog JAR --default-arguments
mithilfe des --extra-jars
Parameters hinzu. Ersetzen Sie die input placeholders
durch Ihre eigene, wenn Sie den Parameter hinzufügen.
"--extra-jars": "s3://amzn-s3-demo-bucket
/jar-path
/s3-tables-catalog-for-iceberg-runtime-0.1.5
.jar"
-
Starte deinen Job.
aws glue start-job-run \
--job-name etl-tables-job
-
Um Ihren Jobstatus zu überprüfen, kopieren Sie die Run-ID aus dem vorherigen Befehl und geben Sie sie in den folgenden Befehl ein.
aws glue get-job-run --job-name etl-tables-job
\
--run-id jr_ec9a8a302e71f8483060f87b6c309601ea9ee9c1ffc2db56706dfcceb3d0e1ad