View a markdown version of this page

Menjalankan pekerjaan ETL di tabel Amazon S3 dengan AWS Glue - Amazon Simple Storage Service

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.

catatan

Tabel S3 didukung pada AWS Glue versi 5.0 atau lebih tinggi.

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.

  • Buat peran IAM untuk AWS Glue.

    • Lampirkan AmazonS3TablesFullAccess kebijakan terkelola ke peran.

    • Lampirkan AmazonS3FullAccess kebijakan terkelola ke peran.

Amazon S3 Tables Catalog for Gunung Es Apache

Prasyarat menggunakan Katalog Tabel Amazon S3 Apache Iceberg untuk menjalankan tugas AWS Glue ETL.

  • Buat peran IAM untuk AWS Glue.

    • Lampirkan AmazonS3TablesFullAccess kebijakan terkelola ke peran.

    • Lampirkan AmazonS3FullAccess kebijakan terkelola ke peran.

    • Untuk menggunakan Katalog Tabel Amazon S3, Apache Iceberg Anda perlu mengunduh katalog klien JAR dan mengunggahnya ke bucket S3.

      Mengunduh katalog TOPLES
      1. Periksa versi terbaru di Maven Central. Anda dapat mengunduh JAR dari Maven central menggunakan browser Anda, atau menggunakan perintah berikut. Pastikan untuk menggant version number inya 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
      2. Unggah yang diunduh JAR ke bucket S3 yang dapat diakses oleh peran AWS Glue IAM Anda. Anda dapat menggunakan AWS CLI perintah berikut untuk mengunggahJAR. Pastikan untuk mengganti version number dengan versi terbaru, dan bucket name dan path dengan milik Anda sendiri.

        aws s3 cp s3-tables-catalog-for-iceberg-runtime-0.1.5.jar s3://amzn-s3-demo-bucket/jars/

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.

  1. Buka AWS Glue konsol di https://console.aws.amazon.com/glue/.

  2. Dari panel Navigasi, pilih pekerjaan ETL.

  3. Pilih Editor skrip, lalu pilih Unggah skrip dan unggah PySpark skrip yang Anda buat untuk menanyakan tabel S3.

  4. 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.

  5. (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

  6. Pilih Simpan untuk membuat pekerjaan.

  7. 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.

  1. 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"
    catatan

    (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"
  2. Mulai pekerjaan Anda.

    aws glue start-job-run \ --job-name etl-tables-job
  3. 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