Mempertahankan tabel dengan menggunakan pemadatan - AWS Panduan Preskriptif

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

Mempertahankan tabel dengan menggunakan pemadatan

Iceberg mencakup fitur yang memungkinkan Anda untuk melakukan operasi pemeliharaan tabel setelah menulis data ke tabel. Beberapa operasi pemeliharaan berfokus pada perampingan file metadata, sementara yang lain meningkatkan bagaimana data dikelompokkan dalam file sehingga mesin kueri dapat secara efisien menemukan informasi yang diperlukan untuk menanggapi permintaan pengguna. Bagian ini berfokus pada pengoptimalan terkait pemadatan.

Pemadatan gunung es

Di Iceberg, Anda dapat menggunakan pemadatan untuk melakukan empat tugas:

  • Menggabungkan file kecil menjadi file yang lebih besar yang umumnya berukuran lebih dari 100 MB. Teknik ini dikenal sebagai bin packing.

  • Menggabungkan menghapus file dengan file data. Hapus file dihasilkan oleh pembaruan atau penghapusan yang menggunakan merge-on-read pendekatan.

  • (Re) menyortir data sesuai dengan pola kueri. Data dapat ditulis tanpa urutan apapun atau dengan urutan yang cocok untuk menulis dan update.

  • Mengelompokkan data dengan menggunakan kurva pengisian ruang untuk mengoptimalkan pola kueri yang berbeda, terutama penyortiran urutan-z.

Pada AWS, Anda dapat menjalankan operasi pemadatan dan pemeliharaan tabel untuk Iceberg melalui Amazon Athena atau dengan menggunakan Spark di Amazon EMR atau. AWS Glue

Saat Anda menjalankan pemadatan dengan menggunakan prosedur rewrite_data_files, Anda dapat menyesuaikan beberapa kenop untuk mengontrol perilaku pemadatan. Diagram berikut menunjukkan perilaku default pengepakan bin. Memahami pemadatan kemasan bin adalah kunci untuk memahami penyortiran hierarkis dan implementasi penyortiran urutan-Z, karena mereka adalah ekstensi dari antarmuka pengemasan bin dan beroperasi dengan cara yang sama. Perbedaan utama adalah langkah tambahan yang diperlukan untuk menyortir atau mengelompokkan data.

Perilaku pengepakan bin default di tabel Iceberg

Dalam contoh ini, tabel Iceberg terdiri dari empat partisi. Setiap partisi memiliki ukuran dan jumlah file yang berbeda. Jika Anda memulai aplikasi Spark untuk menjalankan pemadatan, aplikasi membuat total empat grup file untuk diproses. Grup file adalah abstraksi Gunung Es yang mewakili kumpulan file yang akan diproses oleh satu pekerjaan Spark. Artinya, aplikasi Spark yang menjalankan pemadatan akan menciptakan empat pekerjaan Spark untuk memproses data.

Menyetel perilaku pemadatan

Properti kunci berikut mengontrol bagaimana file data dipilih untuk pemadatan:

  • MAX_FILE_GROUP_SIZE_BYTES menetapkan batas data untuk satu grup file (Spark job) pada 100 GB secara default. Properti ini sangat penting untuk tabel tanpa partisi atau tabel dengan partisi yang menjangkau ratusan gigabyte. Dengan menetapkan batas ini, Anda dapat memecah operasi untuk merencanakan pekerjaan dan membuat kemajuan sekaligus mencegah kehabisan sumber daya di cluster.

    Catatan: Setiap grup file diurutkan secara terpisah. Oleh karena itu, jika Anda ingin melakukan pengurutan tingkat partisi, Anda harus menyesuaikan batas ini agar sesuai dengan ukuran partisi.

  • MIN_FILE_SIZE_BYTES atau MIN_FILE_SIZE_DEFAULT_RATIO default ke 75 persen dari ukuran file target yang ditetapkan pada tingkat tabel. Misalnya, jika tabel memiliki ukuran target 512 MB, file apa pun yang lebih kecil dari 384 MB disertakan dalam kumpulan file yang akan dipadatkan.

  • MAX_FILE_SIZE_BYTES atau MAX_FILE_SIZE_DEFAULT_RATIO default 180 persen dari ukuran file target. Seperti dua properti yang mengatur ukuran file minimum, properti ini digunakan untuk mengidentifikasi file kandidat untuk pekerjaan pemadatan.

  • MIN_INPUT_FILES menentukan jumlah minimum file yang akan dipadatkan jika ukuran partisi tabel lebih kecil dari ukuran file target. Nilai properti ini digunakan untuk menentukan apakah layak untuk memadatkan file berdasarkan jumlah file (default ke 5).

  • DELETE_FILE_THRESHOLD menentukan jumlah minimum operasi penghapusan untuk file sebelum disertakan dalam pemadatan. Kecuali Anda menentukan sebaliknya, pemadatan tidak menggabungkan file hapus dengan file data. Untuk mengaktifkan fungsi ini, Anda harus menetapkan nilai ambang dengan menggunakan properti ini. Ambang batas ini khusus untuk file data individual, jadi jika Anda mengaturnya ke 3, file data akan ditulis ulang hanya jika ada tiga atau lebih file hapus yang mereferensikannya.

Properti ini memberikan wawasan tentang pembentukan kelompok file dalam diagram sebelumnya.

Misalnya, partisi berlabel month=01 mencakup dua grup file karena melebihi batasan ukuran maksimum 100 GB. Sebaliknya, month=02 partisi berisi satu grup file karena di bawah 100 GB. month=03Partisi tidak memenuhi persyaratan file input minimum default dari lima file. Akibatnya, itu tidak akan dipadatkan. Terakhir, meskipun month=04 partisi tidak berisi data yang cukup untuk membentuk satu file dengan ukuran yang diinginkan, file akan dipadatkan karena partisi mencakup lebih dari lima file kecil.

Anda dapat mengatur parameter ini untuk Spark yang berjalan di Amazon AWS Glue EMR atau. Untuk Amazon Athena, Anda dapat mengelola properti serupa dengan menggunakan properti tabel yang dimulai dengan awalanoptimize_).

Menjalankan pemadatan dengan Spark di Amazon EMR atau AWS Glue

Bagian ini menjelaskan cara mengukur cluster Spark dengan benar untuk menjalankan utilitas pemadatan Iceberg. Contoh berikut menggunakan Amazon EMR Tanpa Server, tetapi Anda dapat menggunakan metodologi yang sama di Amazon EMR di Amazon EC2 atau Amazon EKS, atau di. AWS Glue

Anda dapat memanfaatkan korelasi antara grup file dan pekerjaan Spark untuk merencanakan sumber daya cluster. Untuk memproses grup file secara berurutan, dengan mempertimbangkan ukuran maksimum 100 GB per grup file, Anda dapat mengatur properti Spark berikut:

  • spark.dynamicAllocation.enabled = FALSE

  • spark.executor.memory = 20 GB

  • spark.executor.instances = 5

Jika Anda ingin mempercepat pemadatan, Anda dapat menskalakan secara horizontal dengan meningkatkan jumlah grup file yang dipadatkan secara paralel. Anda juga dapat menskalakan EMR Amazon dengan menggunakan penskalaan manual atau dinamis.

  • Penskalaan secara manual (misalnya, dengan faktor 4)

    • MAX_CONCURRENT_FILE_GROUP_REWRITES= 4 (faktor kami)

    • spark.executor.instances= 5 (nilai yang digunakan dalam contoh) x 4 (faktor kami) = 20

    • spark.dynamicAllocation.enabled = FALSE

  • Penskalaan dinamis

    • spark.dynamicAllocation.enabled= TRUE (default, tidak ada tindakan yang diperlukan)

    • MAX_CONCURRENT_FILE_GROUP_REWRITES = N (sejajarkan nilai ini denganspark.dynamicAllocation.maxExecutors, yang 100 secara default; berdasarkan konfigurasi pelaksana dalam contoh, Anda dapat mengatur ke 20) N

    Ini adalah pedoman untuk membantu mengukur cluster. Namun, Anda juga harus memantau kinerja pekerjaan Spark Anda untuk menemukan pengaturan terbaik untuk beban kerja Anda.

Menjalankan pemadatan dengan Amazon Athena

Athena menawarkan implementasi utilitas pemadatan Iceberg sebagai fitur terkelola melalui pernyataan OPTIMIZE. Anda dapat menggunakan pernyataan ini untuk menjalankan pemadatan tanpa harus mengevaluasi infrastruktur.

Pernyataan ini mengelompokkan file kecil ke dalam file yang lebih besar dengan menggunakan algoritma pengemasan bin dan menggabungkan file hapus dengan file data yang ada. Untuk mengelompokkan data menggunakan pengurutan hierarkis atau pengurutan urutan z, gunakan Spark di Amazon EMR atau. AWS Glue

Anda dapat mengubah perilaku default OPTIMIZE pernyataan pada pembuatan tabel dengan meneruskan properti tabel dalam CREATE TABLE pernyataan, atau setelah pembuatan tabel dengan menggunakan ALTER TABLE pernyataan. Untuk nilai default, lihat dokumentasi Athena.

Rekomendasi untuk menjalankan pemadatan

Kasus penggunaan

Rekomendasi

Menjalankan pemadatan kemasan bin berdasarkan jadwal

  • Gunakan OPTIMIZE pernyataan di Athena jika Anda tidak tahu berapa banyak file kecil yang berisi tabel Anda. Model penetapan harga Athena didasarkan pada data yang dipindai, jadi jika tidak ada file yang akan dipadatkan, tidak ada biaya yang terkait dengan operasi ini. Untuk menghindari menemui batas waktu di tabel Athena, jalankan berdasarkan. OPTIMIZE per-table-partition

  • Gunakan Amazon EMR atau AWS Glue dengan penskalaan dinamis saat Anda mengharapkan volume besar file kecil dipadatkan.

Menjalankan pemadatan pengepakan bin berdasarkan peristiwa

  • Gunakan Amazon EMR atau AWS Glue dengan penskalaan dinamis saat Anda mengharapkan volume besar file kecil dipadatkan.

Menjalankan pemadatan untuk mengurutkan data

  • Gunakan Amazon EMR atau AWS Glue, karena penyortiran adalah operasi yang mahal dan mungkin perlu menumpahkan data ke disk.

Menjalankan pemadatan untuk mengelompokkan data menggunakan pengurutan urutan z

  • Gunakan Amazon EMR atau AWS Glue, karena pengurutan urutan z adalah operasi yang sangat mahal dan mungkin perlu menumpahkan data ke disk.

Menjalankan pemadatan pada partisi yang mungkin diperbarui oleh aplikasi lain karena data yang datang terlambat

  • Gunakan Amazon EMR atau. AWS Glue Aktifkan properti Iceberg PARTIAL_PROGRESS_ENABLED. Saat Anda menggunakan opsi ini, Iceberg membagi output pemadatan menjadi beberapa komit. Jika ada tabrakan (yaitu, jika file data diperbarui saat pemadatan sedang berjalan), pengaturan ini mengurangi biaya percobaan ulang dengan membatasi ke komit yang menyertakan file yang terpengaruh. Jika tidak, Anda mungkin harus mengompres ulang semua file.