Mempercepat Google Cloud Serverless untuk Apache Spark dengan Lightning Engine

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

Ringkasan

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

Seperti yang ditunjukkan dalam ilustrasi berikut, Lightning Engine mempercepat performa eksekusi kueri Spark pada workload yang 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 tersedia untuk digunakan dengan runtime Serverless untuk Apache Spark yang didukung yang dalam Ketersediaan Umum (saat ini runtime 1.2, 2.2, dan 2.3; tidak tersedia di runtime Spark 3.0).
  • Lightning Engine hanya tersedia dengan paket harga premium Serverless untuk Apache Spark.
    • Workload batch: Lightning Engine diaktifkan secara otomatis untuk workload batch di tingkat 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.
    • Template sesi: Lightning Engine tidak diaktifkan secara default untuk template sesi. Untuk mengaktifkannya, lihat Mengaktifkan Lightning Engine.

Aktifkan Lightning Engine

Bagian berikut menunjukkan cara mengaktifkan Lightning Engine pada beban kerja batch Serverless for Apache Spark, template sesi, dan sesi interaktif.

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 beban kerja batch.

Konsol

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

  1. Di konsol Google Cloud :

    1. Buka Batch Dataproc.
    2. Klik Buat untuk membuka halaman Buat batch.
  2. Pilih dan isi kolom berikut:

    • Container:
    • Konfigurasi Tingkatan:

      • Pilih Premium. Opsi ini akan otomatis mengaktifkan dan memeriksa "Aktifkan LIGHTNING ENGINE untuk mempercepat performa Spark".

      Saat Anda memilih tingkat premium, Driver Compute Tier dan Executor Compute Tier akan disetel ke Premium. Setelan komputasi tingkat premium yang ditetapkan secara otomatis ini tidak dapat diganti untuk batch menggunakan runtime sebelum 3.0.

      Anda dapat mengonfigurasi Driver Disk Tier dan Executor Disk Tier ke Premium atau membiarkannya pada nilai tingkat Standard default. Jika memilih tingkat disk premium, Anda harus memilih ukuran disk. Untuk mengetahui informasi selengkapnya, lihat properti alokasi resource.

    • Properti: Opsional: Masukkan pasangan Key (nama properti) dan Value berikut jika Anda ingin memilih runtime Native Query Execution:

      Kunci Nilai
      spark.dataproc.lightningEngine.runtime native

  3. Isi, pilih, atau konfirmasi setelan beban kerja batch lainnya. Lihat Mengirimkan workload batch Spark.

  4. Klik Submit untuk menjalankan beban kerja batch Spark.

gcloud

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

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

Catatan:

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

    • spark.dataproc.engine=lightningEngine memilih Lightning Engine untuk workload batch.
    • spark.dataproc.driver.compute.tier dan spark.dataproc.executor.compute.tier disetel ke premium (lihat properti alokasi resource). Setelan komputasi tingkat premium yang ditetapkan secara otomatis ini tidak dapat diganti untuk batch 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.

    • Tingkatan dan ukuran disk: Secara default, ukuran disk driver dan eksekutor ditetapkan ke tingkatan 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, tambahkan "dataproc.tier":"premium" ke RuntimeConfig.properties sebagai bagian dari permintaan batches.create Anda. Menetapkan tingkat premium akan otomatis menetapkan properti berikut pada beban kerja batch:

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

Lainnya RuntimeConfig.properties:

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

  • Tingkatan dan ukuran disk: Secara default, ukuran disk driver dan eksekutor ditetapkan ke tingkatan 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.

Template sesi

Mengaktifkan Lightning Engine pada template sesi

Anda dapat menggunakan konsol Google Cloud , Google Cloud CLI, atau Dataproc API untuk mengaktifkan Lightning Engine pada template sesi untuk sesi Jupyter atau Spark Connect.

Konsol

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

  1. Di konsol Google Cloud :

    1. Buka Template Sesi Dataproc.
    2. Klik Buat untuk membuka halaman Buat template sesi.
  2. Pilih dan isi kolom berikut:

    • Info template sesi:
      • Pilih "Aktifkan Lightning Engine untuk mempercepat performa Spark".
    • Konfigurasi Eksekusi:
    • Properties: Masukkan pasangan Key (nama properti) dan Value berikut untuk memilih tingkatan Premium:

      Kunci Nilai
      dataproc.tier premium
      spark.dataproc.engine lightningEngine

      Opsional: Masukkan pasangan Key (nama properti) dan Value berikut untuk memilih runtime Native Query Execution:

      Kunci Nilai
      spark.dataproc.lightningEngine.runtime native

  3. Isi, pilih, atau konfirmasi setelan template sesi lainnya. Lihat Membuat template sesi.

  4. Klik Submit untuk membuat template sesi.

gcloud

Anda tidak dapat membuat template sesi Serverless untuk Apache Spark secara langsung 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, tambahkan "dataproc.tier":"premium" dan "spark.dataproc.engine":"lightningEngine" ke RuntimeConfig.properties sebagai bagian dari permintaan sessionTemplates.create Anda.

Lainnya RuntimeConfig.properties:

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

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

Sesi interaktif

Mengaktifkan Lightning Engine pada sesi interaktif

Anda dapat menggunakan Google Cloud CLI atau Dataproc API untuk mengaktifkan Lightning Engine pada sesi interaktif Serverless 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 \
    --properties=dataproc.tier=premium,spark.dataproc.engine=lightningEngine \
    OTHER_FLAGS_AS_NEEDED

Catatan:

  • PROJECT_ID: ID project Google Cloud Anda. Project ID tercantum di bagian Project info di Google Cloud Dasbor konsol.
  • REGION: Region Compute Engine yang tersedia untuk menjalankan beban kerja.
  • --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, tambahkan "dataproc.tier":"premium" dan "spark.dataproc.engine":"lightningEngine" ke RuntimeConfig.properties sebagai bagian dari permintaan sessions.create Anda.

Lainnya RuntimeConfig.properties:

* 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 menyetel 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["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, template sesi, atau sesi interaktif.

Workload batch

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

    • Google Cloud konsol: Di halaman Batch, lihat kolom Tingkat dan Mesin untuk batch. Anda dapat mengklik ID Batch untuk melihat setelan ini di halaman detail batch.
    • gcloud CLI: Jalankan perintah gcloud dataproc batches describe.
    • API: Mengirim permintaan batches.get.

Template sesi

  • Untuk memverifikasi bahwa engine disetel ke Lightning Engine untuk template sesi:

    • KonsolGoogle Cloud : Di halaman Session Templates, lihat kolom Engine untuk template Anda. Anda dapat mengklik Nama template sesi untuk melihat setelan ini di halaman detail template sesi.
    • gcloud CLI: Jalankan perintah gcloud beta dataproc session-templates describe.
    • API: Mengirim permintaan sessionTemplates.get.

Sesi interaktif

  • engine disetel ke Lightning Engine untuk sesi interaktif:

    • Google Cloud konsol: Di halaman Sesi Interaktif, lihat kolom Mesin untuk template. Anda dapat mengklik ID Sesi Interaktif untuk melihat setelan ini di halaman detail template sesi.
    • gcloud CLI: Jalankan perintah gcloud beta dataproc sessions describe.
    • API: Mengirim permintaan sessions.get.

Eksekusi Kueri Native

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

Runtime Eksekusi Kueri Native mencakup pengelolaan 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 Eksekusi Kueri Native dalam skenario berikut:

  • API DataFrame Spark, API Dataset Spark, dan kueri Spark SQL yang membaca data dari file Parquet dan ORC. Format file output tidak memengaruhi performa Eksekusi Kueri Native.

  • Workload yang direkomendasikan oleh alat kualifikasi Eksekusi Kueri Native.

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

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

Batasan Eksekusi Kueri Native

Mengaktifkan Eksekusi Kueri Native dalam skenario berikut dapat menyebabkan pengecualian, ketidakcocokan Spark, atau penggantian beban kerja ke mesin Spark default.

Pengganti

Eksekusi Kueri Native dalam eksekusi berikut dapat menyebabkan penggantian workload ke mesin eksekusi Spark, sehingga menyebabkan regresi atau kegagalan.

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

  • Mode peka huruf besar/kecil: Eksekusi Kueri Native 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: Eksekusi Kueri Native mendukung pemindaian tabel berpartisi hanya jika jalur berisi informasi partisi. Jika tidak, beban kerja 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: Eksekusi Kueri Native mendukung string yang diapit tanda kutip ganda, bukan tanda kutip tunggal. Hasil yang salah terjadi dengan tanda petik tunggal. Menggunakan "*" di jalur dengan fungsi get_json_object akan menampilkan NULL.

  • Konfigurasi baca Parquet:

    • Eksekusi Kueri Native memperlakukan spark.files.ignoreCorruptFiles sebagai 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 hibrida 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 Eksekusi Kueri Native.

  • Tumpahan: Jika partisi pengacakan disetel ke angka yang besar, fitur tumpahan ke disk dapat memicu OutOfMemoryException. Jika hal ini terjadi, mengurangi jumlah partisi dapat menghilangkan pengecualian ini.