Kebutuhan untuk mengoptimalkan penulisan di Apache Spark

Beban kerja analitis pada mesin pemrosesan Big Data seperti Apache Spark bekerja paling efisien saat menggunakan ukuran file lebih besar yang distandarkan. Hubungan antara ukuran file, jumlah file, jumlah pekerja Spark dan konfigurasinya, memainkan peran penting terhadap performa. Beban kerja penyerapan ke dalam tabel data lake mungkin memiliki karakteristik yang diwariskan dari menulis banyak file kecil secara terus-menerus; skenario ini umumnya dikenal sebagai "masalah file kecil".

Optimalkan Penulisan adalah fitur Delta Lake on Synapse yang mengurangi jumlah file yang ditulis dan bertujuan untuk meningkatkan ukuran file individual dari data tertulis. Fitur ini secara dinamis mengoptimalkan partisi selagi menghasilkan file dengan ukuran default 128 MB. Ukuran file target dapat diubah per persyaratan beban kerja menggunakan konfigurasi.

Fitur ini mencapai ukuran file menggunakan fase pengacakan data tambahan melalui partisi, menyebabkan biaya pemrosesan tambahan selagi menulis data. Penalti penulisan kecil harus dilampaui oleh efisiensi pembacaan pada tabel.

Catatan

  • Ini tersedia di Kumpulan Synapse untuk versi Apache Spark di atas 3.1.

Manfaat Optimalkan Penulisan

  • Fitur ini tersedia di tabel Delta Lake untuk pola penulisan Batch dan Streaming.
  • Tidak perlu mengubah pola perintah spark.write. Fitur ini diaktifkan oleh pengaturan konfigurasi atau properti tabel.
  • Fitur ini mengurangi jumlah transaksi tulis dibandingkan dengan perintah OPTIMIZE.
  • Operasi OPTIMIZE akan lebih cepat karena operasi ini akan beroperasi pada file yang lebih sedikit.
  • Perintah VACUUM untuk penghapusan file lama yang tidak direferensikan juga akan beroperasi lebih cepat.
  • Kueri akan memindai lebih sedikit file dengan ukuran file yang lebih optimal, meningkatkan performa baca atau penggunaan sumber daya.

Mengoptimalkan skenario penggunaan penulisan

Kapan harus menggunakannya

  • Tabel berpartisi delta lake tunduk pada pola penulisan yang menghasilkan ukuran file suboptimal (kurang dari 128 MB) atau non-standar (file dengan ukuran yang berbeda di antara dirinya sendiri).
  • Bingkai data yang dipartisi ulang yang akan ditulis ke disk dengan ukuran file suboptimal.
  • Tabel berpartisi delta lake yang ditargetkan oleh perintah SQL batch kecil seperti UPDATE, DELETE, MERGE, CREATE TABLE AS SELECT, INSERT INTO, dll.
  • Melakukan streaming skenario penyerapan dengan pola data tambahan ke tabel berpartisi Delta lake tempat latensi penulisan tambahan dapat ditoleransi.

Kapan harus menghindarinya

  • Tabel yang tidak berpartisi.
  • Kasus penggunaan tempat latensi penulisan tambahan tidak dapat diterima.
  • Tabel besar dengan jadwal pengoptimalan dan pola baca yang ditentukan dengan baik.

Cara mengaktifkan dan menonaktifkan fitur optimalkan penulisan

Fitur optimalkan penulisan dinonaktifkan secara default. Di Kumpulan Spark 3.3, kumpulan diaktifkan secara default untuk tabel yang dipartisi.

Setelah konfigurasi diatur untuk kumpulan atau sesi, semua pola penulisan Spark akan menggunakan fungsionalitas tersebut.

Untuk menggunakan fitur optimalkan penulisan, aktifkan fitur tersebut menggunakan konfigurasi berikut:

  1. Scala dan PySpark
spark.conf.set("spark.microsoft.delta.optimizeWrite.enabled", "true")
  1. Spark SQL
SET `spark.microsoft.delta.optimizeWrite.enabled` = true

Untuk memeriksa nilai konfigurasi saat ini, gunakan perintah seperti yang ditunjukkan di bawah ini:

  1. Scala dan PySpark
spark.conf.get("spark.microsoft.delta.optimizeWrite.enabled")
  1. Spark SQL
SET `spark.microsoft.delta.optimizeWrite.enabled`

Untuk menonaktifkan fitur optimalkan penulisan, ubah konfigurasi berikut seperti yang ditunjukkan di bawah ini:

  1. Scala dan PySpark
spark.conf.set("spark.microsoft.delta.optimizeWrite.enabled", "false")
  1. Spark SQL
SET `spark.microsoft.delta.optimizeWrite.enabled` = false

Mengontrol pengoptimalan penulisan menggunakan properti tabel

Pada tabel baru

  1. SQL
CREATE TABLE <table_name> TBLPROPERTIES (delta.autoOptimize.optimizeWrite = true)
  1. Scala

Menggunakan DeltaTableBuilder API:

val table = DeltaTable.create()
  .tableName("<table_name>")
  .addColumnn("<colName>", <dataType>)
  .location("<table_location>")
  .property("delta.autoOptimize.optimizeWrite", "true") 
  .execute()

Pada tabel yang sudah ada

  1. SQL
ALTER TABLE <table_name> SET TBLPROPERTIES (delta.autoOptimize.optimizeWrite = true)
  1. Scala

Menggunakan DeltaTableBuilder API

val table = DeltaTable.replace()
  .tableName("<table_name>")
  .location("<table_location>")
  .property("delta.autoOptimize.optimizeWrite", "true") 
  .execute()

Cara mendapatkan & mengubah konfigurasi ukuran file maks saat ini untuk Optimalkan Tulis

Untuk mendapatkan nilai konfigurasi saat ini, gunakan perintah di bawa ini. Secara default adalah 128 MB.

  1. Scala dan PySpark
spark.conf.get("spark.microsoft.delta.optimizeWrite.binSize")
  1. SQL
SET `spark.microsoft.delta.optimizeWrite.binSize`
  • Untuk mengubah nilai konfigurasi
  1. Scala dan PySpark
spark.conf.set("spark.microsoft.delta.optimizeWrite.binSize", "134217728")
  1. SQL
SET `spark.microsoft.delta.optimizeWrite.binSize` = 134217728

Langkah berikutnya