Menggunakan Penjadwalan Resource yang Fleksibel di Cloud Dataflow

Halaman ini menjelaskan cara mengaktifkan Penjadwalan Resource Fleksibel (FlexRS) untuk pipeline batch yang diskalakan otomatis di Dataflow.

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

Tugas dengan FlexRS menggunakan Dataflow Shuffle berbasis layanan untuk bergabung dan mengelompokkan. Akibatnya, tugas FlexRS tidak menggunakan resource Persistent Disk untuk menyimpan hasil penghitungan sementara. Dengan Dataflow Shuffle, FlexRS dapat menangani preemption 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 kecil sebesar 25 GB 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.
  • Tugas FlexRS mengalami penundaan penjadwalan. Oleh karena itu, FlexRS paling cocok untuk beban kerja yang tidak mendesak, seperti tugas harian atau mingguan yang dapat diselesaikan dalam jangka waktu tertentu.

Penjadwalan tertunda

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

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

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

    1. Jika berhasil, mengantrekan tugas untuk menunggu peluncuran yang tertunda.
    2. Di semua kasus lain, tugas akan gagal dan layanan Dataflow akan melaporkan error.

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

Validasi awal

Tugas FlexRS tidak segera diluncurkan setelah pengiriman. Selama validasi awal, layanan Dataflow akan 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 akan ditagih untuk proses validasi awal ini.

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

Aktifkan FlexRS

Saat Anda membuat tugas FlexRS, kuota tugas serentak akan diambil, meskipun tugas tersebut berstatus Queued. Proses validasi awal tidak memverifikasi atau mencadangkan kuota lainnya. Oleh karena itu, sebelum mengaktifkan FlexRS, pastikan Anda memiliki quotas resource project Google Cloud yang cukup untuk meluncurkan tugas Anda. Hal ini mencakup kuota tambahan untuk CPU yang dapat dihentikan, CPU biasa, 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 preemptible VM untuk 90% pekerja dalam kumpulan pekerja secara default. Saat merencanakan kuota CPU, pastikan Anda memiliki kuota preemptible VM yang cukup. Anda dapat secara eksplisit meminta kuota preemptible VM; jika tidak, tugas FlexRS tidak akan memiliki resource untuk dijalankan tepat waktu.

Harga

Tugas FlexRS dikenai biaya untuk resource berikut:

  • CPU reguler dan yang dapat dihentikan
  • Resource memori
  • Resource Dataflow Shuffle
  • 25 GB per pekerja resource Persistent Disk

Meskipun Dataflow menggunakan pekerja preemptible dan reguler untuk menjalankan tugas FlexRS, Anda akan dikenai tarif diskon yang seragam dibandingkan dengan harga Dataflow reguler, apa pun jenis pekerjanya. 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 berarti layanan Dataflow memilih resource dengan 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 menghilangkan tanda ini.

Tugas FlexRS memengaruhi parameter eksekusi berikut:

  • numWorkers hanya menetapkan jumlah pekerja awal. Namun, Anda dapat menetapkan maxNumWorkers karena alasan kontrol biaya.
  • Anda tidak dapat menetapkan autoscalingAlgorithm=NONE.
  • 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 Dataflow sebagai region Anda.
  • 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 berarti layanan Dataflow memilih resource dengan 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 menghilangkan tanda ini.

Tugas FlexRS memengaruhi parameter eksekusi berikut:

  • num_workers hanya menetapkan jumlah pekerja awal. Namun, Anda dapat menetapkan max_num_workers karena alasan kontrol biaya.
  • Anda tidak dapat menetapkan autoscaling_algorithm=NONE.
  • 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 Dataflow sebagai region Anda.
  • 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 berarti layanan Dataflow memilih resource dengan 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 menghilangkan tanda ini.

Tugas FlexRS memengaruhi parameter eksekusi berikut:

  • num_workers hanya menetapkan jumlah pekerja awal. Namun, Anda dapat menetapkan max_num_workers karena alasan kontrol biaya.
  • Anda tidak dapat menetapkan autoscaling_algorithm=NONE.
  • 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 Dataflow sebagai region Anda.
  • 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.

Memantau tugas FlexRS

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

  1. Halaman Lowongan yang menampilkan semua tugas Anda.
  2. Halaman Monitoring interface untuk pekerjaan yang Anda kirimkan.

Di halaman Jobs, tugas yang belum dimulai akan menampilkan status Queued.

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

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

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