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 merilis 7.8.0 dan yang lebih tinggi, Anda dapat memanfaatkan Lake AWS Formation with Glue Data Catalog di mana peran runtime pekerjaan memiliki izin tabel lengkap tanpa batasan kontrol akses berbutir 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 Lake Formation dan cara menggunakannya dengan Amazon EMR di EC2.
Menggunakan Lake Formation dengan akses meja penuh
Anda dapat mengakses tabel katalog Data Glue 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 AWS Lake Formation di Amazon EMR pada aplikasi EC2. Ketika pekerjaan Spark dikonfigurasi untuk Akses Tabel Penuh (FTA), kredensyal AWS Lake Formation digunakan untuk data read/write S3 untuk tabel terdaftar AWS Lake Formation, sedangkan kredensyal peran runtime pekerjaan akan digunakan untuk tabel yang tidak terdaftar di Lake Formation. read/write AWS
penting
Jangan aktifkan AWS Lake Formation untuk kontrol akses berbutir halus. Pekerjaan tidak dapat secara bersamaan menjalankan Full Table Access (FTA) dan Fine-Grained Access Control (FGAC) pada cluster EMR atau aplikasi yang sama.
Langkah 1: Aktifkan Akses Tabel Penuh di Lake Formation
Untuk menggunakan mode Akses Tabel Penuh (FTA), Anda harus mengizinkan mesin kueri pihak ketiga mengakses data tanpa validasi tag sesi IAM di Lake Formation AWS . Untuk mengaktifkan, ikuti langkah-langkah dalam Integrasi 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 dasar, selain izin Lake Formation, peran runtime pekerjaan memerlukan izin lakeformation:GetDataAccess IAM. Dengan izin ini, Lake Formation memberikan permintaan kredensyal 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 AWS Glue API, dan izin untuk mengakses Lake Formation.
Langkah 2.1 Konfigurasikan izin Lake Formation
Pekerjaan percikan yang membaca data dari S3 memerlukan izin Lake Formation SELECT.
Memicu pekerjaan yang write/delete data di S3 memerlukan izin Lake Formation ALL (SUPER).
Pekerjaan Spark yang berinteraksi dengan katalog Glue Data memerlukan izin DESCRIPTION, ALTER, DROP yang sesuai.
Untuk informasi selengkapnya, lihat Pemberian izin pada sumber daya Katalog Data.
Langkah 3: Inisialisasi sesi Spark untuk Akses Tabel Penuh menggunakan Lake Formation
Prasyarat
AWS Glue Data Catalog harus dikonfigurasi sebagai metastore untuk mengakses tabel Lake Formation.
Atur pengaturan berikut untuk mengkonfigurasi 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 disetel selama inisialisasi Spark untuk mengonfigurasi Spark agar menggunakan kredensyal Lake Formation AWS .
-
spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: Konfigurasikan Sistem File EMR (EMRFS) atau EMR S3A untuk menggunakan kredensyal Lake Formation S3 untuk tabel terdaftar Lake AWS Formation. Jika tabel tidak terdaftar, gunakan kredensyal peran runtime pekerjaan. -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=truedanspark.hadoop.fs.s3.folderObject.autoAction.disabled=true: Konfigurasikan EMRFS untuk menggunakan aplikasi header tipe konten/x-directory alih-alih akhiran $folder$ saat membuat folder S3. Ini diperlukan saat membaca tabel Lake Formation, karena kredensyal 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 kredensyal Lake Formation untuk memverifikasi lokasi kosong hanya tersedia setelah pembuatan tabel Katalog Data Glue. Tanpa konfigurasi ini, kredensyal peran runtime job 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 kredensyal Lake Formation untuk membuat folder S3 hanya tersedia setelah pembuatan tabel Glue Data Catalog. -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: Konfigurasikan Spark untuk menjatuhkan folder S3 sebelum penghapusan tabel di metastore Hive. Ini diperlukan untuk tabel terdaftar Lake Formation, karena kredensyal Lake Formation untuk menjatuhkan folder S3 tidak tersedia setelah penghapusan tabel dari Katalog Data Glue. -
spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true: Konfigurasikan katalog Gunung Es untuk menggunakan kredensyal AWS Lake Formation S3 untuk tabel terdaftar Lake Formation. Jika tabel tidak terdaftar, gunakan kredensyal lingkungan default.
Konfigurasikan mode akses tabel penuh di SageMaker Unified Studio
Untuk mengakses tabel terdaftar Lake Formation dari sesi Spark interaktif di JupyterLab notebook, gunakan mode izin kompatibilitas. Gunakan perintah ajaib %%configure untuk mengatur konfigurasi Spark Anda. Pilih konfigurasi berdasarkan jenis tabel Anda:
Ganti placeholder:
S3_DATA_LOCATION: Jalur ember S3 AndaREGION: 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 kredensyal AWS Lake Formation untuk mengakses data tabel.
CREATE TABLE
ALTER TABLE
MASUKKAN KE
MASUKKAN TIMPA
UPDATE
BERGABUNG MENJADI
DELETE FROM
MENGANALISIS TABEL
MEJA PERBAIKAN
MEJA DROP
Percikan 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
$folder$akhiran 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
$folder$akhiran dalam nama folder di S3. Ini dapat dicapai dengan mengatur konfigurasispark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueSpark.Buat folder S3 di lokasi tabel
s3://path/to/table/table_namemenggunakan konsol S3 atau AWS AWS S3 CLI.
Akses Tabel Lengkap didukung dengan EMR Filesystem (EMRFS) yang dimulai di Amazon EMR rilis 7.8.0, dan dengan sistem file S3A dimulai pada rilis Amazon EMR 7.10.0.
Akses Tabel Penuh didukung untuk tabel Hive, Iceberg, Delta, dan Hudi.
Pertimbangan Hudi FTA Write Support:
Hudi FTA menulis require using HoodieCredentialedHadoopStorage for credential vending selama eksekusi pekerjaan. Atur konfigurasi berikut saat menjalankan pekerjaan Hudi:
hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorageDukungan tulis Akses Tabel Lengkap (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 khusus atau non-default mungkin tidak sepenuhnya didukung dan dapat mengakibatkan perilaku yang tidak terduga.
Pengelompokan untuk tabel Hudi Merge-On-Read (MOR) tidak didukung pada saat 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 Lake AWS Formation untuk kontrol akses berbutir halus.
Akses tabel penuh tidak mendukung Spark Streaming.
Saat menulis Spark DataFrame ke tabel Lake Formation, 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 kredensyal dalam pekerjaan Spark, pekerjaan 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 Lake Formation untuk peran.
Hudi FTA Write Support - 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:
| Tipe Tabel | Operasi | Perintah Tulis SQL | Status |
|---|---|---|---|
| LEMBU | INSERT | MASUKKAN KE DALAM TABEL | Didukung |
| LEMBU | INSERT | MASUKKAN KE DALAM TABEL - PARTISI (Statis, Dinamis) | Didukung |
| LEMBU | INSERT | MASUKKAN TIMPA | Didukung |
| LEMBU | INSERT | INSERT OVERWRITE - PARTISI (Statis, Dinamis) | Didukung |
| UPDATE | UPDATE | PERBARUI TABEL | Didukung |
| LEMBU | UPDATE | PERBARUI TABEL - Ubah Partisi | Tidak Didukung |
| DELETE | DELETE | HAPUS DARI TABEL | Didukung |
| MENGUBAH | MENGUBAH | UBAH TABEL - GANTI NAMA MENJADI | Tidak Didukung |
| LEMBU | MENGUBAH | MENGUBAH TABEL - MENGATUR TBLPROPERTIES | Didukung |
| LEMBU | MENGUBAH | MENGUBAH TABEL - UNSET TBLPROPERTIES | Didukung |
| LEMBU | MENGUBAH | MENGUBAH TABEL - MENGUBAH KOLOM | Didukung |
| LEMBU | MENGUBAH | MENGUBAH TABEL - TAMBAHKAN KOLOM | Didukung |
| LEMBU | MENGUBAH | MENGUBAH TABEL - TAMBAHKAN PARTISI | Didukung |
| LEMBU | MENGUBAH | UBAH TABEL - JATUHKAN PARTISI | Didukung |
| LEMBU | MENGUBAH | MENGUBAH TABEL - MEMULIHKAN PARTISI | Didukung |
| LEMBU | MENGUBAH | MEMPERBAIKI PARTISI SINKRONISASI TABEL | Didukung |
| MENJATUHKAN | MENJATUHKAN | MEJA DROP | Didukung |
| LEMBU | MENJATUHKAN | DROP TABLE - MEMBERSIHKAN | Didukung |
| CREATE | CREATE | BUAT TABEL - Dikelola | Didukung |
| LEMBU | CREATE | BUAT TABEL - PARTISI OLEH | Didukung |
| LEMBU | CREATE | BUAT TABEL JIKA TIDAK ADA | Didukung |
| LEMBU | CREATE | BUAT TABEL SEPERTI | Didukung |
| LEMBU | CREATE | BUAT TABEL SEBAGAI PILIH | Didukung |
| CREATE | CREATE | BUAT TABEL dengan LOKASI - Tabel Eksternal | Tidak Didukung |
| KERANGKA DATA (SISIPKAN) | KERANGKA DATA (SISIPKAN) | saveAsTable.Menimpa | Didukung |
| LEMBU | KERANGKA DATA (SISIPKAN) | saveAsTable.Menambahkan | Tidak Didukung |
| LEMBU | KERANGKA DATA (SISIPKAN) | saveAsTable.Abaikan | Didukung |
| LEMBU | KERANGKA DATA (SISIPKAN) | saveAsTable.ErrorIfExists | Didukung |
| LEMBU | KERANGKA DATA (SISIPKAN) | saveAsTable - Tabel eksternal (Path) | Tidak Didukung |
| LEMBU | KERANGKA DATA (SISIPKAN) | simpan (jalur) - DF v1 | Tidak Didukung |
| MOR | INSERT | MASUKKAN KE DALAM TABEL | Didukung |
| MOR | INSERT | MASUKKAN KE DALAM TABEL - PARTISI (Statis, Dinamis) | Didukung |
| MOR | INSERT | MASUKKAN TIMPA | Didukung |
| MOR | INSERT | INSERT OVERWRITE - PARTISI (Statis, Dinamis) | Didukung |
| UPDATE | UPDATE | PERBARUI TABEL | Didukung |
| MOR | UPDATE | PERBARUI TABEL - Ubah Partisi | Tidak Didukung |
| DELETE | DELETE | HAPUS DARI TABEL | Didukung |
| MENGUBAH | MENGUBAH | UBAH TABEL - GANTI NAMA MENJADI | Tidak Didukung |
| MOR | MENGUBAH | MENGUBAH TABEL - MENGATUR TBLPROPERTIES | Didukung |
| MOR | MENGUBAH | MENGUBAH TABEL - UNSET TBLPROPERTIES | Didukung |
| MOR | MENGUBAH | MENGUBAH TABEL - MENGUBAH KOLOM | Didukung |
| MOR | MENGUBAH | MENGUBAH TABEL - TAMBAHKAN KOLOM | Didukung |
| MOR | MENGUBAH | MENGUBAH TABEL - TAMBAHKAN PARTISI | Didukung |
| MOR | MENGUBAH | UBAH TABEL - JATUHKAN PARTISI | Didukung |
| MOR | MENGUBAH | MENGUBAH TABEL - MEMULIHKAN PARTISI | Didukung |
| MOR | MENGUBAH | MEMPERBAIKI PARTISI SINKRONISASI TABEL | Didukung |
| MENJATUHKAN | MENJATUHKAN | MEJA DROP | Didukung |
| MOR | MENJATUHKAN | DROP TABLE - MEMBERSIHKAN | Didukung |
| CREATE | CREATE | BUAT TABEL - Dikelola | Didukung |
| MOR | CREATE | BUAT TABEL - PARTISI OLEH | Didukung |
| MOR | CREATE | BUAT TABEL JIKA TIDAK ADA | Didukung |
| MOR | CREATE | BUAT TABEL SEPERTI | Didukung |
| MOR | CREATE | BUAT TABEL SEBAGAI PILIH | Didukung |
| CREATE | CREATE | BUAT TABEL dengan LOKASI - Tabel Eksternal | Tidak Didukung |
| KERANGKA DATA (UPSERT) | KERANGKA DATA (UPSERT) | saveAsTable.Menimpa | Didukung |
| MOR | KERANGKA DATA (UPSERT) | saveAsTable.Menambahkan | Tidak Didukung |
| MOR | KERANGKA DATA (UPSERT) | saveAsTable.Abaikan | Didukung |
| MOR | KERANGKA DATA (UPSERT) | saveAsTable.ErrorIfExists | Didukung |
| MOR | KERANGKA DATA (UPSERT) | saveAsTable - Tabel eksternal (Path) | Tidak Didukung |
| MOR | KERANGKA DATA (UPSERT) | simpan (jalur) - DF v1 | Tidak Didukung |
| KERANGKA DATA (HAPUS) | KERANGKA DATA (HAPUS) | saveAsTable.Menambahkan | Tidak Didukung |
| MOR | KERANGKA DATA (HAPUS) | saveAsTable - Tabel eksternal (Path) | Tidak Didukung |
| MOR | KERANGKA DATA (HAPUS) | simpan (jalur) - DF v1 | Tidak Didukung |
| KERANGKA DATA (BULK_INSERT) | KERANGKA DATA (BULK_INSERT) | saveAsTable.Menimpa | Didukung |
| MOR | KERANGKA DATA (BULK_INSERT) | saveAsTable.Menambahkan | Tidak Didukung |
| MOR | KERANGKA DATA (BULK_INSERT) | saveAsTable.Abaikan | Didukung |
| MOR | KERANGKA DATA (BULK_INSERT) | saveAsTable.ErrorIfExists | Didukung |
| MOR | KERANGKA DATA (BULK_INSERT) | saveAsTable - Tabel eksternal (Path) | Tidak Didukung |
| MOR | KERANGKA DATA (BULK_INSERT) | simpan (jalur) - DF v1 | Tidak Didukung |