Menggunakan Lightning Engine

Lightning Engine adalah lingkungan eksekusi berperforma tinggi untuk Apache Spark di Managed Service untuk Apache Spark yang mempercepat workload yang memerlukan komputasi intensif dan mengurangi biaya runtime tanpa perlu mengubah kode Spark Anda. Spark dirancang untuk data engineer dan praktisi analisis yang menjalankan workload komputasi intensif yang menggunakan Spark DataFrame API, Spark Dataset API, atau kueri Spark SQL.

Manfaat

Manfaat Lightning Engine meliputi:

  • Operasi data yang dipercepat: Dapatkan peningkatan performa dan penghematan biaya yang signifikan melalui pengoptimalan interaksi penyimpanan cloud, termasuk penanganan metadata, workload tulis, dan I/O vektor.

  • Eksekusi kueri yang cerdas: Manfaatkan peningkatan pengoptimal lanjutan yang secara dinamis mengurangi data yang dipindai, mengoptimalkan pemrosesan data, dan menghasilkan rencana eksekusi yang lebih efisien untuk kueri yang lebih cepat dan hemat biaya.

  • Workload AI dan ML yang efisien: Kurangi waktu startup cluster untuk workload berbasis GPU, dan sederhanakan deployment di lingkungan yang aman menggunakan image yang dioptimalkan untuk AI.

Meskipun Lightning Engine menawarkan peningkatan performa yang signifikan, dampak spesifiknya bervariasi sesuai dengan workload.

Perbandingan dengan mesin standar

Lightning Engine adalah alternatif untuk mesin standar yang digunakan untuk menjalankan tugas Spark di cluster Managed Service untuk Apache Spark. Tabel berikut membandingkan Lightning Engine dengan properti aktivasi, penerapan workload, dan manfaat utama mesin standar.

Fitur Mesin standar Lightning Engine
Flag CLI --engine=default atau batalkan penetapan flag --engine=lightning
Paling Cocok Untuk Tugas, pengembangan, dan pengujian tujuan umum Workload skala perusahaan yang memerlukan akselerasi signifikan
Manfaat Utama Performa dasar Interaksi penyimpanan cloud yang dioptimalkan, eksekusi kueri yang cerdas

Persyaratan Lightning Engine

Persyaratan berikut berlaku untuk fitur Lightning Engine:

  • Versi image: Lightning Engine harus digunakan dengan Managed Service untuk Apache Spark versi image 2.3.3 dan rilis versi image subminor 2.3 yang lebih baru, atau rilis versi image subminor 3.0.2 dan 3.0 yang lebih baru (image debian13 dan ubuntu24).
  • Tugas yang didukung: Spark, PySpark, SparkSQL, dan SparkR didukung. Mesin standar berjalan pada jenis pekerjaan lain yang dikirimkan ke cluster Lightning Engine.

Eksekusi Kueri Native

Native Query Execution (NQE) adalah komponen opsional dari Lightning Engine yang memberikan tingkat akselerasi yang lebih dalam untuk tugas tertentu. Lightning Engine adalah mesin native yang didasarkan pada Apache Gluten dan Velox, yang dioptimalkan untuk hardware Google, yang meningkatkan performa dengan menjalankan bagian kueri Spark di luar JVM.

NQE direkomendasikan untuk:
Tugas intensif komputasi yang memanfaatkan Spark DataFrame API dan Spark Dataset API, serta kueri Spark SQL yang membaca data dari file dan tabel Parquet, ORC, Apache Iceberg, dan Delta Lake. Format file output tidak memengaruhi performanya.
NQE tidak direkomendasikan untuk:
Tugas yang sangat bergantung pada Resilient Distributed Dataset (RDD), Fungsi yang Ditentukan Pengguna (UDF), sebagian besar library Machine Learning (ML) Spark, dan operasi terikat I/O dengan penundaan karena akses penyimpanan.

Eksekusi Kueri Native di ARM

Managed Service untuk Apache Spark mendukung Native Query Execution dalam Lightning Engine pada arsitektur ARM, yang dioptimalkan secara khusus untuk prosesor Google Axion di VM ARM C4A (lihat jenis mesin ARM yang didukung di Managed Service untuk Apache Spark) menggunakan image 2.3-ubuntu22-arm. Instance Google Axion C4A adalah VM berbasis ARM yang dibangun di core ARM Neoverse V2 yang memberikan peningkatan rasio harga-performa yang signifikan.

Menjalankan NQE di instance ARM Google Axion menggabungkan performa harga tingkat hardware dan bandwidth memori per core yang tinggi dengan akselerasi kueri vektor native tingkat software, sehingga secara signifikan mengurangi runtime kueri dan total biaya kepemilikan (TCO).

Manfaat utama di ARM meliputi:

  • Kecepatan 2,5x hingga 4x lebih cepat dibandingkan Spark open source: Memberikan peningkatan performa 2,5x hingga 4x dibandingkan Apache Spark open source pada workload analisis.
  • Pengoptimalan biaya: Memaksimalkan keunggulan harga-performa instance Google Axion C4A (yang memberikan rasio harga-performa hingga 65% lebih baik dibandingkan dengan instance x86 yang sebanding).
  • Paritas operator dan format penuh: Paritas penuh dengan operator NQE x86, dengan akselerasi native untuk format tabel Cloud Storage Parquet, Apache Iceberg, dan Delta Lake.
  • Tanpa perubahan kode: Aktivasi lancar di cluster ARM menggunakan flag konfigurasi standar tanpa mengubah kode aplikasi Spark Anda.

Persyaratan Eksekusi Kueri Native

Persyaratan berikut berlaku untuk fitur Native Query Execution:

  • Mesin eksekusi: NQE hanya tersedia di cluster yang diaktifkan dengan mesin Lightning saat pembuatan cluster.

  • Tugas yang didukung: Spark, PySpark, Spark SQL, dan SparkR didukung. Mesin standar akan berjalan (tanpa NQE) pada jenis pekerjaan lain yang dikirimkan ke cluster Lightning Engine.

  • Tidak ada GPU dan Akselerator: Tugas yang mendukung NQE yang dikirimkan di akselerator GPU akan gagal (tetapi dapat memanfaatkan Lightning Engine tanpa NQE).

  • Jenis data: Input dari jenis data berikut tidak didukung:

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

Persyaratan arsitektur dan sistem operasi

Persyaratan NQE berbeda berdasarkan arsitektur prosesor:

Arsitektur Jenis mesin yang didukung Sistem operasi dan image yang didukung
x86 Kelompok mesin Intel dan AMD Debian-12 dan Ubuntu-22 (versi image 2.3.3 dan rilis 2.3 yang lebih baru); Debian-13 dan Ubuntu-24 (versi image 3.0.2 dan rilis 3.0 yang lebih baru)
ARM Seri mesin C4A (VM ARM Google Axion) Image 2.3-ubuntu22-arm (versi 2.3.3 dan rilis 2.3 yang lebih baru)

Harga

Untuk mengetahui informasi harga, lihat harga Managed Service untuk Apache Spark.

Membuat cluster Lightning Engine

Bagian ini menunjukkan cara membuat cluster Managed Service untuk Apache Spark yang mengaktifkan Lightning Engine pada tugas Spark yang dikirimkan ke cluster.

Anda juga dapat mengaktifkan Native Query Execution (NQE) di cluster saat membuat cluster, atau Anda dapat mengaktifkan NQE nanti untuk tugas Spark tertentu yang dikirimkan ke cluster.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that you have the permissions required to complete this guide.

  4. Verify that billing is enabled for your Google Cloud project.

  5. Enable the Dataproc API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  6. Install the Google Cloud CLI.

  7. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  10. Verify that you have the permissions required to complete this guide.

  11. Verify that billing is enabled for your Google Cloud project.

  12. Enable the Dataproc API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  13. Install the Google Cloud CLI.

  14. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  15. To initialize the gcloud CLI, run the following command:

    gcloud init

Peran yang diperlukan

Peran Identity and Access Management (IAM) tertentu diperlukan untuk membuat cluster Managed Service untuk Apache Spark dan mengirimkan tugas ke cluster. Bergantung pada kebijakan organisasi, pemilik project cloud atau administrator layanan mungkin telah memberikan peran ini kepada Anda atau akun layanan. Untuk memeriksa pemberian peran, lihat Apakah Anda perlu memberikan peran?.

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran pengguna

Untuk mendapatkan izin yang Anda perlukan untuk membuat cluster Managed Service untuk Apache Spark, minta administrator untuk memberi Anda peran IAM berikut:

Peran akun layanan

Untuk memastikan bahwa akun layanan default Compute Engine memiliki izin yang diperlukan untuk membuat cluster Managed Service untuk Apache Spark, minta administrator Anda untuk memberikan peran IAM Dataproc Worker (roles/dataproc.worker) ke akun layanan default Compute Engine di project.

Membuat cluster

Contoh berikut menunjukkan cara membuat cluster Lightning Engine menggunakan konsol Google Cloud , Google Cloud CLI, Dataproc API, Library Klien Cloud untuk Python, atau Terraform. Anda juga dapat membuat cluster dengan Lightning Engine yang diaktifkan menggunakan Library Klien Cloud Go, Java, dan Node.js.

Konsol

  1. Buka halaman Create cluster.
  2. Klik Additional configuration untuk meluaskan bagian tersebut.
  3. Edit Penyesuaian & Lainnya.
  4. Di panel yang terbuka, pastikan kotak Enable Lightning Engine dicentang.
  5. Opsional: Untuk mengaktifkan runtime eksekusi native secara default untuk tugas Spark, centang kotak Enable Native Execution.
  6. Klik Simpan.
  7. Konfigurasikan setelan cluster lainnya sesuai kebutuhan.
  8. Klik Create cluster.

Membuat cluster ARM:

Untuk membuat cluster ARM dengan Google Axion dan Native Query Execution:

  1. Di Worker configuration, pilih seri mesin C4A dan pilih jenis mesin ARM Anda.
  2. Di Image, pilih image 2.3-ubuntu22-arm.
  3. Di Additional configuration > Customization & Other, pastikan Enable Lightning Engine dan Enable Native Execution dipilih.
  4. Klik Create cluster.

gcloud

  1. Untuk membuat cluster dengan Lightning Engine diaktifkan, jalankan perintah gcloud dataproc clusters create dengan flag --engine=lightning. Untuk mengetahui informasi selengkapnya, lihat membuat cluster dengan gcloud CLI.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --engine=lightning \
        --image-version=2.3
    
  2. Opsional: Untuk mengaktifkan runtime eksekusi native secara default untuk tugas Spark, sertakan properti spark:spark.dataproc.lightningEngine.runtime=native.

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --engine=lightning \
        --image-version=2.3 \
        --properties='spark:spark.dataproc.lightningEngine.runtime=native'
    
  3. Membuat cluster ARM dengan NQE: Untuk membuat cluster Managed Service untuk Apache Spark dengan node ARM Google Axion C4A dan NQE diaktifkan:

    gcloud dataproc clusters create CLUSTER_NAME \
        --region=REGION \
        --image-version=2.3-ubuntu22-arm \
        --master-machine-type=c4a-standard-16 \
        --worker-machine-type=c4a-standard-16 \
        --engine=lightning \
        --properties='spark:spark.dataproc.lightningEngine.runtime=native'
    

API

Untuk membuat cluster dengan Lightning Engine diaktifkan, kirim permintaan clusters.create. Untuk mengetahui informasi selengkapnya, lihat membuat cluster dengan REST API.

  1. Dalam isi permintaan, tetapkan kolom engine ke LIGHTNING.

    {
      "projectId": "PROJECT_ID",
      "clusterName": "CLUSTER_NAME",
      "config": {
        "engine": "LIGHTNING",
        "gceClusterConfig": {},
        "softwareConfig": {
          "imageVersion": "2.3"
        }
      }
    }
    
  2. Opsional: Untuk mengaktifkan runtime eksekusi native secara default untuk semua tugas, sertakan properti spark:spark.dataproc.lightningEngine.runtime.

    {
      "projectId": "PROJECT_ID",
      "clusterName": "CLUSTER_NAME",
      "config": {
        "engine": "LIGHTNING",
        "gceClusterConfig": {},
        "softwareConfig": {
          "imageVersion": "2.3",
          "properties": {
            "spark:spark.dataproc.lightningEngine.runtime": "native"
          }
        }
      }
    }
    

Python

  1. Untuk membuat cluster dengan Lightning Engine diaktifkan, gunakan metode create_cluster dan tetapkan kolom engine dalam konfigurasi cluster ke LIGHTNING. Untuk mengetahui informasi selengkapnya, lihat membuat cluster dengan Python.

    from google.cloud import dataproc_v1
    
    def create_lightning_cluster(project_id, region, cluster_name):
        client_options = {"api_endpoint": f"{region}-dataproc.googleapis.com:443"}
        cluster_client = dataproc_v1.ClusterControllerClient(client_options=client_options)
    
        cluster = {
            "project_id": project_id,
            "cluster_name": cluster_name,
            "config": {
                "engine": "LIGHTNING",
                "software_config": {
                    "image_version": "2.3-debian12",
                },
            }
        }
    
        operation = cluster_client.create_cluster(
            project_id=project_id,
            region=region,
            cluster=cluster
        )
        result = operation.result()
        print(f"Cluster created successfully: {result.cluster_name}")
    
  2. Opsional: Untuk mengaktifkan runtime eksekusi native secara default untuk tugas Spark, sertakan properti spark:spark.dataproc.lightningEngine.runtime.

    from google.cloud import dataproc_v1
    
    def create_lightning_native_cluster(project_id, region, cluster_name):
        client_options = {"api_endpoint": f"{region}-dataproc.googleapis.com:443"}
        cluster_client = dataproc_v1.ClusterControllerClient(client_options=client_options)
    
        cluster = {
            "project_id": project_id,
            "cluster_name": cluster_name,
            "config": {
                "engine": "LIGHTNING",
                "software_config": {
                    "image_version": "2.3-debian12",
                    "properties": {
                        "spark:spark.dataproc.lightningEngine.runtime": "native"
                    }
                }
            }
        }
    
        operation = cluster_client.create_cluster(
            project_id=project_id,
            region=region,
            cluster=cluster
        )
        result = operation.result()
        print(f"Cluster created successfully: {result.cluster_name}")
    

Terraform

  1. Dalam konfigurasi resource google_dataproc_cluster, tetapkan argumen engine ke LIGHTNING.
  2. Untuk mengetahui detail selengkapnya dan opsi lanjutan, lihat dokumentasi Terraform resmi untuk resource google_dataproc_cluster.

Memverifikasi mesin cluster

Konsol

  1. Di konsol Google Cloud , buka halaman Cluster Details.
  2. Pastikan nilai Lightning Engine tercantum di kolom Engine.
  3. Jika Anda mengaktifkan Native Query Execution, pastikan native tercantum di kolom Native Execution.

gcloud

  1. Untuk memverifikasi mesin dan NQE (jika diaktifkan), jalankan perintah gcloud dataproc clusters describe:

    gcloud dataproc clusters describe CLUSTER_NAME --project=PROJECT_ID --region=REGION
    
  2. Periksa output untuk properti engine dan lightningEngine.runtime:

    clusterName: lightning-engine-cluster
    engine: lightningEngine
    lightningEngine.runtime: native
    

Mengirim tugas dengan Lightning Engine

Jika Anda mengaktifkan Lightning Engine saat membuat cluster, saat Anda mengirimkan tugas Spark ke cluster, Lightning Engine akan diaktifkan secara default pada tugas tersebut.

Mengaktifkan Native Query Execution untuk tugas

Jika Anda mengaktifkan Native Query Execution (NQE) saat membuat cluster Lightning Engine, semua tugas Spark akan dijalankan dengan NQE diaktifkan, kecuali jika Anda menonaktifkan NQE pada tugas tertentu.

Jika Anda tidak mengaktifkan NQE saat membuat cluster Lightning Engine, Anda dapat mengaktifkan NQE untuk tugas saat mengirimkan tugas, seperti yang ditunjukkan dalam contoh berikut.

gcloud

Untuk mengaktifkan Native Query Execution saat Anda mengirimkan tugas Spark, sertakan properti spark.dataproc.lightningEngine.runtime=native:

gcloud dataproc jobs submit spark \
    --cluster=CLUSTER_NAME \
    --region=REGION \
    --properties=spark.dataproc.lightningEngine.runtime=native \
    -- ...

API

Untuk mengaktifkan Native Query Execution saat Anda mengirimkan tugas Spark, sertakan properti spark.dataproc.lightningEngine.runtime dalam permintaan Anda:

{
  "job":{
    "placement":{
      "clusterName": ...
    },
    "sparkJob":{
      "mainClass": ...,
      "properties":{
         "spark.dataproc.lightningEngine.runtime":"native"
      }
    }
  }
}

Menonaktifkan Native Query Execution untuk tugas

Jika Anda mengaktifkan Native Query Execution (NQE) saat membuat cluster Lightning Engine, semua tugas Spark akan berjalan dengan NQE diaktifkan, kecuali jika Anda menonaktifkan NQE pada tugas tertentu.

Anda dapat menonaktifkan NQE untuk tugas Spark tertentu saat mengirimkan tugas, seperti yang ditunjukkan dalam contoh berikut.

gcloud

Untuk menonaktifkan Native Query Execution saat Anda mengirimkan tugas Spark ke cluster Lightning Engine, sertakan properti spark.dataproc.lightningEngine.runtime=default:

gcloud dataproc jobs submit spark \
    --cluster=CLUSTER_NAME \
    --region=REGION \
    --properties=spark.dataproc.lightningEngine.runtime=default \
    -- ...

API

Untuk menonaktifkan Native Query Execution saat Anda mengirimkan tugas Spark ke cluster Lightning Engine, sertakan properti spark.dataproc.lightningEngine.runtime=default:

{
  "job":{
    "placement":{
      "clusterName": ...
    },
    "sparkJob":{
      "mainClass": ...,
      "properties":{
         "spark.dataproc.lightningEngine.runtime":"default"
      }
    }
  }
}

Memverifikasi Eksekusi Kueri Native untuk tugas

Setelah mengirimkan tugas ke cluster Lightning Engine, Anda dapat memverifikasi bahwa Native Query Execution diaktifkan untuk tugas tersebut.

Konsol

  1. Di konsol Google Cloud , buka halaman Jobs.
  2. Klik ID pekerjaan untuk membuka halaman Job details.
  3. Pastikan native tercantum di kolom Native Execution.

gcloud

  1. Jalankan perintah gcloud dataproc jobs describe:

    gcloud dataproc jobs describe JOB_ID --project=PROJECT_ID --region=REGION
    
  2. Periksa output untuk lightningEngine.runtime di bagian Properties:

    lightningEngine.runtime: native
    

Parameter konfigurasi

Tabel berikut merangkum parameter konfigurasi utama untuk Lightning Engine dan Native Query Execution.

Nama Parameter Deskripsi Mesin yang berlaku Nilai default Nilai default (Lightning Engine) Dapat diganti pengguna (tingkat tugas) Cakupan
--engine Setelan tingkat cluster untuk memilih mesin selama pembuatan cluster. Seluruh cluster default lightning Tidak Cluster
spark:spark.dataproc.lightningEngine.runtime Setelan tingkat cluster untuk memilih runtime mesin Lightning selama pembuatan cluster. Khusus Lightning default default Tidak Cluster
spark.dataproc.lightningEngine.runtime Mengaktifkan atau menonaktifkan Native Query Execution (NQE) dalam Lightning Engine. Khusus Lightning default default Ya. Dapat ditetapkan ke native atau default. Tugas

Batasan

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

Pengganti

Eksekusi Kueri Native dalam skenario berikut dapat menyebabkan workload kembali ke mesin eksekusi Spark:

  • 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 Anda menggunakan Native Query Execution dalam kasus berikut:

  • Fungsi JSON: Native Query Execution mendukung string yang diapit tanda kutip ganda, bukan tanda kutip tunggal. Hasil yang salah terjadi dengan tanda kutip tunggal. Menggunakan * 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.
    • Native Query Execution mengabaikan spark.sql.parquet.datetimeRebaseModeInRead, dan hanya menampilkan konten file Parquet. Perbedaan antara kalender hibrid lama dan kalender Gregorian Proleptik tidak dipertimbangkan. Hasil Spark bisa berbeda.
  • NaN: tidak didukung. Hasil yang tidak terduga dapat terjadi, misalnya, saat Anda menggunakan NaN dalam perbandingan numerik.
  • Pembacaan kolom Spark: error fatal dapat terjadi karena vektor kolom Spark tidak kompatibel dengan Native Query Execution.
  • Spill: saat Anda menetapkan partisi shuffle ke jumlah yang besar, fitur spill-to-disk dapat memicu OutOfMemoryException. Jika hal ini terjadi, mengurangi jumlah partisi dapat menghilangkan pengecualian ini.

Langkah berikutnya