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 pemuatan (ETL) untuk memuat data ke dalam data lake Anda. Untuk informasi lebih lanjut tentang AWS Glue, lihat Apa itu AWS Glue? di Panduan AWS Glue
Pengembang.
AWS Glue Pekerjaan merangkum skrip yang terhubung ke data sumber Anda, memprosesnya, dan kemudian menuliskannya ke target data Anda. Biasanya, sebuah tugas menjalankan skrip extract, transform, and load (ETL). Pekerjaan 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 dalam tabel S3 Anda dengan menghubungkan ke tabel Anda melalui integrasi dengan layanan AWS analitik, atau, terhubung langsung menggunakan titik akhir Iceberg REST Tabel Amazon S3 atau Katalog Tabel Amazon S3 untuk. Apache Iceberg Panduan ini mencakup langkah-langkah dasar untuk mulai menggunakan AWS Glue dengan Tabel S3, termasuk:
Pilih metode akses Anda berdasarkan persyaratan pekerjaan AWS Glue ETL spesifik Anda:
-
AWS Integrasi layanan analitik (Disarankan) — Direkomendasikan saat Anda membutuhkan manajemen metadata terpusat di beberapa layanan AWS analitik, perlu memanfaatkan izin Katalog AWS Glue Data yang ada dan kontrol akses berbutir halus dengan Lake Formation, atau sedang membangun jaringan pipa ETL produksi yang terintegrasi dengan layanan AWS lain seperti Athena atau Amazon EMR.
-
Iceberg RESTTitik akhir Tabel Amazon S3 — Direkomendasikan saat Anda perlu menyambung ke tabel S3 dari mesin kueri pihak ketiga yang mendukungApache Iceberg, membuat aplikasi ETL khusus yang memerlukan akses REST API langsung, atau saat Anda memerlukan kontrol atas operasi katalog tanpa dependensi pada Katalog Data. AWS Glue
-
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 pekerjaan. AWS Glue
- Amazon S3 Tables Iceberg REST endpoint
-
Prasyarat untuk menggunakan titik akhir Tabel Iceberg REST Amazon S3 untuk menjalankan pekerjaan ETL. AWS Glue
- Amazon S3 Tables Catalog for Gunung Es Apache
-
Prasyarat menggunakan Katalog Tabel Amazon S3 untuk menjalankan pekerjaan ETL. Apache Iceberg AWS Glue
Langkah 2 - Buat skrip untuk terhubung ke bucket tabel
Untuk mengakses data tabel 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 keranjang tabel Anda atau membuat skrip baru. Untuk informasi selengkapnya tentang membuat AWS Glue skrip, lihat Tutorial: Menulis skrip AWS Glue untuk 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 analisis Tabel S3 (Disarankan)
-
Titik akhir Tabel Amazon S3 Iceberg REST
-
Katalog Tabel Amazon S3 untuk Apache Iceberg
Pilih dari metode akses berikut untuk melihat instruksi 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 Mengintegrasikan bucket tabel Anda dengan layanan analitik AWS
Anda dapat mengonfigurasi koneksi ke keranjang meja Anda melalui Spark sesi dalam pekerjaan atau dengan AWS Glue Studio sihir 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 agar terhubung ke keranjang tabel menggunakan integrasi.
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()
- Menggunakan AWS Glue
sesi interaktif
-
Jika Anda menggunakan sesi notebook interaktif dengan AWS Glue
5.0, tentukan konfigurasi yang sama menggunakan %%configure
sihir 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 keranjang meja Anda melalui Spark sesi dalam pekerjaan atau dengan AWS Glue Studio sihir 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 agar terhubung ke keranjang tabel menggunakan titik akhir.
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()
- Menggunakan AWS Glue
sesi interaktif
Jika Anda menggunakan sesi notebook interaktif dengan AWS Glue 5.0, tentukan konfigurasi yang sama menggunakan %%configure
sihir 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 toples katalog terbaru dan mengunggahnya ke ember 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 keranjang meja Anda melalui Spark sesi dalam pekerjaan atau dengan AWS Glue Studio sihir 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 agar terhubung ke bucket tabel Anda menggunakan file. JAR Ganti nilai placeholder dengan informasi untuk bucket tabel Anda sendiri.
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()
- Menggunakan AWS Glue
sesi interaktif
-
Jika Anda menggunakan sesi notebook interaktif dengan AWS Glue 5.0, tentukan konfigurasi yang sama menggunakan %%configure
sihir 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 pekerjaan. AWS Glue Skrip ini terhubung ke bucket tabel Anda dan menjalankan kueri untuk: membuat namespace baru, membuat tabel sampel, menyisipkan 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.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 Gunung Es Apache
-
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()
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 Menulis lowongan AWS Glue 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 Job details dan masukkan yang berikut ini untuk properti Basic.
-
Untuk Nama, masukkan nama untuk pekerjaan itu.
-
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 Lanjutan, dan untuk JARs jalur Dependent, masukkan URI S3 dari jar katalog klien yang Anda unggah ke bucket S3 sebagai prasyarat. Misalnya, s3://amzn-s3-demo-bucket1
/jars
tables-catalog-for-iceberg/s3- -runtime- .jar 0.1.5
-
Pilih Simpan untuk membuat pekerjaan.
-
Pilih Jalankan mulai pekerjaan, dan tinjau status pekerjaan di bawah tab Jalankan.
Prosedur berikut menunjukkan cara menggunakan AWS CLI untuk membuat pekerjaan ETL yang menanyakan tabel S3 Anda. Untuk menggunakan perintah ganti placeholder
values
dengan perintah 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 --default-arguments
menggunakan parameter. --extra-jars
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