View a markdown version of this page

Akses meja lengkap Lake Formation untuk Amazon EMR di EC2 - Amazon EMR

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Akses meja lengkap Lake Formation untuk Amazon EMR di EC2

Dengan Amazon EMR rilis 7.8.0 dan yang lebih tinggi, Anda dapat memanfaatkan AWS Lake Formation dengan Katalog Data Glue di mana peran runtime pekerjaan memiliki izin tabel penuh tanpa batasan kontrol akses yang halus. Kemampuan ini memungkinkan Anda membaca dan menulis ke tabel yang dilindungi oleh Lake Formation dari Amazon EMR Anda pada batch EC2 Spark dan pekerjaan interaktif. Lihat bagian berikut untuk mempelajari lebih lanjut tentang Formasi Danau dan cara menggunakannya dengan Amazon EMR di EC2.

Menggunakan Formasi Danau dengan akses meja penuh

Anda dapat mengakses tabel katalog Glue Data yang dilindungi AWS Lake Formation dari Amazon EMR pada pekerjaan EC2 Spark atau sesi interaktif di mana peran runtime pekerjaan memiliki akses tabel penuh. Anda tidak perlu mengaktifkan Formasi AWS Danau di Amazon EMR pada aplikasi EC2. Ketika pekerjaan Spark dikonfigurasi untuk Akses Tabel Penuh (FTA), kredenSIAL AWS Lake Formation digunakan untuk data read/write S3 untuk tabel terdaftar AWS Lake Formation, sedangkan kredenSIAL peran runtime pekerjaan akan digunakan untuk read/write tabel yang tidak terdaftar dengan AWS Lake Formation.

penting

Jangan aktifkan Formasi AWS Danau untuk kontrol akses berbutir halus. Pekerjaan tidak dapat secara bersamaan menjalankan Full Table Access (FTA) dan Fine-Grained Access Control (FGAC) pada cluster atau aplikasi EMR yang sama.

Langkah 1: Aktifkan Akses Meja Penuh di Formasi Danau

Untuk menggunakan mode Full Table Access (FTA), Anda harus mengizinkan mesin kueri pihak ketiga mengakses data tanpa validasi tag sesi IAM di AWS Lake Formation. Untuk mengaktifkan, ikuti langkah-langkah dalam Integr asi aplikasi untuk akses tabel penuh.

catatan

Saat mengakses tabel lintas akun, akses tabel penuh harus diaktifkan di akun produsen dan konsumen. Dengan cara yang sama, saat mengakses tabel lintas wilayah, pengaturan ini harus diaktifkan di wilayah produsen dan konsumen.

Langkah 2: Siapkan izin IAM untuk peran runtime pekerjaan

Untuk akses baca atau tulis ke data yang mendasarinya, selain izin Lake Formation, peran runtime pekerjaan memerlukan izin lakeformation:GetDataAccess IAM. Dengan izin ini, Lake Formation memberikan permintaan kredenSIAL sementara untuk mengakses data.

Berikut ini adalah contoh kebijakan tentang cara memberikan izin IAM untuk mengakses skrip di Amazon S3, mengunggah log ke S3, izin Glu AWS e API, dan izin untuk mengakses Lake Formation.

Langkah 2.1 Konfigurasikan izin Formasi Danau

  • Pekerjaan Spark yang membaca data dari S3 memerlukan izin Lake Formation SELECT.

  • Spark jobs yang write/delete data di S3 memerlukan izin Lake Formation ALL (SUPER).

  • Pekerjaan Spark yang berinteraksi dengan katalog Data Glue memerlukan izin DESCRIBE, ALTER, DROP yang sesuai.

Untuk informasi selengkapnya, lihat Mem berikan izin pada sumber daya Katalog Data.

Langkah 3: Inisialisasi sesi Spark untuk Akses Meja Penuh menggunakan Formasi Danau

Prasyarat

AWS Katalog Data Lem harus dikonfigurasi sebagai metastore untuk mengakses tabel Formasi Danau.

Tetapkan pengaturan berikut untuk mengonfigurasi katalog Glue sebagai metastore:

--conf spark.sql.catalogImplementation=hive --conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory

Untuk informasi selengkapnya tentang mengaktifkan Katalog Data untuk Amazon EMR di EC2, lihat Konfigurasi Metastore untuk Amazon EMR di EC2.

Untuk mengakses tabel yang terdaftar dengan AWS Lake Formation, konfigurasi berikut perlu diatur selama inisialisasi Spark untuk mengonfigurasi Spark untuk menggunakan kredenSIAL AWS Lake Formation.

Hive
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Iceberg
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=S3_DATA_LOCATION --conf spark.sql.catalog.spark_catalog.client.region=REGION --conf spark.sql.catalog.spark_catalog.type=glue --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.lakeformation-enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Delta Lake
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Hudi
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true --conf spark.jars=/usr/lib/hudi/hudi-spark-bundle.jar --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog --conf spark.serializer=org.apache.spark.serializer.KryoSerializer
  • spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: Konfigurasikan EMR Filesystem (EMRFS) atau EMR S3A untuk menggunakan kredenSIAL Lake Formation S3 untuk AWS tabel terdaftar Lake Formation. Jika tabel tidak terdaftar, gunakan kredentif peran runtime pekerjaan.

  • spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=truedanspark.hadoop.fs.s3.folderObject.autoAction.disabled=true: Konfigurasikan EMRFS untuk menggunakan header tipe konten application/x -direktori alih-alih akhiran $folder$ saat membuat folder S3. Ini diperlukan saat membaca tabel Formasi Danau, karena kredenSIAL Lake Formation tidak mengizinkan membaca folder tabel dengan akhiran $folder$.

  • spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true: Konfigurasikan Spark untuk melewati validasi kekosongan lokasi tabel sebelum pembuatan. Ini diperlukan untuk tabel terdaftar Lake Formation, karena kredenSIAL Lake Formation untuk memverifikasi lokasi kosong hanya tersedia setelah pembuatan tabel Katalog Data Glue. Tanpa konfigurasi ini, kredentif peran runtime pekerjaan akan memvalidasi lokasi tabel kosong.

  • spark.sql.catalog.createDirectoryAfterTable.enabled=true: Konfigurasikan Spark untuk membuat folder Amazon S3 setelah pembuatan tabel di metastore Hive. Ini diperlukan untuk tabel terdaftar Lake Formation, karena kredenSIAL Lake Formation untuk membuat folder S3 hanya tersedia setelah pembuatan tabel Katalog Data Glue.

  • spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: Konfigurasikan Spark untuk melepaskan folder S3 sebelum penghapusan tabel di metastore Hive. Ini diperlukan untuk tabel terdaftar Lake Formation, karena kredenSIAL Lake Formation untuk melepaskan folder S3 tidak tersedia setelah penghapusan tabel dari Katalog Data Glue.

  • spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true: Konfigurasikan katalog Iceberg untuk menggunakan kreden AWS SIAL Lake Formation S3 untuk tabel terdaftar Danau Formation. Jika tabel tidak terdaftar, gunakan kredentif lingkungan default.

Konfigurasikan mode akses tabel penuh di SageMaker Unified Studio

Untuk mengakses tabel terdaftar Lake Formation dari sesi Spark interaktif di JupyterLab buku catatan, gunakan mode izin kompatibilitas. Gunakan perintah %%configure magic untuk mengatur konfigurasi Spark Anda. Pilih konfigurasi berdasarkan jenis tabel Anda:

For Hive tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true } }
For Iceberg tables
%%configure -f { "conf": { "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.warehouse": "S3_DATA_LOCATION", "spark.sql.catalog.spark_catalog.client.region": "REGION", "spark.sql.catalog.spark_catalog.type": "glue", "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID", "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true", } }
For Delta Lake tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true } }
For Hudi tables
%%configure -f { "conf": { "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": true, "spark.hadoop.fs.s3.folderObject.autoAction.disabled": true, "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": true, "spark.sql.catalog.createDirectoryAfterTable.enabled": true, "spark.sql.catalog.dropDirectoryBeforeTable.enabled": true, "spark.jars": "/usr/lib/hudi/hudi-spark-bundle.jar", "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog", "spark.serializer": "org.apache.spark.serializer.KryoSerializer" } }

Ganti placeholder:

  • S3_DATA_LOCATION: Jalur bucket S3 Anda

  • REGION: AWS wilayah (misalnya, us-east-1)

  • ACCOUNT_ID: ID AWS akun Anda

catatan

Anda harus mengatur konfigurasi ini sebelum menjalankan operasi Spark apa pun di buku catatan Anda.

Operasi yang Didukung

Operasi ini akan menggunakan kredenSIAL AWS Lake Formation untuk mengakses data tabel.

  • CREATE TABLE

  • ALTER TABLE

  • MASUKKAN KE

  • MASUKKAN OVERWRITE

  • UPDATE

  • BERGABUNG MENJADI

  • DELETE FROM

  • MENGANALISIS TABEL

  • MEJA PERBAIKAN

  • MEJA DROP

  • Spark kueri sumber data

  • Sumber data Spark menulis

catatan

Operasi yang tidak tercantum di atas akan terus menggunakan izin IAM untuk mengakses data tabel.

Pertimbangan-pertimbangan

  • Jika tabel Hive dibuat menggunakan pekerjaan yang tidak mengaktifkan akses tabel penuh, dan tidak ada catatan yang disisipkan, pembacaan atau penulisan berikutnya dari pekerjaan dengan akses tabel penuh akan gagal. Ini karena EMR Spark tanpa akses tabel penuh menambahkan akh $folder$ iran ke nama folder tabel. Untuk mengatasi ini, Anda dapat:

    • Masukkan setidaknya satu baris ke dalam tabel dari pekerjaan yang tidak mengaktifkan FTA.

    • Konfigurasikan pekerjaan yang tidak mengaktifkan FTA untuk tidak menggunakan akh $folder$ iran dalam nama folder di S3. Ini dapat dicapai dengan mengatur konfigurasi Sparkspark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true.

    • Buat folder S3 di lokasi tabel s3://path/to/table/table_name menggunakan konsol AWS S3 atau AWS S3 CLI.

  • Akses Tabel Penuh didukung dengan EMR Filesystem (EMRFS) mulai dari Amazon EMR rilis 7.8.0, dan dengan sistem file S3A mulai dari Amazon EMR rilis 7.10.0.

  • Akses Meja Penuh didukung untuk tabel Hive, Iceberg, Delta, dan Hudi.

  • Pertimbangan Dukungan Penulisan Hudi FTA:

    • Penulisan Hudi FTA memerlukan penggunaan HoodieCredentialedHadoopStorage untuk penjual otomatis kredenSIAL selama pelaksanaan pekerjaan. Atur konfigurasi berikut saat menjalankan tugas Hudi: hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorage

    • Dukungan penulisan Full Table Access (FTA) untuk Hudi tersedia mulai dari Amazon EMR rilis 7.12.

    • Dukungan penulisan Hudi FTA saat ini hanya berfungsi dengan konfigurasi Hudi default. Pengaturan Hudi kustom atau non-default mungkin tidak didukung sepenuhnya dan dapat mengakibatkan perilaku yang tidak terduga.

    • Pengelompokan untuk tabel Hudi Merge-On-Read (MOR) tidak didukung pada titik ini di bawah mode tulis FTA.

  • Pekerjaan yang mereferensikan tabel dengan aturan Lake Formation Fine-Grained Access Control (FGAC) atau Tampilan Katalog Data Glue akan gagal. Untuk menanyakan tabel dengan aturan FGAC atau Tampilan Katalog Data Glue, Anda harus menggunakan mode FGAC. Anda dapat mengaktifkan mode FGAC dengan mengikuti langkah-langkah yang diuraikan dalam AWS dokumentasi: Menggunakan Amazon EMR di EC2 dengan Formasi AWS Danau untuk kontrol akses yang halus.

  • Akses tabel penuh tidak mendukung Spark Streaming.

  • Saat menulis Spark DataFrame ke tabel Formasi Danau, hanya mode APPEND yang didukung untuk tabel Hive dan Iceberg: df.write.mode("append").saveAsTable(table_name)

  • Membuat tabel eksternal memerlukan izin IAM.

  • Karena Lake Formation menyimpan sementara kredentif dalam pekerjaan Spark, tugas batch Spark atau sesi interaktif yang sedang berjalan mungkin tidak mencerminkan perubahan izin.

  • Anda harus menggunakan peran yang ditentukan pengguna dan bukan peran terkait layanan: Persyaratan Formasi Danau untuk peran.

Dukungan Penulisan Hudi FTA - Operasi yang Didukung

Tabel berikut menunjukkan operasi penulisan yang didukung untuk tabel Hudi Copy-On-Write (COW) dan Merge-On-Read (MOR) di bawah mode Akses Tabel Penuh:

Hudi FTA Didukung Operasi Penulisan
Tipe Tabel Operasi Perintah Tulis SQL Status
SAPI INSERT MASUKKAN KE DALAM TABEL Didukung
SAPI INSERT MASUKKAN KE DALAM TABEL - PARTISI (Statis, Dinamis) Didukung
SAPI INSERT MASUKKAN OVERWRITE Didukung
SAPI INSERT MASUKKAN OVERWRITE - PARTISI (Statis, Dinamis) Didukung
UPDATE UPDATE PERBARUI TABEL Didukung
SAPI UPDATE TABEL PERBARUI - Ubah Partisi Tidak Didukung
DELETE DELETE HAPUS DARI TABEL Didukung
MENGUBAH MENGUBAH UBAH TABEL - GANTI NAMA MENJADI Tidak Didukung
SAPI MENGUBAH UBAH TABEL - ATUR TBLPROPERTIES Didukung
SAPI MENGUBAH UBAH TABEL - TIDAK DISETEL TBLPROPERTIES Didukung
SAPI MENGUBAH MENGUBAH TABEL - MENGUBAH KOLOM Didukung
SAPI MENGUBAH UBAH TABEL - TAMBAHKAN KOLOM Didukung
SAPI MENGUBAH UBAH TABEL - TAMBAHKAN PARTISI Didukung
SAPI MENGUBAH UBAH TABEL - JATUHKAN PARTISI Didukung
SAPI MENGUBAH UBAH TABEL - PULIHKAN PARTISI Didukung
SAPI MENGUBAH MEMPERBAIKI PARTISI SINKRONISASI TABEL Didukung
MENJATUHKAN MENJATUHKAN MEJA DROP Didukung
SAPI MENJATUHKAN DROP TABLE - MEMBERSIHKAN Didukung
CREATE CREATE BUAT TABEL - Dikelola Didukung
SAPI CREATE BUAT TABEL - PARTISI OLEH Didukung
SAPI CREATE BUAT TABEL JIKA TIDAK ADA Didukung
SAPI CREATE BUAT TABEL SEPERTI Didukung
SAPI CREATE BUAT TABEL SEBAGAI PILIHAN Didukung
CREATE CREATE BUAT TABEL dengan LOKASI - Tabel Eksternal Tidak Didukung
KERANGKA DATA (SISIPKAN) KERANGKA DATA (SISIPKAN) menyimpan AsTable.Overwrite Didukung
SAPI KERANGKA DATA (SISIPKAN) menyimpan AsTable.Append Tidak Didukung
SAPI KERANGKA DATA (SISIPKAN) menyimpan AsTable.Ignore Didukung
SAPI KERANGKA DATA (SISIPKAN) menyimpan AsTable.ErrorIfExists Didukung
SAPI KERANGKA DATA (SISIPKAN) simpan AsTable - Tabel eksternal (Jalur) Tidak Didukung
SAPI KERANGKA DATA (SISIPKAN) simpan (jalur) - DF v1 Tidak Didukung
MAMA INSERT MASUKKAN KE DALAM TABEL Didukung
MAMA INSERT MASUKKAN KE DALAM TABEL - PARTISI (Statis, Dinamis) Didukung
MAMA INSERT MASUKKAN OVERWRITE Didukung
MOM INSERT MASUKKAN OVERWRITE - PARTISI (Statis, Dinamis) Didukung
UPDATE UPDATE PERBARUI TABEL Didukung
MOM UPDATE TABEL PERBARUI - Ubah Partisi Tidak Didukung
DELETE DELETE HAPUS DARI TABEL Didukung
MENGUBAH MENGUBAH UBAH TABEL - GANTI NAMA MENJADI Tidak Didukung
MOM MENGUBAH UBAH TABEL - ATUR TBLPROPERTIES Didukung
MOM MENGUBAH UBAH TABEL - TIDAK DISETEL TBLPROPERTIES Didukung
MOM MENGUBAH MENGUBAH TABEL - MENGUBAH KOLOM Didukung
MOM MENGUBAH UBAH TABEL - TAMBAHKAN KOLOM Didukung
MOM MENGUBAH UBAH TABEL - TAMBAHKAN PARTISI Didukung
MOM MENGUBAH UBAH TABEL - JATUHKAN PARTISI Didukung
MOM MENGUBAH UBAH TABEL - PULIHKAN PARTISI Didukung
MOM MENGUBAH MEMPERBAIKI PARTISI SINKRONISASI TABEL Didukung
MENJATUHKAN MENJATUHKAN MEJA DROP Didukung
MOM MENJATUHKAN DROP TABLE - MEMBERSIHKAN Didukung
CREATE CREATE BUAT TABEL - Dikelola Didukung
MOM CREATE BUAT TABEL - PARTISI OLEH Didukung
MOM CREATE BUAT TABEL JIKA TIDAK ADA Didukung
MOM CREATE BUAT TABEL SEPERTI Didukung
MOM CREATE BUAT TABEL SEBAGAI PILIHAN Didukung
CREATE CREATE BUAT TABEL dengan LOKASI - Tabel Eksternal Tidak Didukung
KERANGKA DATA (UPGRADE) KERANGKA DATA (UPGRADE) menyimpan AsTable.Overwrite Didukung
MOM KERANGKA DATA (UPGRADE) menyimpan AsTable.Append Tidak Didukung
MOM KERANGKA DATA (UPGRADE) menyimpan AsTable.Ignore Didukung
MOM KERANGKA DATA (UPGRADE) menyimpan AsTable.ErrorIfExists Didukung
MOM KERANGKA DATA (UPGRADE) simpan AsTable - Tabel eksternal (Jalur) Tidak Didukung
MOM KERANGKA DATA (UPGRADE) simpan (jalur) - DF v1 Tidak Didukung
KERANGKA DATA (HAPUS) KERANGKA DATA (HAPUS) menyimpan AsTable.Append Tidak Didukung
MAMA KERANGKA DATA (HAPUS) simpan AsTable - Tabel eksternal (Jalur) Tidak Didukung
MOM KERANGKA DATA (HAPUS) simpan (jalur) - DF v1 Tidak Didukung
KERANGKA DATA (MASUK_MASUKKAN) KERANGKA DATA (MASUK_MASUKKAN) menyimpan AsTable.Overwrite Didukung
MOM KERANGKA DATA (MASUK_MASUKKAN) menyimpan AsTable.Append Tidak Didukung
MOM KERANGKA DATA (MASUK_MASUKKAN) menyimpan AsTable.Ignore Didukung
MOM KERANGKA DATA (MASUK_MASUKKAN) menyimpan AsTable.ErrorIfExists Didukung
MOM KERANGKA DATA (MASUK_MASUKKAN) simpan AsTable - Tabel eksternal (Jalur) Tidak Didukung
MOM KERANGKA DATA (MASUK_MASUKKAN) simpan (jalur) - DF v1 Tidak Didukung