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:
Prasyarat
Sebelum Anda dapat melakukan kueri tabel dari AWS Glue pekerjaan, Anda harus mengonfigurasi peran IAM yang AWS Glue dapat digunakan untuk menjalankan pekerjaan, dan mengunggah Katalog Apache Iceberg JAR Tabel Amazon S3 ke bucket S3 AWS Glue yang dapat diakses saat menjalankan pekerjaan.
-
Integrasikan bucket tabel Anda dengan layanan AWS analitik.
-
Buat peran IAM untuk AWS Glue.
-
(Opsional) Jika Anda menggunakan Katalog Tabel Amazon S3 untuk Apache Iceberg Anda perlu mengunduh katalog klien JAR dan mengunggahnya ke ember S3.
Mengunduh katalog JAR
-
Periksa versi terbaru di Maven Central. Anda dapat mengunduh JAR dari pusat Maven menggunakan browser Anda, atau menggunakan perintah berikut. Pastikan untuk mengganti version number
dengan versi terbaru.
wget https://repo1.maven.org/maven2/software/amazon/s3tables/s3-tables-catalog-for-iceberg-runtime/0.1.5
/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar
-
Unggah unduhan JAR ke bucket S3 yang dapat diakses oleh peran AWS Glue IAM Anda. Anda dapat menggunakan AWS CLI perintah berikut untuk mengunggah fileJAR. Pastikan untuk mengganti version number
dengan versi terbaru, dan bucket name
dan path
dengan versi Anda sendiri.
aws s3 cp s3-tables-catalog-for-iceberg-runtime-0.1.5
.jar s3://amzn-s3-demo-bucket
/jars/
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 Tabel S3 dengan layanan AWS analitik
-
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
-
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
:s3tablescatalog/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
:s3tablescatalog/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()
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