Menggunakan Penjadwalan Resource Fleksibel di Cloud Dataflow

Halaman ini menjelaskan cara mengaktifkan Flexible Resource Scheduling (FlexRS) untuk pipeline batch yang diskalakan secara otomatis di Dataflow.

FlexRS mengurangi biaya pemrosesan batch dengan menggunakan teknik penjadwalan lanjutan, layanan Dataflow Shuffle, dan kombinasi instance virtual machine (VM) preemptible dan VM reguler. Dengan menjalankan VM preemptible dan VM reguler secara paralel, Dataflow meningkatkan pengalaman pengguna saat Compute Engine menghentikan instance VM preemptible selama peristiwa sistem. FlexRS membantu memastikan bahwa pipeline terus membuat progres dan Anda tidak kehilangan pekerjaan sebelumnya saat Compute Engine menghentikan VM preemptible Anda.

Tugas dengan FlexRS menggunakan Dataflow Shuffle berbasis layanan untuk penggabungan dan pengelompokan. Akibatnya, tugas FlexRS tidak menggunakan resource Persistent Disk untuk menyimpan hasil penghitungan sementara. Dengan menggunakan Dataflow Shuffle, FlexRS dapat menangani preempti VM pekerja dengan lebih baik, karena layanan Dataflow tidak perlu mendistribusikan ulang data ke pekerja yang tersisa. Setiap pekerja Dataflow masih memerlukan volume Persistent Disk sebesar 25 GB yang kecil untuk menyimpan image mesin dan log sementara.

Dukungan dan batasan

  • Mendukung pipeline batch.
  • Memerlukan Apache Beam SDK untuk Java 2.12.0 atau yang lebih baru, Apache Beam SDK untuk Python 2.12.0 atau yang lebih baru, atau Apache Beam SDK untuk Go.
  • Menggunakan Dataflow Shuffle. Mengaktifkan FlexRS akan otomatis mengaktifkan Dataflow Shuffle.
  • Tidak mendukung GPU.
  • Tidak mendukung reservasi Compute Engine.
  • Tugas FlexRS memiliki penundaan penjadwalan. Oleh karena itu, FlexRS paling cocok untuk workload yang tidak mendesak, seperti tugas harian atau mingguan yang dapat selesai dalam jangka waktu tertentu.

Penjadwalan tertunda

Saat Anda mengirimkan tugas FlexRS, layanan Dataflow akan menempatkan tugas ke dalam antrean dan mengirimkannya untuk dijalankan dalam waktu enam jam setelah pembuatan tugas. Dataflow akan menemukan waktu terbaik untuk memulai tugas dalam periode waktu tersebut, berdasarkan kapasitas yang tersedia dan faktor lainnya.

Saat Anda mengirimkan tugas FlexRS, layanan Dataflow akan menjalankan langkah-langkah berikut:

  1. Menampilkan ID tugas segera setelah pengiriman tugas.
  2. Melakukan validasi awal.
  3. Menggunakan hasil validasi awal untuk menentukan langkah berikutnya.

    1. Jika berhasil, tugas akan dimasukkan ke antrean untuk menunggu peluncuran penundaan.
    2. Dalam kasus lain, tugas akan gagal dan layanan Dataflow akan melaporkan error.

Jika validasi berhasil, di antarmuka pemantauan Dataflow, tugas Anda akan menampilkan ID dan Queued status. Jika validasi gagal, tugas Anda akan menampilkan status Failed.

Validasi awal

Tugas FlexRS tidak langsung diluncurkan setelah dikirim. Selama validasi awal, layanan Dataflow memverifikasi parameter eksekusi dan setelan lingkungan Google Cloud, seperti peran IAM dan konfigurasi jaringan. Dataflow memvalidasi tugas sebanyak mungkin pada waktu pengiriman tugas dan melaporkan potensi error. Anda tidak ditagih untuk proses validasi awal ini.

Langkah validasi awal tidak mengeksekusi kode pengguna. Anda harus memverifikasi kode untuk memeriksa masalah menggunakan tugas Direct Runner atau non-FlexRS Apache Beam. Jika ada perubahan lingkungan Google Cloud antara pembuatan tugas dan penjadwalan tugas yang tertunda, tugas mungkin berhasil selama validasi awal, tetapi masih gagal pada waktu peluncuran.

Mengaktifkan FlexRS

Saat Anda membuat tugas FlexRS, kuota tugas serentak akan diambil, meskipun tugas tersebut dalam status Antrean. Proses validasi awal tidak memverifikasi atau mencadangkan kuota lainnya. Oleh karena itu, sebelum mengaktifkan FlexRS, pastikan Anda memiliki kuota resource project Google Cloud yang cukup untuk meluncurkan tugas. Hal ini mencakup kuota tambahan untuk CPU yang dapat di-preempt, CPU reguler, dan alamat IP, kecuali jika Anda menonaktifkan Parameter IP publik.

Jika Anda tidak memiliki cukup kuota, akun Anda mungkin tidak memiliki cukup resource saat tugas FlexRS di-deploy. Dataflow memilih VM preemptible untuk 90% pekerja di kumpulan pekerja secara default. Saat merencanakan kuota CPU, pastikan Anda memiliki kuota VM preemptible yang memadai. Anda dapat secara eksplisit meminta kuota VM preemptible; jika tidak, tugas FlexRS Anda tidak akan memiliki resource untuk dieksekusi secara tepat waktu.

Harga

Tugas FlexRS dikenai biaya untuk resource berikut:

  • CPU reguler dan preemptible
  • Resource memori
  • Resource Dataflow Shuffle
  • 25 GB per pekerja untuk resource Persistent Disk

Meskipun Dataflow menggunakan pekerja preemptible dan reguler untuk menjalankan tugas FlexRS, Anda akan ditagih dengan tarif diskon seragam dibandingkan dengan harga Dataflow reguler, terlepas dari jenis pekerja. Resource Dataflow Shuffle dan Persistent Disk tidak didiskon.

Untuk mengetahui informasi selengkapnya, baca halaman Detail harga Dataflow.

Opsi pipeline

Java

Untuk mengaktifkan tugas FlexRS, gunakan opsi pipeline berikut:

  • --flexRSGoal=COST_OPTIMIZED, dengan sasaran pengoptimalan biaya yang berarti bahwa layanan Dataflow memilih resource diskon yang tersedia.

  • --flexRSGoal=SPEED_OPTIMIZED, yang mengoptimalkan waktu eksekusi yang lebih rendah. Jika tidak ditentukan, kolom --flexRSGoal akan ditetapkan secara default ke SPEED_OPTIMIZED, yang sama dengan menghapus tanda ini.

Tugas FlexRS memengaruhi parameter eksekusi berikut:

  • numWorkers hanya menetapkan jumlah pekerja awal. Namun, Anda dapat menetapkan maxNumWorkers untuk alasan pengendalian biaya.
  • Anda tidak dapat menggunakan opsi autoscalingAlgorithm dengan tugas FlexRS.
  • Anda tidak dapat menentukan flag zone untuk tugas FlexRS. Layanan Dataflow memilih zona untuk semua tugas FlexRS di region yang Anda tentukan dengan parameter region.
  • Anda harus memilih Lokasi aliran data sebagai region.
  • Anda tidak dapat menggunakan seri mesin M2, M3, atau H3 untuk workerMachineType.

Contoh berikut menunjukkan cara menambahkan parameter ke parameter pipeline reguler untuk menggunakan FlexRS:

--flexRSGoal=COST_OPTIMIZED \
--region=europe-west1 \
--maxNumWorkers=10 \
--workerMachineType=n1-highmem-16

Jika Anda menghapus region, maxNumWorkers, dan workerMachineType, layanan Dataflow akan menentukan nilai default.

Python

Untuk mengaktifkan tugas FlexRS, gunakan opsi pipeline berikut:

  • --flexrs_goal=COST_OPTIMIZED, dengan sasaran pengoptimalan biaya yang berarti bahwa layanan Dataflow memilih resource diskon yang tersedia.

  • --flexrs_goal=SPEED_OPTIMIZED, yang mengoptimalkan waktu eksekusi yang lebih rendah. Jika tidak ditentukan, kolom --flexrs_goal akan ditetapkan secara default ke SPEED_OPTIMIZED, yang sama dengan menghapus tanda ini.

Tugas FlexRS memengaruhi parameter eksekusi berikut:

  • num_workers hanya menetapkan jumlah pekerja awal. Namun, Anda dapat menetapkan max_num_workers untuk alasan pengendalian biaya.
  • Anda tidak dapat menggunakan opsi autoscalingAlgorithm dengan tugas FlexRS.
  • Anda tidak dapat menentukan flag zone untuk tugas FlexRS. Layanan Dataflow memilih zona untuk semua tugas FlexRS di region yang Anda tentukan dengan parameter region.
  • Anda harus memilih Lokasi aliran data sebagai region.
  • Anda tidak dapat menggunakan seri mesin M2, M3, atau H3 untuk machine_type.

Contoh berikut menunjukkan cara menambahkan parameter ke parameter pipeline reguler untuk menggunakan FlexRS:

--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16

Jika Anda menghapus region, max_num_workers, dan machine_type, layanan Dataflow akan menentukan nilai default.

Go

Untuk mengaktifkan tugas FlexRS, gunakan opsi pipeline berikut:

  • --flexrs_goal=COST_OPTIMIZED, dengan sasaran pengoptimalan biaya yang berarti bahwa layanan Dataflow memilih resource diskon yang tersedia.

  • --flexrs_goal=SPEED_OPTIMIZED, yang mengoptimalkan waktu eksekusi yang lebih rendah. Jika tidak ditentukan, kolom --flexrs_goal akan ditetapkan secara default ke SPEED_OPTIMIZED, yang sama dengan menghapus tanda ini.

Tugas FlexRS memengaruhi parameter eksekusi berikut:

  • num_workers hanya menetapkan jumlah pekerja awal. Namun, Anda dapat menetapkan max_num_workers untuk alasan pengendalian biaya.
  • Anda tidak dapat menggunakan opsi autoscalingAlgorithm dengan tugas FlexRS.
  • Anda tidak dapat menentukan flag zone untuk tugas FlexRS. Layanan Dataflow memilih zona untuk semua tugas FlexRS di region yang Anda tentukan dengan parameter region.
  • Anda harus memilih Lokasi aliran data sebagai region.
  • Anda tidak dapat menggunakan seri mesin M2, M3, atau H3 untuk worker_machine_type.

Contoh berikut menunjukkan cara menambahkan parameter ke parameter pipeline reguler untuk menggunakan FlexRS:

--flexrs_goal=COST_OPTIMIZED \
--region=europe-west1 \
--max_num_workers=10 \
--machine_type=n1-highmem-16

Jika Anda menghapus region, max_num_workers, dan machine_type, layanan Dataflow akan menentukan nilai default.

Template Dataflow

Beberapa template Dataflow tidak mendukung opsi pipeline FlexRS. Sebagai alternatif, gunakan opsi pipeline berikut.

--additional-experiments=flexible_resource_scheduling,shuffle_mode=service,delayed_launch

Memantau tugas FlexRS

Anda dapat memantau status tugas FlexRS di konsol Google Cloud di dua tempat:

  1. Halaman Tugas yang menampilkan semua tugas Anda.
  2. Halaman Antarmuka pemantauan tugas yang Anda kirimkan.

Di halaman Tugas, tugas yang belum dimulai akan menampilkan status Antrean.

Daftar tugas Dataflow di konsol Google Cloud yang berisi tugas dengan status Antrean.
Gambar 1: Daftar tugas Dataflow di konsol Google Cloud yang berisi tugas dengan status Diantrekan.

Di halaman Monitoring interface, tugas yang menunggu dalam antrean akan menampilkan pesan "Grafik akan muncul setelah tugas dimulai" di tab Job graph.

Tugas pipeline individual yang diantrekan di antarmuka pemantauan Cloud Dataflow.
Gambar 2: Tugas pipeline individual yang diantrekan ditampilkan di antarmuka pemantauan Dataflow.