Menjeda tugas Dataflow

Gunakan opsi layanan pause-on-failure untuk mempertahankan status tugas batch Dataflow Anda. Dengan fitur ini, Anda dapat menjeda eksekusi tugas, mengatasi masalah yang bersifat eksternal terhadap pipeline, dan melanjutkan pemrosesan tanpa kehilangan pekerjaan yang telah selesai. Saat tugas dijeda menggunakan fitur ini, Anda tidak dapat mengubah kode pipeline atau konfigurasi VM pekerja, seperti jenis mesin.

Dengan mengaktifkan kemampuan ini, Anda dapat mengelola biaya resource dengan lebih baik dan meningkatkan keandalan tugas selama pemadaman sementara atau batasan kuota. Anda dapat mempertahankan kontrol atas siklus proses pipeline dengan mengonfigurasi durasi jeda maksimum saat mengaktifkan jeda saat terjadi kegagalan. Anda juga dapat menjeda atau melanjutkan pipeline secara manual yang mengaktifkan flag pause-on-failure.

Manfaat jeda saat gagal

Opsi layanan jeda saat terjadi kegagalan memungkinkan Anda mempertahankan progres tugas batch selama gangguan, sehingga mengurangi total waktu komputasi dan pengeluaran resource.

  • Penyimpanan checkpoint: Jika tugas gagal, Anda dapat melanjutkannya dari checkpoint terakhir yang direkam, bukan memulai ulang dari awal. Hal ini menghindari kebutuhan untuk memproses ulang blok data yang telah selesai, yang berarti Anda tidak perlu membayar untuk mengulang pekerjaan yang telah berhasil diselesaikan.
  • Mengurangi dependensi eksternal: Lindungi pipeline Anda dari masalah sementara, seperti gangguan sementara atau batas kecepatan di layanan eksternal. Menjeda tugas memberi Anda kesempatan untuk mengatasi penyebab utama sebelum melanjutkan eksekusi tanpa kehilangan pekerjaan yang telah selesai.
  • Menangani kegagalan non-deterministik: Untuk beban kerja yang rentan terhadap kegagalan yang bersifat sesekali atau non-deterministik, opsi ini memungkinkan Anda mengamankan progres inkremental pada setiap upaya berurutan, sehingga mencegah kegagalan total tugas.
  • Mengelola resource dan kuota: Jeda tugas batch berprioritas rendah untuk mengosongkan kuota sementara atau mengalokasikan ulang resource bernilai tinggi, seperti GPU atau TPU, ke workload mendesak seperti pelatihan model machine learning atau inferensi tanpa kehilangan progres dasarnya.

Dukungan dan batasan

Menjeda tugas (secara manual atau saat terjadi kegagalan) memiliki persyaratan dan batasan berikut:

Perilaku tugas jeda saat gagal

Jika Anda mengaktifkan fitur jeda saat terjadi kegagalan, tugas Anda akan otomatis dijeda setelah item kerja gagal empat kali. Kegagalan ini diidentifikasi dalam log Anda sebagai pesan tugas yang berisi Error message from worker dan pesan worker yang berisi Completed work item ITEM_NUMBER UNSUCCESSFULLY. Jenis kegagalan lainnya, seperti kehabisan stok dan error kuota, tidak memicu penangguhan otomatis. Sebaliknya, kegagalan ini menyebabkan tugas gagal seperti biasa. Mengaktifkan jeda saat terjadi kegagalan juga memungkinkan Anda menjeda tugas secara manual.

Transisi status tugas

Saat dijeda, tugas Dataflow akan melalui status berikut:

  1. Menjeda: Status perantara saat tugas menghentikan pemrosesan, menghapus VM pekerja, dan mengarsipkan status backend. Anda tetap ditagih untuk VM hingga layanan selesai menghapusnya.
  2. Dijeda: Tugas dihentikan sepenuhnya. Pada tahap ini, Anda hanya ditagih untuk data Shuffle yang diarsipkan.

Perilaku luar biasa

Jeda saat terjadi kegagalan mungkin berperilaku tidak terduga dalam skenario berikut:

  • Jika Anda menjeda tugas yang hampir selesai secara manual, tugas tersebut mungkin selesai, bukan dijeda.
  • Dalam kasus yang jarang terjadi, tugas mungkin gagal dijeda. Dalam kasus ini, tugas akan kembali ke status berjalan jika Anda menjedanya secara manual, atau tugas akan memasuki status gagal jika tugas dijeda karena error.

Melanjutkan pemrosesan

Saat tugas dilanjutkan, layanan akan menangani item tugas sebagai berikut:

  • Pekerjaan yang selesai: Layanan tidak memproses ulang tahap atau item pekerjaan yang telah selesai sepenuhnya saat tugas dijeda.
  • Pekerjaan yang sedang berlangsung: Semua item pekerjaan yang sedang berlangsung saat tugas dijeda akan diproses ulang dari awal.
  • Jumlah kegagalan: Semua jumlah kegagalan item kerja direset ke nol, yang berarti tugas Anda tidak akan otomatis dijeda lagi hingga item kerja gagal empat kali lagi.

Mengaktifkan jeda saat terjadi kegagalan

Untuk mengaktifkan jeda saat terjadi kegagalan pada tugas, gunakan opsi layanan Dataflow pause_on_failure saat Anda menjalankan tugas.

Java

--dataflowServiceOptions=pause_on_failure

Python

--dataflow_service_options=pause_on_failure

Go

--dataflow_service_options=pause_on_failure

Menentukan durasi jeda maksimum

Secara default, tugas Anda akan tetap dijeda hingga 7 hari (7d). Anda dapat mengonfigurasi durasi jeda maksimum ini secara manual antara 1 jam (1h) dan 7 hari (7d).

Hanya d (hari) dan h (jam) yang didukung. Satu hari didefinisikan sebagai 24 jam. Durasi ini mungkin tidak cocok dengan durasi hari kalender karena faktor-faktor seperti waktu musim panas.

Setelah durasi jeda maksimum terlewati, tugas Anda akan dibatalkan dan tidak dapat dilanjutkan lagi.

Misalnya, contoh berikut menetapkan durasi jeda maksimum ke 1 hari:

Java

--dataflowServiceOptions=pause_on_failure=pause_duration:1d

Python

--dataflow_service_options=pause_on_failure=pause_duration:1d

Go

--dataflow_service_options=pause_on_failure=pause_duration:1d

Menjeda tugas Dataflow secara manual

Untuk menjeda tugas secara manual, lakukan langkah-langkah berikut.

Konsol

  1. Buka halaman Tugas Dataflow.

    Buka Tugas

  2. Klik tugas yang ingin Anda jeda.

    Untuk menjeda tugas, status tugas harus berjalan.

  3. Di halaman detail tugas, klik Jeda.

    Jika Anda tidak melihat tombol Jeda, tugas Anda tidak dapat dijeda karena batasan jeda saat terjadi kegagalan.

gcloud

Untuk menjeda tugas Dataflow, Anda dapat menggunakan perintah gcloud dataflow jobs di Cloud Shell atau terminal lokal yang diinstal dengan gcloud CLI.

  1. Buka shell Anda.

  2. Buat daftar ID tugas untuk tugas Dataflow yang sedang berjalan, lalu catat ID tugas untuk tugas yang ingin Anda jeda:

    gcloud dataflow jobs list
    

    Jika Anda tidak menyetel flag --region, tugas Dataflow dari semua region yang tersedia akan ditampilkan.

  3. Jalankan perintah berikut:

    gcloud dataflow jobs pause JOB_ID --region=REGION
    

    Ganti JOB_ID dengan ID tugas yang Anda catat dan REGION dengan region tugas.

API

Untuk menjeda tugas menggunakan Dataflow REST API, gunakan endpoint projects.locations.jobs.update, dan teruskan isi permintaan berikut:

{
  "requestedState": "JOB_STATE_PAUSING"
}

Penting: Jangan sampai secara tidak sengaja meneruskan JOB_STATE_PAUSED sebagai requestedState.

Membatalkan tugas Dataflow yang dijeda atau sedang dijeda

Anda dapat membatalkan tugas Dataflow yang sedang dijeda atau dihentikan sementara seperti biasa. Setelah membatalkan tugas, Anda tidak akan ditagih lagi untuk tugas tersebut, tetapi tugas tidak dapat dilanjutkan lagi.

Tugas yang dijeda akan otomatis dibatalkan setelah durasi jeda maksimum berakhir.

Melanjutkan tugas Dataflow

Untuk melanjutkan tugas yang dijeda secara manual, ikuti langkah-langkah berikut:

Konsol

  1. Buka halaman Tugas Dataflow.

    Buka Tugas

  2. Klik tugas yang ingin Anda lanjutkan.

    Untuk melanjutkan tugas, status tugas harus dijeda (bukan menjeda).

  3. Di halaman detail tugas, klik Lanjutkan.

gcloud

Untuk melanjutkan tugas Dataflow, Anda dapat menggunakan perintah gcloud dataflow jobs di Cloud Shell atau terminal lokal yang diinstal dengan gcloud CLI.

  1. Buka shell Anda.

  2. Buat daftar ID tugas untuk tugas Dataflow yang dijeda, lalu catat ID tugas untuk tugas yang ingin Anda lanjutkan:

    gcloud dataflow jobs list
    

    Jika Anda tidak menyetel flag --region, tugas Dataflow dari semua region yang tersedia akan ditampilkan.

  3. Jalankan perintah berikut:

    gcloud dataflow jobs resume JOB_ID --region=REGION
    

    Ganti JOB_ID dengan ID tugas dan REGION dengan region tugas.

API

Untuk melanjutkan tugas menggunakan Dataflow REST API, gunakan endpoint projects.locations.jobs.update, dan teruskan isi permintaan berikut:

{
  "requestedState": "JOB_STATE_RUNNING"
}

Langkah berikutnya