Mengumumkan Ketersediaan Umum (GA) Native Query Execution, yang mendukung Spark Dataframe API, kueri Spark SQL yang membaca data dari file Parquet dan ORC, dan workload yang direkomendasikan oleh alat kualifikasi Native Query Execution. Untuk pertanyaan tentang kasus penggunaan tambahan, hubungi dataproc-pms@google.com.
Dokumen ini menjelaskan cara mengaktifkan workload batch Dataproc Serverless dan sesi interaktif yang berjalan di paket harga Premium untuk menggunakan Native Query Execution.
Cara menggunakan Eksekusi Kueri Native dengan harga paket premium
Eksekusi Kueri Native Dataproc Serverless hanya tersedia dengan workload batch dan sesi interaktif yang berjalan di tingkat harga premium Dataproc Serverless. Harga paket premium dikenai biaya yang lebih tinggi daripada harga paket standar, tetapi tidak ada biaya tambahan untuk Eksekusi Kueri Native. Untuk mengetahui informasi selengkapnya, lihat Harga Dataproc Serverless.
Anda dapat mengaktifkan alokasi dan harga resource tingkat premium untuk resource sesi interaktif dan batch dengan menetapkan properti tingkat alokasi resource berikut ke premium
saat Anda mengirimkan workload batch Spark atau sesi interaktif.
Anda mengonfigurasi Native Query Execution dengan menetapkan properti Native Query Execution pada beban kerja batch, sesi interaktif, atau template sesi, lalu mengirimkan beban kerja atau menjalankan sesi interaktif di notebook.
Konsol
Di konsol Google Cloud:
- Buka Dataproc Batches.
- Klik Buat untuk membuka halaman Buat batch.
Pilih dan isi kolom berikut untuk mengonfigurasi batch untuk Eksekusi Kueri Native:
- Penampung:
- Versi runtime: Pilih
1.2
,2.2
, atau jika tersedia, nomor versimajor.minor
yang lebih tinggi. Lihat Versi runtime Dataproc Serverless untuk Spark yang didukung.
- Versi runtime: Pilih
- Konfigurasi Tingkat Eksekutor dan Pengemudi:
- Pilih
Premium
untuk semua tingkat (Driver Compute Tier, Execute Compute Tier).
- Pilih
- Properti: Masukkan pasangan
Key
(nama properti) danValue
berikut untuk properti Native Query Execution berikut:Kunci Nilai spark.dataproc.runtimeEngine
native
- Penampung:
Isi, pilih, atau konfirmasi setelan beban kerja batch lainnya. Lihat Mengirimkan workload batch Spark.
Klik KIRIM untuk menjalankan workload batch Spark.
gcloud
Tetapkan flag perintah gcloud dataproc batches submit spark
gcloud CLI berikut untuk mengonfigurasi beban kerja batch untuk Eksekusi Kueri Native:
gcloud dataproc batches submit spark \ --project=PROJECT_ID \ --region=REGION \ --version=VERSION \ --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \ --class=org.apache.spark.examples.SparkPi \ --properties=spark.dataproc.runtimeEngine=native,spark.dataproc.driver.compute.tier=premium,spark.dataproc.executor.compute.tier=premium \ OTHER_FLAGS_AS_NEEDED
Catatan:
- PROJECT_ID: ID project Google Cloud Anda. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud.
- REGION: Region Compute Engine yang tersedia untuk menjalankan beban kerja.
- VERSION: Tentukan
1.2
,2.2
, atau jika tersedia, nomor versimajor.minor
yang lebih tinggi. Lihat Versi runtime Dataproc Serverless untuk Spark yang didukung. - OTHER_FLAGS_AS_NEEDED: Lihat Mengirimkan workload batch Spark.
API
Tetapkan kolom Dataproc API berikut untuk mengonfigurasi beban kerja batch untuk Eksekusi Kueri Native:
- RuntimeConfig.version:
Tentukan
1.2
,2.2
, atau jika tersedia, nomor versimajor.minor
yang lebih tinggi. Lihat Versi runtime Dataproc Serverless untuk Spark yang didukung. RuntimeConfig.properties: Tetapkan properti Eksekusi Kueri Native berikut:
"spark.dataproc.runtimeEngine":"native" "spark.dataproc.driver.compute.tier":"premium" "spark.dataproc.executor.compute".tier:"premium"
Catatan:
- Lihat Mengirimkan workload batch Spark untuk menetapkan kolom API workload batch lainnya.
Menyesuaikan beban kerja Eksekusi Kueri Native
Eksekusi Kueri Native Serverless Dataproc dapat disesuaikan lebih lanjut menggunakan properti berikut:
Properti Batch | Kapan digunakan |
---|---|
spark.driver.memory spark.driver.memoryOverhead |
To tune the memory provided to spark driver process |
spark.executor.memory spark.executor.memoryOverhead spark.memory.offHeap.size |
To tune the memory provided to onheap/offheap memory of executor process |
spark.dataproc.driver.disk.tier spark.dataproc.driver.disk.size |
To configure premium disk tier and size for driver |
spark.dataproc.executor.disk.tier spark.dataproc.executor.disk.size |
To configure premium disk tier and size for executor |
Properti Eksekusi Kueri Native
spark.dataproc.runtimeEngine=native
(Wajib): Mesin runtime beban kerja harus ditetapkan kenative
untuk mengganti mesin runtimespark
default.version
(Wajib): Beban kerja harus menggunakan versi runtime Spark 1.2.26+, 2.2.26+, atau versi runtime utama yang lebih baru.Tingkat komputasi premium (Wajib): Properti
spark.dataproc.spark.driver.compute.tier
danspark.dataproc.executor.compute.tier
harus ditetapkan kepremium
.Tingkat disk premium (Opsional dan Direkomendasikan): Tingkat disk premium menggunakan kolom, bukan shuffle berbasis baris, untuk memberikan performa yang lebih baik. Untuk throughput I/O shuffle yang lebih baik, gunakan tingkat disk premium pengemudi dan eksekutor dengan ukuran disk yang cukup besar untuk mengakomodasi file shuffle.
Memori (Opsional): Jika Anda telah mengonfigurasi mesin Native Query Execution tanpa mengonfigurasi memori off-heap (
spark.memory.offHeap.size
) dan memori on-heap (spark.executor.memory
), mesin Native Query Execution akan mengambil jumlah memori4g
default dan membaginya dalam rasio6:1
antara memori off-heap dan on-heap.Jika memutuskan untuk mengonfigurasi memori saat menggunakan Eksekusi Kueri Native, Anda dapat melakukannya dengan salah satu cara berikut:
Konfigurasi memori off-heap saja (
spark.memory.offHeap.size
) dengan nilai yang ditentukan. Eksekusi Kueri Native akan menggunakan nilai yang ditentukan sebagai memori off-heap, dan mengalokasikan1/7th
tambahan dari nilai memori off-heap sebagai memori on-heap.Konfigurasikan memori dalam heap (
spark.executor.memory
) dan memori di luar heap (spark.memory.offHeap.size
). Jumlah yang Anda alokasikan ke memori di luar heap harus lebih besar dari jumlah yang Anda alokasikan ke memori dalam heap. Rekomendasi: Alokasikan memori off-heap ke memori on-heap dengan rasio 6:1.
Nilai contoh:
Setelan memori tanpa Eksekusi Kueri Native Setelan memori yang direkomendasikan dengan Eksekusi Kueri Native spark.executor.memory
spark.memory.offHeap.size
spark.executor.memory
7g 6g 1g 14g 12g 2g 28g 24g 4g 56g 48g 8g
Alat kualifikasi Eksekusi Kueri Native
Anda dapat menjalankan alat kualifikasi Eksekusi Kueri Native Dataproc,
run_qualification_tool.sh
, untuk mengidentifikasi beban kerja yang dapat mencapai runtime lebih cepat
dengan Eksekusi Kueri Native. Alat ini menganalisis file peristiwa Spark yang dihasilkan oleh aplikasi beban kerja batch, lalu memperkirakan potensi penghematan runtime yang dapat diperoleh setiap aplikasi beban kerja dengan Native Query Execution.
Menjalankan alat kualifikasi
Lakukan langkah-langkah berikut untuk menjalankan alat terhadap file peristiwa workload batch Dataproc Serverless.
1.Salin
run_qualification_tool.sh
ke direktori lokal yang berisi file peristiwa Spark yang akan dianalisis.
Jalankan alat kualifikasi untuk menganalisis satu file peristiwa atau sekumpulan file peristiwa yang terdapat dalam direktori skrip.
./run_qualification_tool.sh -f EVENT_FILE_PATH/EVENT_FILE_NAME \ -o CUSTOM_OUTPUT_DIRECTORY_PATH \ -k SERVICE_ACCOUNT_KEY \ -x MEMORY_ALLOCATEDg \ -t PARALLEL_THREADS_TO_RUN
Flag dan nilai:
-f
(wajib): Lihat Lokasi file peristiwa Spark untuk menemukan file peristiwa beban kerja Spark.EVENT_FILE_PATH (wajib kecuali jika EVENT_FILE_NAME ditentukan): Jalur file peristiwa yang akan dianalisis. Jika tidak diberikan, jalur file peristiwa dianggap sebagai direktori saat ini.
EVENT_FILE_NAME (wajib kecuali jika EVENT_FILE_PATH ditentukan): Nama file peristiwa yang akan dianalisis. Jika tidak diberikan, file peristiwa yang ditemukan secara berulang di
EVENT_FILE_PATH
akan dianalisis.
-o
(opsional): Jika tidak diberikan, alat ini akan membuat atau menggunakan direktorioutput
yang ada di direktori saat ini untuk menempatkan file output.- CUSTOM_OUTPUT_DIRECTORY_PATH: Jalur direktori output ke file output.
-k
(opsional):- SERVICE_ACCOUNT_KEY: Kunci akun layanan dalam format JSON jika diperlukan untuk mengakses EVENT_FILE_PATH.
-x
(opsional):- MEMORY_ALLOCATED: Memori dalam gigabyte yang akan dialokasikan ke alat. Secara default, alat ini menggunakan 80% memori bebas yang tersedia di sistem dan semua core mesin yang tersedia.
-t
(opsional):- PARALLEL_THREADS_TO_RUN: N=jumlah thread paralel yang akan dijalankan oleh alat. Secara default, alat ini mengeksekusi semua core.
Contoh penggunaan perintah:
./run_qualification_tool.sh -f gs://dataproc-temp-us-east1-9779/spark-job-history \ -o perfboost-output -k /keys/event-file-key -x 34g -t 5
Dalam contoh ini, alat kualifikasi menjelajahi direktori
gs://dataproc-temp-us-east1-9779/spark-job-history
, dan menganalisis file peristiwa Spark yang terdapat dalam direktori ini dan subdirektorinya. Akses ke direktori diberikan/keys/event-file-key
. Alat ini menggunakan34 GB memory
, untuk eksekusi, dan menjalankan thread paralel5
.
File output alat kualifikasi
Setelah analisis selesai, alat kualifikasi menempatkan file output berikut di
direktori perfboost-output
di direktori saat ini:
AppsRecommendedForBoost.tsv
: Daftar aplikasi yang dipisahkan tab dan direkomendasikan untuk digunakan dengan Eksekusi Kueri Native.UnsupportedOperators.tsv
: Daftar aplikasi yang dipisahkan tab dan tidak direkomendasikan untuk digunakan dengan Eksekusi Kueri Native.
File output AppsRecommendedForBoost.tsv
Tabel berikut menunjukkan isi contoh file output
AppsRecommendedForBoost.tsv
. Tabel ini berisi baris untuk setiap aplikasi yang dianalisis.
Contoh file output AppsRecommendedForBoost.tsv
:
applicationId | applicationName | rddPercentage | unsupportedSqlPercentage | totalTaskTime | supportedTaskTime | supportedSqlPercentage | recommendedForBoost | expectedRuntimeReduction |
---|---|---|---|---|---|---|---|---|
app-2024081/batches/083f6196248043938-000 | projects/example.com:dev/locations/us-central1 6b4d6cae140f883c0 11c8e |
0,00% | 0,00% | 548924253 | 548924253 | 100% | TRUE | 30,00% |
app-2024081/batches/60381cab738021457-000 | projects/example.com:dev/locations/us-central1 474113a1462b426bf b3aeb |
0,00% | 0,00% | 514401703 | 514401703 | 100% | TRUE | 30,00% |
Deskripsi kolom:
applicationId
:ApplicationID
aplikasi Spark. Gunakan ini untuk mengidentifikasi beban kerja batch yang sesuai.applicationName
: Nama aplikasi Spark.rddPercentage
: Persentase operasi RDD dalam aplikasi. Operasi RDD tidak didukung oleh Eksekusi Kueri Native.unsupportedSqlPercentage:
Persentase operasi SQL yang tidak didukung oleh Native Query Execution.totalTaskTime
: Waktu tugas kumulatif dari semua tugas yang dijalankan selama aplikasi berjalan.supportedTaskTime
: Total waktu tugas yang didukung oleh Eksekusi Kueri Native.
Kolom berikut memberikan informasi penting untuk membantu Anda menentukan apakah Eksekusi Kueri Native dapat bermanfaat bagi beban kerja batch Anda:
supportedSqlPercentage
: Persentase operasi SQL yang didukung oleh eksekusi kueri native. Makin tinggi persentasenya, makin banyak pengurangan runtime yang dapat dicapai dengan menjalankan aplikasi dengan Eksekusi Kueri Native.recommendedForBoost
: JikaTRUE
, sebaiknya jalankan aplikasi dengan eksekusi kueri native. JikarecommendedForBoost
adalahFALSE
, jangan gunakan Eksekusi Kueri Native pada beban kerja batch.expectedRuntimeReduction
: Perkiraan pengurangan persentase runtime aplikasi saat Anda menjalankan aplikasi dengan Eksekusi Kueri Native.
File output UnsupportedOperators.tsv
.
File output UnsupportedOperators.tsv
berisi daftar operator yang digunakan dalam
aplikasi beban kerja yang tidak didukung oleh Native Query Execution.
Setiap baris dalam file output mencantumkan operator yang tidak didukung.
Deskripsi kolom:
unsupportedOperator
: Nama operator yang tidak didukung oleh Native Query Execution.cumulativeCpuMs
: Jumlah milidetik CPU yang digunakan selama eksekusi operator. Nilai ini mencerminkan tingkat kepentingan relatif operator dalam aplikasi.count
: Frekuensi operator digunakan dalam aplikasi.
Menjalankan alat kualifikasi di seluruh project
Bagian ini memberikan petunjuk untuk menjalankan skrip guna menjalankan alat kualifikasi untuk menganalisis file peristiwa Spark beban kerja batch dari beberapa project.
Persyaratan dan batasan skrip:
- Jalankan skrip di komputer Linux:
- Java Versi
>=11
harus diinstal sebagai versi Java default.
- Java Versi
- Karena log di Cloud Logging memiliki TTL 30 hari, file peristiwa Spark dari beban kerja batch yang berjalan lebih dari 30 hari yang lalu tidak dapat dianalisis.
Untuk menjalankan alat kualifikasi di seluruh project, lakukan langkah-langkah berikut.
Download skrip
list-batches-and-run-qt.sh
, lalu salin ke komputer lokal Anda.Mengubah izin skrip.
chmod +x list-batches-and-run-qt.sh
Siapkan daftar file input project untuk diteruskan ke skrip guna dianalisis. Buat file teks dengan menambahkan satu baris dalam format berikut untuk setiap project dan region dengan file peristiwa Spark beban kerja batch yang akan dianalisis.
-r REGION -s START_DATE -e END_DATE -p PROJECT_ID -l LIMIT_MAX_BATCHES -k KEY_PATH
Catatan:
-r
(wajib):- REGION: Region tempat batch dalam project dikirim.
-s
(wajib): Format:yyyy-mm-dd
. Anda dapat menambahkan segmen waktu00:00:00
opsional.- START_DATE: Hanya beban kerja batch yang dibuat setelah tanggal mulai yang akan dianalisis. Batch dianalisis dalam urutan menurun berdasarkan waktu pembuatan batch—batch terbaru dianalisis terlebih dahulu.
-e
(opsional): Format:yyyy-mm-dd
. Anda dapat menambahkan segmen waktu00:00:00
opsional.- END_DATE: Jika Anda menentukannya, hanya workload batch yang dibuat sebelum atau pada tanggal akhir yang akan dianalisis. Jika tidak ditentukan, semua batch yang dibuat setelah START_DATE dianalisis. Batch dianalisis dalam urutan menurun berdasarkan waktu pembuatan batch—batch terbaru dianalisis terlebih dahulu.
-l
(opsional):LIMIT_MAX_BATCHES: Jumlah batch maksimum yang akan dianalisis. Anda dapat menggunakan opsi ini bersama dengan START-DATE dan END-DATE untuk menganalisis sejumlah terbatas batch yang dibuat antara tanggal yang ditentukan.
Jika -l tidak ditentukan, jumlah default hingga
100
batch akan dianalisis.
-k
(opsional):- KEY_PATH: Jalur lokal yang berisi kunci akses Cloud Storage untuk file peristiwa Spark beban kerja.
Contoh file input:
-r us-central1 -s 2024-08-21 -p project1 -k key1 -r us-east1 -s 2024-08-21 -e 2024-08-23 -l 50 -p project2 -k key2
Catatan:
Baris 1: Maksimal 100 file peristiwa Spark terbaru (default) di
project1
di regionus-central1
dengan waktu pembuatan setelah2024-08-21 00:00:00 AM
akan dianalisis.key1
memungkinkan akses ke file di Cloud Storage.Baris 2: Maksimum 50 file peristiwa Spark terbaru di
project2
di regionus-eastl1
dengan waktu pembuatan setelah2024-08-21 00:00:00 AM
dan sebelum atau pada 23-08-2024 23.59.59 akan dianalisis.key2
memungkinkan akses ke file peristiwa di Cloud Storage.
Jalankan skrip
list-batches-and-run-qt.sh
. Analisis adalah output dalam fileAppsRecommendedForBoost.tsv
danUnsupportedOperators.tsv
../list-batches-and-run-qt.sh PROJECT_INPUT_FILE_LIST \ -x MEMORY_ALLOCATED \ -o CUSTOM_OUTPUT_DIRECTORY_PATH \ -t PARALLEL_THREADS_TO_RUN
Catatan:
PROJECT_INPUT_FILE_LIST: Lihat petunjuk #3 di bagian ini.
-x
,-o
, dan-t
: Lihat Menjalankan alat kualifikasi.
Lokasi file peristiwa Spark
Lakukan salah satu langkah berikut untuk menemukan file peristiwa Spark untuk workload batch Dataproc Serverless:
Di Cloud Storage, temukan
spark.eventLog.dir
untuk beban kerja, lalu download.- Jika Anda tidak dapat menemukan
spark.eventLog.dir
, tetapkanspark.eventLog.dir
ke lokasi Cloud Storage, lalu jalankan ulang beban kerja dan downloadspark.eventLog.dir
.
- Jika Anda tidak dapat menemukan
Jika Anda telah mengonfigurasi Spark History Server untuk tugas batch:
- Buka Spark History Server, lalu pilih beban kerja.
- Klik Download di kolom Log Peristiwa.
Kapan harus menggunakan Eksekusi Kueri Native
Gunakan Eksekusi Kueri Native dalam skenario berikut:
Spark Dataframe API dan kueri Spark SQL
yang membaca data dari file Parquet dan ORC.
Beban kerja yang direkomendasikan oleh
alat kualifikasi Eksekusi Kueri Native.
Kapan sebaiknya Eksekusi Kueri Native tidak digunakan
Jangan gunakan Eksekusi Kueri Native dalam skenario berikut karena hal tersebut mungkin tidak akan mencapai pengurangan runtime workload, dan dapat menyebabkan kegagalan atau regresi:
- Beban kerja yang tidak direkomendasikan oleh alat kualifikasi Eksekusi Kueri Native.
- Workload Spark RDD, UDF, dan ML
- Menulis workload
- Format file selain Parquet dan ORC
- Input dari jenis data berikut:
Timestamp, TinyInt, Byte, Struct, Array, Map
: ORC dan ParquetVarChar, Char
: ORC- Kueri yang berisi ekspresi reguler
- Workload yang menggunakan bucket Pemohon Membayar
- Setelan konfigurasi Cloud Storage non-default. Eksekusi Kueri Native menggunakan banyak setelan default meskipun diganti.
Batasan
Mengaktifkan Eksekusi Kueri Native dalam skenario berikut dapat menampilkan pengecualian, menimbulkan inkompatibilitas Spark, atau menyebabkan workload kembali ke mesin Spark default.
Pengganti
Eksekusi Kueri Native dalam eksekusi berikut dapat menyebabkan penggantian beban kerja ke mesin eksekusi Spark, yang mengakibatkan regresi atau kegagalan.
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 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 menampilkanNULL
.Konfigurasi pembacaan Parquet:
- Eksekusi Kueri Native memperlakukan
spark.files.ignoreCorruptFiles
seperti yang ditetapkan ke nilaifalse
default, meskipun ditetapkan ketrue
. - Eksekusi Kueri Native mengabaikan
spark.sql.parquet.datetimeRebaseModeInRead
, dan hanya menampilkan konten file Parquet. Perbedaan antara kalender hybrid lama (Julian Gregorian) dan kalender Proleptic Gregorian tidak dipertimbangkan. Hasil Spark dapat berbeda.
- Eksekusi Kueri Native memperlakukan
NaN
: Tidak didukung. Hasil yang tidak terduga dapat terjadi, misalnya, saat menggunakanNaN
dalam perbandingan numerik.Pembacaan kolom Spark: Error fatal dapat terjadi karena vektor kolom Spark tidak kompatibel dengan Eksekusi Kueri Native.
Spill: Jika partisi shuffle disetel ke jumlah besar, fitur spill-to-disk dapat memicu
OutOfMemoryException
. Jika hal ini terjadi, mengurangi jumlah partisi dapat menghilangkan pengecualian ini.