Mempercepat workload dan sesi batch Spark dengan Lightning Engine

Dokumen ini menunjukkan cara mengaktifkan Lightning Engine untuk mempercepat workload batch dan sesi interaktif Managed Service untuk Apache Spark.

Ringkasan

Lightning Engine adalah akselerator kueri berperforma tinggi yang didukung oleh mesin pengoptimalan multi-lapisan yang menjalankan teknik pengoptimalan umum, seperti pengoptimalan kueri dan eksekusi, serta pengoptimalan yang diseleksi di lapisan sistem file dan konektor akses data.

Seperti yang ditunjukkan dalam ilustrasi berikut, Lightning Engine mempercepat performa eksekusi kueri Spark pada workload mirip TPC-H (ukuran set data 10 TB).

Untuk mengetahui informasi selengkapnya: lihat Memperkenalkan Lightning Engine — performa Apache Spark generasi berikutnya.

Ketersediaan Lightning Engine

  • Lightning Engine dan Native Query Execution tersedia untuk digunakan dengan runtime Managed Service untuk Apache Spark 2.3. Lightning Engine dan Native Query Execution tidak tersedia di runtime 3.0.

  • Lightning Engine hanya tersedia dengan paket harga premium Managed Service untuk Apache Spark.

    • Workload batch: Lightning Engine otomatis diaktifkan untuk workload batch di paket premium. Anda tidak perlu melakukan tindakan apa pun.

    • Sesi interaktif: Lightning Engine tidak diaktifkan secara default untuk sesi interaktif. Untuk mengaktifkannya, lihat Mengaktifkan Lightning Engine.

    • Profil runtime (template sesi): Saat Anda membuat profil runtime di konsol Google Cloud , paket Premium dan Aktifkan Lightning Engine untuk mempercepat performa dipilih secara default. Saat Anda membuat template sesi menggunakan Google Cloud CLI atau Dataproc API, Lightning Engine tidak diaktifkan secara default. Untuk mengaktifkan atau mengonfigurasinya, lihat Mengaktifkan Lightning Engine.

Aktifkan Lightning Engine

Bagian berikut menunjukkan cara mengaktifkan Lightning Engine pada workload batch, profil runtime (template sesi), dan sesi interaktif Managed Service untuk Apache Spark.

Workload batch

Mengaktifkan Lightning Engine pada workload batch

Anda dapat menggunakan konsol Google Cloud , Google Cloud CLI, atau Dataproc API untuk mengaktifkan Lightning Engine pada workload batch.

Konsol

Gunakan konsol Google Cloud untuk mengaktifkan Lightning Engine pada workload batch.

  1. Di konsol Google Cloud , buka halaman Jobs Managed Service for Apache Spark:

    Buka Managed Service for Apache Spark Jobs

  2. Klik Submit job untuk membuka halaman Submit a job.

  3. Di bagian Select compute type for job, pastikan Serverless Spark dipilih.

  4. Di bagian Serverless job details:

    • Pilih Runtime profile (atau pertahankan Default service configuration untuk region Anda), lalu klik Configure di kartu Summary (atau klik Create new profile di menu Runtime profile) untuk membuka panel konfigurasi profil runtime.
    • Paket: Pilih Premium. Tindakan ini akan otomatis mengaktifkan dan mencentang Enable Lightning Engine to accelerate performance.

      Saat Anda memilih paket premium, paket komputasi driver dan eksekutor ditetapkan ke Premium. Setelan komputasi paket premium yang ditetapkan secara otomatis ini tidak dapat diganti untuk batch yang menggunakan runtime sebelum 3.0.

    • Konfigurasi tambahan:

      • Runtime configuration: Klik Edit, pilih 2.3 untuk Spark runtime version, lalu klik Save.
      • Executor and driver configuration: Opsional: Klik Edit untuk mengonfigurasi Driver disk dan Executor disk ke Premium (SSD) atau biarkan pada nilai default Standard (HDD), lalu klik Save. Jika memilih paket disk premium, Anda harus memilih ukuran disk. Untuk mengetahui informasi selengkapnya, lihat properti alokasi resource.
    • Klik Gunakan konfigurasi (atau Simpan profil baru).

  5. Di bagian Job execution and properties, di bagian Spark properties (atau di panel konfigurasi profil runtime di bagian Additional configuration > Other customizations > Spark properties), klik Add property (opsional) dan masukkan pasangan Key (nama properti) dan Value berikut jika Anda ingin memilih runtime Native Query Execution:

    Kunci Nilai
    spark.dataproc.lightningEngine.runtime native

  6. Isi Files and artifacts dan setelan workload batch lainnya di halaman Submit a job. Lihat Mengirimkan workload batch Spark.

  7. Klik Submit untuk menjalankan workload batch Spark.

gcloud

Tetapkan flag perintah gcloud dataproc batches submit spark gcloud CLI berikut untuk mengaktifkan Lightning Engine pada workload batch.

gcloud dataproc batches submit spark \
    --project=PROJECT_ID \
    --region=REGION \
    --version=2.3 \
    --properties=dataproc.tier=premium \
    OTHER_FLAGS_AS_NEEDED

Catatan:

  • PROJECT_ID: Project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dashboard konsol Google Cloud .
  • REGION: Region Compute Engine yang tersedia untuk menjalankan workload.
  • --properties=dataproc.tier=premium. Menetapkan paket premium akan otomatis menetapkan properti berikut pada workload batch:

    • spark.dataproc.engine=lightningEngine memilih Lightning Engine untuk workload batch.
    • spark.dataproc.driver.compute.tier dan spark.dataproc.executor.compute.tier ditetapkan ke premium (lihat properti alokasi resource). Setelan komputasi paket premium yang ditetapkan secara otomatis ini tidak dapat diganti untuk batch yang menggunakan runtime sebelum 3.0.
  • Properti lainnya

    • Native Query Engine: spark.dataproc.lightningEngine.runtime=native Tambahkan properti ini jika Anda ingin memilih runtime Native Query Execution.

    • Tingkat dan ukuran disk: Secara default, ukuran disk driver dan executor ditetapkan ke tingkat dan ukuran standard. Anda dapat menambahkan properti untuk memilih tingkat dan ukuran disk premium (dalam kelipatan 375 GiB).
      Untuk mengetahui informasi selengkapnya, lihat properti alokasi resource.

  • OTHER_FLAGS_AS_NEEDED: Lihat Mengirimkan workload batch Spark.

API

Untuk mengaktifkan Lightning Engine pada workload batch, sebagai bagian dari permintaan batches.create Anda:

  • Tetapkan RuntimeConfig.version ke 2.3.
  • Tambahkan "dataproc.tier":"premium" ke RuntimeConfig.properties Menetapkan paket premium akan otomatis menetapkan properti berikut pada workload batch:

    • spark.dataproc.engine=lightningEngine memilih Lightning Engine untuk workload batch.
    • spark.dataproc.driver.compute.tier dan spark.dataproc.executor.compute.tier ditetapkan ke premium (lihat properti alokasi resource). Setelan komputasi paket premium yang ditetapkan secara otomatis ini tidak dapat diganti untuk batch yang menggunakan runtime sebelum 3.0.

RuntimeConfig.properties lainnya:

  • Native Query Engine: spark.dataproc.lightningEngine.runtime:native. Tambahkan properti ini jika Anda ingin memilih runtime Native Query Execution.

  • Tingkat dan ukuran disk: Secara default, ukuran disk driver dan executor ditetapkan ke tingkat dan ukuran standard. Anda dapat menambahkan properti untuk memilih tingkat dan ukuran premium (dalam kelipatan 375 GiB).
    Untuk mengetahui informasi selengkapnya, lihat properti alokasi resource.

Lihat Mengirimkan workload batch Spark untuk menetapkan kolom API workload batch lainnya.

Profil runtime

Mengaktifkan Lightning Engine di profil runtime (template sesi)

Anda dapat menggunakan konsol Google Cloud , Google Cloud CLI, atau Dataproc API untuk mengaktifkan Lightning Engine di profil runtime (template sesi) untuk sesi Jupyter atau Spark Connect.

Konsol

Gunakan konsol Google Cloud untuk mengaktifkan Lightning Engine di profil runtime (template sesi):

  1. Di konsol Google Cloud , buka halaman Serverless Runtime Profiles Managed Service untuk Apache Spark:

    Buka Profil Runtime Serverless

  2. Klik Create untuk membuka halaman Create a runtime profile.

  3. Pilih dan isi kolom berikut:

    • Tier: pastikan Premium (default) dipilih, dan pastikan Enable Lightning Engine to accelerate performance (dipilih secara default, yang menetapkan spark.dataproc.engine=lightningEngine) dipilih.

    • Konfigurasi tambahan: konfigurasikan setelan properti runtime dan Spark berikut:

      • Runtime configuration: klik Edit dan pastikan Spark runtime version ditetapkan ke 2.3, lalu klik Save.

      • Penyesuaian lainnya: (opsional) untuk memilih runtime Native Query Execution, klik Edit, klik Add property di bagian Spark properties, masukkan pasangan Key (nama properti) dan Value berikut, lalu klik Save:

        Kunci Nilai
        spark.dataproc.lightningEngine.runtime native

  4. Isi, pilih, atau konfirmasi setelan profil runtime lainnya. Untuk mengetahui informasi selengkapnya tentang setelan profil runtime, lihat Membuat profil runtime.

  5. Klik Create.

gcloud

Anda tidak dapat langsung membuat template sesi Managed Service untuk Apache Spark (profil runtime) menggunakan gcloud CLI. Sebagai gantinya, Anda dapat menggunakan perintah gcloud beta dataproc session-templates import untuk mengimpor template sesi yang ada, mengedit template yang diimpor untuk mengaktifkan Lightning Engine dan secara opsional runtime Kueri Native, lalu mengekspor template yang diedit menggunakan perintah gcloud beta dataproc session-templates export.

API

Untuk mengaktifkan Lightning Engine pada template sesi (profil runtime), sebagai bagian dari permintaan sessionTemplates.create Anda:

RuntimeConfig.properties lainnya:

  • Native Query Engine: spark.dataproc.lightningEngine.runtime:native: Tambahkan properti ini ke RuntimeConfig.properties untuk memilih runtime Native Query Execution.

Untuk mengetahui informasi selengkapnya tentang cara menetapkan kolom API template sesi lainnya, lihat Membuat profil runtime (template sesi).

Sesi interaktif

Mengaktifkan Lightning Engine di sesi interaktif

Anda dapat menggunakan Google Cloud CLI atau Dataproc API untuk mengaktifkan Lightning Engine di sesi interaktif Managed Service untuk Apache Spark. Anda juga dapat mengaktifkan Lightning Engine dalam sesi interaktif di notebook BigQuery Studio.

gcloud

Tetapkan flag perintah gcloud beta dataproc sessions create spark gcloud CLI berikut untuk mengaktifkan Lightning Engine pada sesi interaktif.

gcloud beta dataproc sessions create spark \
    --project=PROJECT_ID \
    --location=REGION \
    --version=2.3 \
    --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine \
    OTHER_FLAGS_AS_NEEDED

Catatan:

  • PROJECT_ID: Project ID Google Cloud Anda. Project ID tercantum di bagian Project info di Dashboard konsol Google Cloud .
  • REGION: Region Compute Engine yang tersedia untuk menjalankan workload.
  • --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine. Properti ini mengaktifkan Lightning Engine pada sesi.

  • Properti lainnya:

    • Native Query Engine: spark.dataproc.lightningEngine.runtime=native: Tambahkan properti ini untuk memilih runtime Native Query Execution.
  • OTHER_FLAGS_AS_NEEDED: Lihat Membuat sesi interaktif.

API

Untuk mengaktifkan Lightning Engine pada sesi, sebagai bagian dari permintaan sessions.create Anda:

RuntimeConfig.properties Lainnya:

  • Native Query Engine: spark.dataproc.lightningEngine.runtime:native: Tambahkan properti ini ke RuntimeConfig.properties jika Anda ingin memilih runtime Native Query Execution.

Lihat Membuat sesi interaktif untuk menetapkan kolom API template sesi lainnya.

Notebook BigQuery

Anda dapat mengaktifkan Lightning Engine saat membuat sesi di notebook PySpark BigQuery Studio.

from google.cloud.dataproc_spark_connect import DataprocSparkSession
from google.cloud.dataproc_v1 import Session
session = Session()

# Enable Lightning Engine.
session.runtime_config.properties["version"] = "2.3"
session.runtime_config.properties["dataproc.tier"] = "premium"
session.runtime_config.properties["spark.dataproc.engine"] = "lightningEngine"

# Enable THE Native Query Execution runtime.
session.runtime_config.properties["spark.dataproc.lightningEngine.runtime"] = "native"

# Create the Spark session.
spark = (
   DataprocSparkSession.builder
     .appName("APP_NAME")
     .dataprocSessionConfig(session)
     .getOrCreate())

# Add Spark application code here:

Memverifikasi setelan Lightning Engine

Anda dapat menggunakan konsol Google Cloud , Google Cloud CLI, atau Dataproc API untuk memverifikasi setelan Lightning Engine pada workload batch, profil runtime (template sesi), atau sesi interaktif.

Workload batch

  • Untuk memverifikasi bahwa tingkat batch ditetapkan ke premium dan mesin ditetapkan ke Lightning Engine:

    • Google Cloud console: Di halaman Jobs, pilih tab Serverless Spark untuk melihat kolom Tier untuk batch, dan klik Job ID batch untuk melihat setelan Tier dan Engine di tab Summary pada halaman Job details batch.
    • gcloud CLI: Jalankan perintah gcloud dataproc batches describe.
    • API: Mengeluarkan permintaan batches.get.

Profil runtime

  • Untuk memverifikasi bahwa engine ditetapkan ke Lightning Engine untuk profil runtime (template sesi):

    • Google Cloud console: Di halaman Serverless Runtime Profiles, klik nama profil runtime untuk melihat setelannya di halaman detail profil runtime.

    • gcloud CLI: Jalankan perintah gcloud beta dataproc session-templates describe.

    • API: Mengeluarkan permintaan sessionTemplates.get.

Sesi interaktif

  • Untuk memverifikasi bahwa engine ditetapkan ke Lightning Engine untuk sesi interaktif:

    • Google Cloud console: Di halaman Sessions, lihat kolom Engine untuk sesi tersebut. Anda dapat mengklik ID Sesi untuk melihat setelan ini di halaman detail sesi.

    • gcloud CLI: Jalankan perintah gcloud beta dataproc sessions describe.

    • API: Mengeluarkan permintaan sessions.get.

Eksekusi Kueri Native

Native Query Execution (NQE) adalah fitur Lightning Engine opsional yang meningkatkan performa melalui implementasi native berdasarkan Apache Gluten dan Velox yang dirancang untuk hardware Google.

Runtime Native Query Execution mencakup manajemen memori terpadu untuk peralihan dinamis antara memori off-heap dan on-heap tanpa memerlukan perubahan pada konfigurasi Spark yang ada. NQE mencakup dukungan yang diperluas untuk operator, fungsi, dan jenis data Spark, serta kecerdasan untuk otomatis mengidentifikasi peluang penggunaan mesin native untuk operasi pushdown yang optimal.

Mengidentifikasi workload eksekusi kueri Native

Gunakan Native Query Execution dalam skenario berikut:

  • Spark Dataframe API, Spark Dataset API, dan kueri Spark SQL yang membaca data dari file Parquet dan ORC. Format file output tidak memengaruhi performa Native Query Execution.

  • Workload yang direkomendasikan oleh alat kualifikasi Native Query Execution.

Eksekusi kueri native tidak direkomendasikan untuk workload dengan input jenis data berikut:

  • Byte: ORC dan Parquet
  • Stempel waktu: ORC
  • Struct, Array, Map: Parquet

Batasan Native Query Execution

Mengaktifkan Native Query Execution dalam skenario berikut dapat menyebabkan pengecualian, ketidaksesuaian Spark, atau fallback workload ke mesin Spark default.

Pengganti

Native Query Execution dalam eksekusi berikut dapat menyebabkan workload kembali ke mesin eksekusi Spark, sehingga mengakibatkan regresi atau kegagalan.

  • ANSI: Jika mode ANSI diaktifkan, eksekusi akan beralih kembali ke Spark.

  • Mode peka huruf besar/kecil: Native Query Execution hanya mendukung mode default Spark yang tidak peka huruf besar/kecil. Jika mode peka huruf besar/kecil diaktifkan, hasil yang salah dapat terjadi.

  • Pemindaian tabel berpartisi: Native Query Execution mendukung pemindaian tabel berpartisi hanya jika jalur berisi informasi partisi, jika tidak, workload akan kembali ke mesin eksekusi Spark.

Perilaku yang tidak kompatibel

Perilaku yang tidak kompatibel atau hasil yang salah dapat terjadi saat menggunakan eksekusi kueri Native dalam kasus berikut:

  • Fungsi JSON: Native Query Execution mendukung string yang diapit tanda petik ganda, bukan tanda petik tunggal. Hasil yang salah terjadi dengan tanda petik tunggal. Penggunaan "*" di jalur dengan fungsi get_json_object akan menampilkan NULL.

  • Konfigurasi pembacaan Parquet:

    • Eksekusi Kueri Native memperlakukan spark.files.ignoreCorruptFiles seolah-olah ditetapkan ke nilai false default, meskipun ditetapkan ke true.
    • Eksekusi Kueri Native mengabaikan spark.sql.parquet.datetimeRebaseModeInRead, dan hanya menampilkan konten file Parquet. Perbedaan antara kalender hybrid lama (Julian Gregorian) dan kalender Gregorian Proleptik tidak dipertimbangkan. Hasil Spark dapat berbeda.
  • NaN: Tidak didukung. Hasil yang tidak terduga dapat terjadi, misalnya, saat menggunakan NaN dalam perbandingan numerik.

  • Pembacaan kolom Spark: Error fatal dapat terjadi karena vektor kolom Spark tidak kompatibel dengan Native Query Execution.

  • Spill: Jika partisi shuffle ditetapkan ke jumlah yang besar, fitur spill-to-disk dapat memicu OutOfMemoryException. Jika hal ini terjadi, mengurangi jumlah partisi dapat menghilangkan pengecualian ini.