Menggunakan Lightning Engine
Lightning Engine adalah performa Apache Spark generasi berikutnya, yang memperkenalkan peningkatan eksklusif yang dirancang untuk memberikan peningkatan signifikan dalam performa, efisiensi biaya, dan stabilitas operasional.
Manfaat
Manfaat Lightning Engine mencakup hal berikut:
Operasi data yang dipercepat: Raih peningkatan performa dan penghematan biaya yang signifikan melalui pengoptimalan interaksi penyimpanan cloud, termasuk penanganan metadata, workload tulis, dan I/O vektor.
Eksekusi kueri 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 disederhanakan: 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 menurut workload. Lightning Engine paling cocok untuk tugas intensif komputasi yang memanfaatkan Spark Dataframe API, Spark Dataset API, dan kueri Spark SQL, bukan operasi terikat I/O.
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 mesin standar, penerapan workload, dan manfaat utama.
| Fitur | Mesin standar | Lightning Engine |
|---|---|---|
| Flag CLI | --engine=default atau hapus setelan flag |
--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.3atau yang lebih baru. - Tugas yang didukung: Spark, PySpark, SparkSQL, dan SparkR didukung. Mesin standar berjalan pada jenis tugas lain yang dikirimkan ke cluster Lightning Engine.
Eksekusi Kueri Native
Eksekusi Kueri Native (NQE) adalah komponen opsional Lightning Engine yang memberikan tingkat akselerasi yang lebih mendalam untuk tugas tertentu. NQE adalah mesin native berbasis 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 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), sebagian besar library Spark Machine Learning (ML), dan operasi terikat I/O dengan penundaan karena akses penyimpanan.
Persyaratan
Persyaratan berikut berlaku untuk fitur Eksekusi Kueri Native:
Mesin eksekusi: NQE hanya tersedia di cluster yang diaktifkan dengan Lightning Engine saat pembuatan cluster.
Sistem operasi: Hanya sistem operasi
Debian-12danUbuntu-22yang didukung. Tugas yang mengaktifkan NQE 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 mengaktifkan NQE menggunakan prosesor ARM akan gagal (tetapi dapat memanfaatkan Lightning Engine tanpa NQE).
Tanpa GPU dan Akselerator: Tugas yang mengaktifkan NQE yang dikirimkan pada 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, Peta: Parquet
Harga
Untuk 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 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
- Login ke akun Anda. Google Cloud 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that you have the permissions required to complete this guide.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init
Peran yang diperlukan
Peran 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 cara memberikan 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:
-
Semua:
- Editor Dataproc (
roles/dataproc.editor) di project - Pengguna Akun Layanan (
roles/iam.serviceAccountUser) di akun layanan default Compute Engine
- Editor Dataproc (
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
Di Google Cloud konsol, buka Create an Apache Spark cluster on Compute Engine. Untuk mengetahui informasi selengkapnya, lihat membuat cluster dengan Google Cloud konsol.
Di bagian Define your cluster, centang kotak Enable Lightning Engine.
Opsional: Untuk mengaktifkan runtime eksekusi native secara default untuk tugas Spark, centang kotak Enable Native Execution.
Konfigurasi setelan cluster lainnya sesuai kebutuhan.
Klik Create.
gcloud CLI
Untuk membuat cluster dengan Lightning Engine yang diaktifkan, jalankan perintah
gcloud dataproc clusters createdengan 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.3Opsional: 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.
Di isi permintaan, tetapkan kolom ke
LIGHTNING.engine{ "projectId": "PROJECT_ID", "clusterName": "CLUSTER_NAME", "config": { "engine": "LIGHTNING", "gceClusterConfig": {}, "softwareConfig": { "imageVersion": "2.3" } } }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
Untuk membuat cluster dengan Lightning Engine yang diaktifkan, gunakan metode
create_clusterdan tetapkan kolomenginedalam konfigurasi cluster keLIGHTNING. 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}")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
- Dalam konfigurasi resource
google_dataproc_cluster, tetapkan argumenenginekeLIGHTNING. - Untuk mengetahui detail selengkapnya dan opsi lanjutan, lihat dokumentasi Terraform resmi untuk resource
google_dataproc_cluster
Memverifikasi mesin cluster
Konsol
- Di Google Cloud konsol, buka halaman Cluster Details.
- Pastikan nilai
Lightning Enginetercantum di kolom Engine. - Jika Anda mengaktifkan Eksekusi Kueri Native, pastikan
nativetercantum di kolom Native Execution.
gcloud
Untuk memverifikasi mesin dan NQE (jika diaktifkan), jalankan perintah
gcloud dataproc clusters describe:gcloud dataproc clusters describe CLUSTER_NAME --project=PROJECT_ID --region=REGIONPeriksa output untuk properti
enginedanlightningEngine.runtime:clusterName: lightning-engine-cluster engine: lightningEngine lightningEngine.runtime: native
Mengirimkan 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 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.
Jika Anda tidak mengaktifkan NQE saat membuat cluster Lightning Engine, Anda dapat mengaktifkan NQE untuk tugas saat Anda 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:
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:
{
"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 Anda 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 Anda 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:
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:
{
"job":{
"placement":{
"clusterName": ...
},
"sparkJob":{
"mainClass": ...,
"properties":{
"spark.dataproc.lightningEngine.runtime":"default"
}
}
}
}
Memverifikasi Eksekusi Kueri Native untuk tugas
Setelah Anda mengirimkan tugas ke cluster Lightning Engine, Anda dapat memverifikasi bahwa Eksekusi Kueri Native diaktifkan untuk tugas tersebut.
Konsol
- Di Google Cloud konsol, buka halaman Job Details.
- Pastikan
nativetercantum di kolom Native Execution.
gcloud
Jalankan perintah
gcloud dataproc jobs describe:gcloud dataproc jobs describe JOB_ID --project=PROJECT_ID --region=REGIONPeriksa output untuk
lightningEngine.runtimedi bagian Properties:lightningEngine.runtime: native
Parameter konfigurasi
Tabel berikut merangkum parameter konfigurasi utama untuk Lightning Engine dan Eksekusi Kueri Native.
| 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 Lightning Engine 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 ditetapkan ke native atau default. |
Tugas |
Batasan
Mengaktifkan Eksekusi Kueri Native dalam skenario berikut dapat menyebabkan pengecualian, ketidakcocokan Spark, atau fallback workload ke mesin Spark default.
Fallback
Eksekusi Kueri Native dalam skenario berikut dapat menyebabkan fallback workload 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 peka huruf besar/kecil default Spark. Jika mode peka huruf besar/kecil diaktifkan, hasil yang salah dapat terjadi.
- Pemindaian tabel berpartisi: Eksekusi Kueri Native hanya mendukung pemindaian tabel berpartisi 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 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 kutip tunggal. Menggunakan
*di jalur dengan fungsiget_json_objectakan menampilkanNULL. - Konfigurasi baca Parquet:
- Eksekusi Kueri Native memperlakukan
spark.files.ignoreCorruptFilessebagai ditetapkan ke nilaifalsedefault, meskipun ditetapkan ketrue. - Eksekusi Kueri Native mengabaikan
spark.sql.parquet.datetimeRebaseModeInRead, dan hanya menampilkan konten file Parquet. Perbedaan antara kalender hibrida lama dan kalender Gregorian Proleptic tidak dipertimbangkan. Hasil Spark dapat berbeda.
- Eksekusi Kueri Native memperlakukan
- NaN: tidak didukung. Hasil yang tidak terduga dapat terjadi, misalnya, saat Anda menggunakan
NaNdalam perbandingan numerik. - Pembacaan kolom Spark: error fatal dapat terjadi karena vektor kolom Spark tidak kompatibel dengan Eksekusi Kueri Native.
- Spill: saat Anda menetapkan partisi shuffle ke angka yang besar, fitur
spill-to-disk dapat memicu
OutOfMemoryException. Jika hal ini terjadi, mengurangi jumlah partisi dapat menghilangkan pengecualian ini.