Menggunakan Lightning Engine

Lightning Engine adalah performa Apache Spark generasi berikutnya, yang memperkenalkan peningkatan eksklusif yang dirancang untuk memberikan peningkatan substansial dalam performa, efisiensi biaya, dan stabilitas operasional.

Manfaat

Manfaat Lightning Engine meliputi:

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

  • Eksekusi kueri cerdas: Manfaatkan peningkatan pengoptimal tingkat lanjut 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 disederhanakan: Kurangi waktu mulai cluster untuk workload berbasis GPU dan sederhanakan deployment di lingkungan yang aman dengan image AI dan ML native.

Meskipun Lightning Engine menawarkan peningkatan performa yang signifikan, dampak spesifiknya bervariasi dengan beban kerja. Alat ini paling cocok untuk tugas intensif komputasi yang memanfaatkan Spark Dataframe API, Spark Dataset API, dan kueri Spark SQL, bukan operasi yang terikat I/O.

Perbandingan dengan mesin standar

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

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

Persyaratan

Persyaratan berikut berlaku untuk fitur Lightning Engine:

  • Versi image: Lightning Engine harus digunakan dengan Managed Service untuk Apache Spark versi image 2.3.3 atau yang lebih baru.
  • Tugas yang didukung: Spark, PySpark, SparkSQL, dan SparkR didukung. Mesin standar akan berjalan pada jenis tugas lain yang dikirimkan ke cluster Lightning Engine.

Eksekusi Kueri Native

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

NQE direkomendasikan untuk:
Tugas yang intensif komputasi (bukan operasi yang terikat I/O) yang memanfaatkan API DataFrame Spark, API Dataset Spark, dan kueri Spark SQL yang membaca data dari file Parquet dan ORC. Format file output tidak memengaruhi performanya.
NQE tidak direkomendasikan untuk:
Tugas yang sangat bergantung pada Resilient Distributed Datasets (RDD), User-Defined Functions (UDF), atau sebagian besar library Machine Learning (ML) Spark.

Persyaratan

Persyaratan berikut berlaku untuk fitur Eksekusi Kueri Native:

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

  • Sistem operasi: Hanya image Debian-12 yang didukung. Tugas yang mendukung NQE dan menggunakan OS lain akan gagal.

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

  • Jenis mesin: Hanya kelompok mesin yang menggunakan prosesor Intel atau AMD yang didukung. Tugas yang mendukung NQE menggunakan prosesor ARM akan gagal (tetapi dapat memanfaatkan Lightning Engine tanpa NQE).

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

  • Jenis data: Input jenis data berikut tidak didukung:

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

Harga

Untuk mengetahui informasi harga, lihat Harga Managed Service for Apache Spark di Compute Engine.

Membuat cluster Lightning Engine

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

Anda juga dapat mengaktifkan Eksekusi Kueri Native (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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  6. Instal Google Cloud CLI.

  7. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  8. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    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.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  13. Instal Google Cloud CLI.

  14. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  15. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init

Peran yang diperlukan

Peran IAM tertentu diperlukan untuk membuat cluster Managed Service for Apache Spark dan mengirimkan tugas ke cluster. Bergantung pada kebijakan organisasi, peran ini mungkin sudah diberikan. 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 for 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 for Apache Spark, minta administrator Anda untuk memberikan peran IAM Managed Service for Apache Spark Worker (roles/dataproc.worker) kepada akun layanan default Compute Engine di project.

Membuat cluster

Contoh berikut menunjukkan cara membuat cluster Lightning Engine menggunakan Google Cloud konsol, Google Cloud CLI, Dataproc API, Python, atau Terraform. Anda juga dapat membuat cluster Managed Service for Apache Spark dengan Lightning Engine yang diaktifkan menggunakan library klien Go, Java, dan Node.js.

Konsol

  1. Di konsol Google Cloud , buka Membuat cluster Apache Spark di Compute Engine. Untuk mengetahui informasi selengkapnya, lihat membuat cluster dengan konsol. Google Cloud

    Buka Membuat cluster Apache Spark di Compute Engine

  2. Di bagian Define your cluster, centang kotak Enable Lightning Engine untuk membuat cluster dengan Lightning Engine yang diaktifkan.

  3. Opsional: Untuk mengaktifkan runtime eksekusi native secara default untuk tugas Spark, centang kotak Enable Native Execution.

  4. Konfigurasi setelan cluster lainnya sesuai kebutuhan.

  5. Klik Create.

gcloud CLI

  1. Untuk membuat cluster dengan Lightning Engine yang 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'
    

API

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

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

    {
      "projectId": "PROJECT_ID",
      "clusterName": "CLUSTER_NAME",
      "config": {
        "gceClusterConfig": {},
        "softwareConfig": {
          "imageVersion": "2.3"
        }
      },
      "engine": "LIGHTNING"
    }
    
  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": {
        "gceClusterConfig": {},
        "softwareConfig": {
          "imageVersion": "2.3",
          "properties": {
            "spark:spark.dataproc.lightningEngine.runtime": "native"
          }
        }
      },
      "engine": "LIGHTNING"
    }
    

Python

  1. Untuk membuat cluster dengan Lightning Engine yang 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 dan opsi lanjutan selengkapnya, 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 Mesin.
  3. Jika Anda mengaktifkan Eksekusi Kueri Native, verifikasi bahwa native tercantum di kolom Eksekusi Native.

gcloud

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

    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
    

Mengirimkan tugas dengan Lightning Engine

Setelah Anda membuat cluster Lightning Engine, saat Anda mengirimkan tugas Spark ke cluster, Lightning Engine akan otomatis diaktifkan pada tugas tersebut.

Mengaktifkan Eksekusi Kueri Native untuk tugas

Jika Anda mengaktifkan Eksekusi Kueri Native (NQE) saat Anda membuat cluster Lightning Engine, semua tugas Spark akan berjalan 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 tertentu saat mengirimkan tugas, seperti yang ditunjukkan dalam contoh berikut.

gcloud

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

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

API

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

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

Menonaktifkan Eksekusi Kueri Native untuk tugas

Jika Anda mengaktifkan Eksekusi Kueri Native (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 Eksekusi Kueri Native saat Anda mengirimkan tugas Spark, ke cluster Lightning Engine, sertakan properti spark.dataproc.lightningEngine.runtime=default:

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

API

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

```json
{
  "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 Eksekusi Kueri Native diaktifkan untuk tugas tersebut.

Konsol

  1. Di konsol Google Cloud , buka halaman Detail Tugas.
  2. Pastikan native tercantum di kolom Native Execution.

gcloud

  1. Jalankan perintah gcloud dataproc jobs describe:

    gcloud dataproc clusters 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 Eksekusi Kueri Native.

Nama Parameter Deskripsi Mesin telusur yang berlaku Nilai default Nilai default (Lightning Engine) Dapat diganti pengguna (tingkat tugas) Cakupan
--engine Setelan tingkat cluster untuk memilih mesin selama pembuatan cluster. Di 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 Eksekusi Kueri Native (NQE) dalam Lightning Engine. Khusus Lightning default default Ya. Dapat disetel ke native atau default. Tugas

Batasan

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 skenario berikut dapat menyebabkan penggantian beban kerja ke mesin eksekusi Spark:

  • ANSI: jika mode ANSI diaktifkan, eksekusi akan 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 Anda menggunakan Eksekusi Kueri Native dalam kasus berikut:

  • Fungsi JSON: Eksekusi Kueri Native mendukung string yang diapit oleh 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 isi file Parquet. Perbedaan antara kalender hybrid lama dan kalender Gregorian Proleptik tidak dipertimbangkan. Hasil Spark dapat 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 Eksekusi Kueri Native.
  • Tumpahan: saat Anda menyetel partisi pengacakan ke jumlah yang besar, fitur tumpahan ke disk dapat memicu OutOfMemoryException. Jika hal ini terjadi, mengurangi jumlah partisi dapat menghilangkan pengecualian ini.

Langkah berikutnya