Mempercepat beban kerja batch Dataproc Serverless dan sesi interaktif dengan Native Query Execution

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

  1. Di konsol Google Cloud:

    1. Buka Dataproc Batches.
    2. Klik Buat untuk membuka halaman Buat batch.
  2. Pilih dan isi kolom berikut untuk mengonfigurasi batch untuk Eksekusi Kueri Native:

    • Penampung:
    • Konfigurasi Tingkat Eksekutor dan Pengemudi:
      • Pilih Premium untuk semua tingkat (Driver Compute Tier, Execute Compute Tier).
    • Properti: Masukkan pasangan Key (nama properti) dan Value berikut untuk properti Native Query Execution berikut:
      Kunci Nilai
      spark.dataproc.runtimeEngine native
  3. Isi, pilih, atau konfirmasi setelan beban kerja batch lainnya. Lihat Mengirimkan workload batch Spark.

  4. 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:

API

Tetapkan kolom Dataproc API berikut untuk mengonfigurasi beban kerja batch untuk Eksekusi Kueri Native:

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 ke native untuk mengganti mesin runtime spark 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 dan spark.dataproc.executor.compute.tier harus ditetapkan ke premium.

  • 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 memori 4g default dan membaginya dalam rasio 6: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 mengalokasikan 1/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.

  1. 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 direktori output 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 menggunakan 34 GB memory, untuk eksekusi, dan menjalankan thread paralel 5.

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: Jika TRUE, sebaiknya jalankan aplikasi dengan eksekusi kueri native. Jika recommendedForBoost adalah FALSE, 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.
  • 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.

  1. Download skrip list-batches-and-run-qt.sh, lalu salin ke komputer lokal Anda.

  2. Mengubah izin skrip.

    chmod +x list-batches-and-run-qt.sh
    
  3. 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 waktu 00: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 waktu 00: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 region us-central1 dengan waktu pembuatan setelah 2024-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 region us-eastl1 dengan waktu pembuatan setelah 2024-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.

  4. Jalankan skrip list-batches-and-run-qt.sh. Analisis adalah output dalam file AppsRecommendedForBoost.tsv dan UnsupportedOperators.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:

Lokasi file peristiwa Spark

Lakukan salah satu langkah berikut untuk menemukan file peristiwa Spark untuk workload batch Dataproc Serverless:

  1. Di Cloud Storage, temukan spark.eventLog.dir untuk beban kerja, lalu download.

    1. Jika Anda tidak dapat menemukan spark.eventLog.dir, tetapkan spark.eventLog.dir ke lokasi Cloud Storage, lalu jalankan ulang beban kerja dan download spark.eventLog.dir.
  2. Jika Anda telah mengonfigurasi Spark History Server untuk tugas batch:

    1. Buka Spark History Server, lalu pilih beban kerja.
    2. 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 Parquet
    • VarChar, 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 menampilkan NULL.

  • Konfigurasi pembacaan Parquet:

    • Eksekusi Kueri Native memperlakukan spark.files.ignoreCorruptFiles seperti yang 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 hybrid lama (Julian Gregorian) dan kalender Proleptic Gregorian 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.

  • 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.