Bagikan melalui


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 dapat memiliki karakteristik yang diwariskan dari terus-menerus menulis banyak file kecil; 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. Ini secara dinamis mengoptimalkan partisi saat 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 yang dipartisi delta lake tunduk pada pola tulis yang menghasilkan ukuran file suboptimal (kurang dari 128 MB) atau nonstandardized (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:

  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 tulis, ubah konfigurasi berikut seperti yang ditunjukkan:

  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