Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menjalankan pekerjaan ETL di tabel Amazon S3 dengan AWS Glue
AWS Glue adalah layanan integrasi data tanpa server yang memudahkan pengguna analitik untuk menemukan, menyiapkan, memindahkan, dan mengintegrasikan data dari berbagai sumber. Anda dapat menggunakan AWS Glue pekerjaan untuk menjalankan pipeline ekstrak, transformasi, dan memuat (ETL) untuk memuat data ke dalam danau data Anda. Untuk informasi selengkapnya AWS Glue, lihat Apa itu AWS Glue? dalam Panduan Peng AWS Glue
embang.
Pekerjaan AWS Glue merangkum skrip yang menghubungkan ke data sumber Anda, memprosesnya, dan kemudian menuliskannya ke target data Anda. Biasanya, sebuah tugas menjalankan skrip extract, transform, and load (ETL). Jobs dapat menjalankan skrip yang dirancang untuk lingkungan Apache Spark runtime. Anda dapat memantau eksekusi tugas untuk memahami metrik waktu aktif seperti status penyelesaian, durasi, dan waktu mulai.
Anda dapat menggunakan AWS Glue pekerjaan untuk memproses data di tabel S3 Anda dengan menghubungkan ke tabel Anda melalui integrasi dengan layanan AWS analitik, atau, terhubung langsung menggunakan Iceberg REST titik akhir Tabel Amazon S3 atau Katalog Tabel Amazon S3 untukApache Iceberg. Panduan ini mencakup langkah-langkah dasar untuk mulai menggunakan AWS Glue Tabel S3, termasuk:
Pilih metode akses Anda berdasarkan persyaratan pekerjaan AWS Glue ETL spesifik Anda:
-
AWS integrasi layanan analitik (Direkomendasikan) — Direkomendasikan saat Anda memerlukan manajemen metadata terpusat di beberapa layanan AWS analitik, perlu memanfaatkan izin Katalog AWS Glue Data yang ada dan secara opsional Lake Formation, atau sedang membangun pipeline ETL produksi yang terintegrasi dengan AWS layanan lain seperti Athena atau Amazon EMR.
-
Titik Iceberg REST akhir Tabel Amazon S3 — Direkomendasikan saat Anda perlu menyambung ke tabel S3 dari mesin kueri pihak ketiga yang mendukungApache Iceberg, membuat aplikasi ETL kustom yang memerlukan akses REST API langsung, atau ketika Anda memerlukan kontrol atas operasi katalog tanpa ketergantungan pada Katalog AWS Glue Data.
-
Katalog Tabel Amazon S3 untuk Apache Iceberg — Gunakan hanya untuk aplikasi lama atau skenario terprogram tertentu yang memerlukan pustaka klien Java. Metode ini tidak direkomendasikan untuk implementasi pekerjaan AWS Glue ETL baru karena manajemen JAR ketergantungan tambahan dan kompleksitas.
Langkah 1 - Prasyarat
Sebelum Anda dapat menanyakan tabel dari AWS Glue pekerjaan, Anda harus mengonfigurasi peran IAM yang AWS Glue dapat digunakan untuk menjalankan pekerjaan. Pilih metode akses Anda untuk melihat prasyarat spesifik untuk metode itu.
- AWS analytics services integration (Recommended)
-
Prasyarat yang diperlukan untuk menggunakan integrasi AWS analitik Tabel S3 untuk menjalankan AWS Glue pekerjaan.
- Amazon S3 Tables Iceberg REST endpoint
-
Prasyarat untuk menggunakan titik akhir Amazon S3 Iceberg REST Tables untuk menjalankan AWS Glue tugas ETL.
- Amazon S3 Tables Catalog for Gunung Es Apache
-
Prasyarat menggunakan Katalog Tabel Amazon S3 Apache Iceberg untuk menjalankan tugas AWS Glue ETL.
Langkah 2 - Buat skrip untuk terhubung ke bucket tabel
Untuk mengakses data tabel Anda saat menjalankan tugas AWS Glue ETL, Anda mengonfigurasi Spark sesi untuk Apache Iceberg yang terhubung ke bucket tabel S3 Anda. Anda dapat memodifikasi skrip yang ada untuk terhubung ke bucket tabel Anda atau membuat skrip baru. Untuk informasi selengkapnya tentang membuat AWS Glue skrip, lihat Tutorial: Menulis skrip AWS Glue for Spark di Panduan AWS Glue
Pengembang.
Anda dapat mengonfigurasi sesi untuk terhubung ke bucket tabel Anda melalui salah satu metode akses Tabel S3 berikut:
-
Integrasi layanan AWS analitik Tabel S3 (Direkomendasikan)
-
Titik Iceberg REST akhir Tabel Amazon S3
-
Katalog Tabel Amazon S3 untuk Apache Iceberg
Pilih dari metode akses berikut untuk melihat petunjuk penyiapan dan contoh konfigurasi.
- AWS analytics services integration (Recommended)
-
Sebagai prasyarat untuk menanyakan tabel dengan Spark AWS Glue
menggunakan integrasi layanan AWS analitik, Anda harus Meng integrasikan bucket tabel Anda dengan layanan AWS analitik
Anda dapat mengonfigurasi koneksi ke bucket tabel Anda melalui Spark sesi dalam pekerjaan atau dengan si AWS Glue Studio hir dalam sesi interaktif. Untuk menggunakan contoh berikut, ganti placeholder values dengan informasi untuk ember meja Anda sendiri.
- Menggunakan PySpark skrip
-
Gunakan cuplikan kode berikut dalam PySpark skrip untuk mengonfigurasi AWS Glue pekerjaan untuk terhubung ke bucket tabel Anda menggunakan integrasi.
spark = SparkSession.builder.appName("SparkIcebergSQL") \
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
.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()
- Menggunakan AWS Glue
sesi interaktif
-
Jika Anda menggunakan sesi notebook interaktif dengan AWS Glue
5.0, tentukan konfigurasi yang sama menggunakan ke %%configure ajaiban dalam sel sebelum eksekusi kode.
%%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 Iceberg REST endpoint
-
Anda dapat mengonfigurasi koneksi ke bucket tabel Anda melalui Spark sesi dalam pekerjaan atau dengan si AWS Glue Studio hir dalam sesi interaktif. Untuk menggunakan contoh berikut, ganti placeholder values dengan informasi untuk ember meja Anda sendiri.
- Menggunakan PySpark skrip
Gunakan cuplikan kode berikut dalam PySpark skrip untuk mengonfigurasi AWS Glue pekerjaan untuk terhubung ke bucket tabel Anda menggunakan titik akhir.
spark = SparkSession.builder.appName("glue-s3-tables-rest") \
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
.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()
- Menggunakan AWS Glue
sesi interaktif
Jika Anda menggunakan sesi notebook interaktif dengan AWS Glue 5.0, tentukan konfigurasi yang sama menggunakan ke %%configure ajaiban dalam sel sebelum eksekusi kode. Ganti nilai placeholder dengan informasi untuk bucket tabel Anda sendiri.
%%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 Gunung Es Apache
-
Sebagai prasyarat untuk menghubungkan ke tabel menggunakan Katalog Tabel Amazon S3 untuk Apache Iceberg Anda harus terlebih dahulu mengunduh jar katalog terbaru dan mengunggahnya ke bucket S3. Kemudian, ketika Anda membuat pekerjaan Anda, Anda menambahkan jalur ke katalog klien JAR sebagai parameter khusus. Untuk informasi selengkapnya tentang parameter pekerjaan di AWS Glue, lihat Parameter khusus yang digunakan dalam AWS Glue pekerjaan di Panduan AWS Glue Pengembang.
Anda dapat mengonfigurasi koneksi ke bucket tabel Anda melalui Spark sesi dalam pekerjaan atau dengan si AWS Glue Studio hir dalam sesi interaktif. Untuk menggunakan contoh berikut, ganti placeholder values dengan informasi untuk ember meja Anda sendiri.
- Menggunakan PySpark skrip
-
Gunakan cuplikan kode berikut dalam PySpark skrip untuk mengonfigurasi AWS Glue pekerjaan untuk terhubung ke bucket tabel Anda menggunakan. JAR Ganti nilai placeholder dengan informasi untuk bucket tabel Anda sendiri.
spark = SparkSession.builder.appName("glue-s3-tables") \
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
.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()
- Menggunakan AWS Glue
sesi interaktif
-
Jika Anda menggunakan sesi notebook interaktif dengan AWS Glue 5.0, tentukan konfigurasi yang sama menggunakan ke %%configure ajaiban dalam sel sebelum eksekusi kode. Ganti nilai placeholder dengan informasi untuk bucket tabel Anda sendiri.
%%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"}
Contoh skrip
Contoh PySpark skrip berikut dapat digunakan untuk menguji kueri tabel S3 dengan AWS Glue pekerjaan. Skrip ini terhubung ke bucket tabel Anda dan menjalankan kueri untuk: membuat namespace baru, membuat tabel sampel, memasukkan data ke dalam tabel, dan mengembalikan data tabel. Untuk menggunakan skrip, ganti placeholder values dengan informasi untuk bucket tabel Anda sendiri.
Pilih dari skrip berikut berdasarkan metode akses Tabel S3 Anda.
- S3 Tables integration with AWS analytics services
-
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("SparkIcebergSQL") \
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
.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.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
.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 Gunung Es Apache
-
from pyspark.sql import SparkSession
#Spark session configurations
spark = SparkSession.builder.appName("glue-s3-tables") \
.config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
.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()
Langkah 3 - Buat AWS Glue pekerjaan yang menanyakan tabel
Prosedur berikut menunjukkan cara mengatur AWS Glue pekerjaan yang terhubung ke bucket tabel S3 Anda. Anda dapat melakukan ini menggunakan AWS CLI atau menggunakan konsol dengan editor AWS Glue Studio skrip. Untuk informasi selengkapnya, lihat Pekerjaan penul AWS Glue isan di Panduan AWS Glue Pengguna.
Prosedur berikut menunjukkan cara menggunakan editor AWS Glue Studio skrip untuk membuat pekerjaan ETL yang menanyakan tabel S3 Anda.
Buka AWS Glue konsol di https://console.aws.amazon.com/glue/.
-
Dari panel Navigasi, pilih pekerjaan ETL.
-
Pilih Editor skrip, lalu pilih Unggah skrip dan unggah PySpark skrip yang Anda buat untuk menanyakan tabel S3.
-
Pilih tab Detail pekerjaan dan masukkan yang berikut untuk properti Dasar.
-
Untuk Nama, masukkan nama untuk pekerjaan.
-
Untuk Peran IAM, pilih peran yang Anda buat AWS Glue.
-
(Opsional) Jika Anda menggunakan Katalog Tabel Amazon S3 untuk metode Apache Iceberg akses, perluas Properti L anjutan dan untuk jalur JAR Dependen, masukkan URI S3 dari jar katalog klien yang Anda unggah ke bucket S3 sebagai prasyarat. Misalnya, s3:amzn-s3-demo-bucket1//jars/s 0.1.5 3-tables-catalog-for-iceberg-runtime-.jar
-
Pilih Simpan untuk membuat pekerjaan.
-
Pilih Jalan kan mulai pekerjaan, dan tinjau status pekerjaan di bawah tab Runs.
Prosedur berikut menunjukkan cara menggunakan AWS CLI untuk membuat pekerjaan ETL yang menanyakan tabel S3 Anda. Untuk menggunakan perintah ganti placeholder
values dengan milik Anda sendiri.
-
Buat AWS Glue pekerjaan.
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"
(Opsional) Jika Anda menggunakan Katalog Tabel Amazon S3 untuk metode Apache Iceberg akses, tambahkan katalog klien JAR ke --extra-jars parameter --default-arguments menggunakan. Ganti input placeholders dengan milik Anda sendiri saat Anda menambahkan parameter.
"--extra-jars": "s3://amzn-s3-demo-bucket/jar-path/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar"
-
Mulai pekerjaan Anda.
aws glue start-job-run \
--job-name etl-tables-job
-
Untuk meninjau status pekerjaan Anda, salin ID run dari perintah sebelumnya dan masukkan ke dalam perintah berikut.
aws glue get-job-run --job-name etl-tables-job \
--run-id jr_ec9a8a302e71f8483060f87b6c309601ea9ee9c1ffc2db56706dfcceb3d0e1ad