Memecahkan masalah error Dataflow

Jika Anda mengalami masalah dengan pipeline atau tugas Dataflow, halaman ini mencantumkan pesan error yang mungkin Anda lihat dan memberikan saran tentang cara memperbaiki setiap error.

Error dalam jenis log dataflow.googleapis.com/worker-startup, dataflow.googleapis.com/harness-startup, dan dataflow.googleapis.com/kubelet menunjukkan masalah konfigurasi dengan tugas. Error ini juga dapat menunjukkan kondisi yang mencegah jalur logging normal berfungsi.

Pipeline Anda mungkin memunculkan pengecualian saat memproses data. Beberapa error ini bersifat sementara, misalnya saat terjadi kesulitan sementara dalam mengakses layanan eksternal. Beberapa error ini bersifat permanen, seperti error yang disebabkan oleh data input yang rusak atau tidak dapat diuraikan, atau pointer null selama komputasi.

Dataflow memproses elemen dalam paket arbitrer dan mencoba kembali paket lengkap saat terjadi error untuk elemen apa pun dalam paket tersebut. Saat berjalan dalam mode batch, paket yang menyertakan item yang gagal akan dicoba lagi sebanyak empat kali. Pipeline akan gagal sepenuhnya jika satu paket gagal empat kali. Saat berjalan dalam mode streaming, bundle yang menyertakan item yang gagal akan dicoba lagi tanpa batas waktu, yang dapat menyebabkan pipeline Anda terhenti secara permanen.

Pengecualian dalam kode pengguna, misalnya, instance DoFn Anda, dilaporkan di antarmuka pemantauan Dataflow. Jika menjalankan pipeline dengan BlockingDataflowPipelineRunner, Anda juga akan melihat pesan error yang dicetak di jendela konsol atau terminal.

Pertimbangkan untuk mencegah terjadinya error dalam kode Anda dengan menambahkan pengendali pengecualian. Misalnya, jika Anda ingin menghilangkan elemen yang gagal dalam beberapa validasi input kustom yang dilakukan di ParDo, gunakan blok try/catch dalam ParDo untuk menangani pengecualian serta mencatat dan menghilangkan elemen. Untuk workload produksi, terapkan pola pesan yang belum diproses. Untuk melacak jumlah error, Anda menggunakan transformasi agregasi.

File log tidak ada

Jika Anda tidak melihat log apa pun untuk tugas, hapus semua filter pengecualian yang berisi resource.type="dataflow_step" dari semua sink Log Router Cloud Logging Anda.

Buka Router Log

Untuk mengetahui detail selengkapnya tentang cara menghapus pengecualian log, lihat panduan Menghapus pengecualian.

Duplikat dalam output

Saat Anda menjalankan tugas Dataflow, outputnya berisi duplikat data.

Masalah ini dapat terjadi saat tugas Dataflow Anda menggunakan mode streaming pipeline at-least-once. Mode ini menjamin bahwa catatan diproses setidaknya sekali. Namun, duplikat data dapat terjadi dalam mode ini.

Jika alur kerja Anda tidak dapat mentoleransi duplikat data, gunakan mode streaming tepat sekali. Dalam mode ini, Dataflow memastikan bahwa rekaman tidak dihilangkan atau diduplikasi saat data bergerak melalui pipeline.

Untuk memverifikasi mode streaming yang digunakan tugas Anda, lihat Melihat mode streaming tugas.

Untuk mengetahui informasi selengkapnya tentang mode streaming, lihat Menetapkan mode streaming pipeline.

Error pipeline

Bagian berikut berisi error umum pipeline yang mungkin Anda alami dan langkah-langkah untuk menyelesaikan atau memecahkan masalah error tersebut.

Beberapa Cloud API perlu diaktifkan

Saat Anda mencoba menjalankan tugas Dataflow, error berikut terjadi:

Some Cloud APIs need to be enabled for your project in order for Cloud Dataflow to run this job.

Masalah ini terjadi karena beberapa API yang diperlukan tidak diaktifkan di project Anda.

Untuk mengatasi masalah ini dan menjalankan tugas Dataflow, aktifkan Google Cloud API berikut di project Anda:

  • Compute Engine API (Compute Engine)
  • Cloud Logging API
  • Cloud Storage
  • Cloud Storage JSON API
  • BigQuery API
  • Pub/Sub
  • Datastore API

Untuk mengetahui petunjuk mendetail, lihat bagian Memulai tentang cara mengaktifkan Google Cloud API .

"@*" dan "@N" adalah spesifikasi sharding yang dicadangkan

Saat Anda mencoba menjalankan tugas, error berikut muncul di file log, dan tugas gagal:

Workflow failed. Causes: "@*" and "@N" are reserved sharding specs. Filepattern must not contain any of them.

Error ini terjadi jika nama file untuk jalur Cloud Storage Anda untuk file sementara (tempLocation atau temp_location) memiliki tanda @ yang diikuti dengan angka atau tanda bintang (*).

Untuk mengatasi masalah ini, ubah nama file sehingga tanda @ diikuti dengan karakter yang didukung.

Permintaan tidak baik

Saat Anda menjalankan tugas Dataflow, log Cloud Monitoring akan menampilkan serangkaian peringatan yang mirip dengan berikut ini:

Unable to update setup work item STEP_ID error: generic::invalid_argument: Http(400) Bad Request
Update range task returned 'invalid argument'. Assuming lost lease for work with id LEASE_ID
with expiration time: TIMESTAMP, now: TIMESTAMP. Full status: generic::invalid_argument: Http(400) Bad Request

Peringatan permintaan buruk terjadi jika informasi status pekerja sudah tidak berlaku atau tidak disinkronkan karena keterlambatan pemrosesan. Sering kali, tugas Dataflow Anda berhasil meskipun ada peringatan permintaan buruk. Jika demikian, abaikan peringatan tersebut.

Tidak dapat membaca dan menulis di lokasi yang berbeda

Saat menjalankan tugas Dataflow, Anda mungkin melihat error berikut di file log:

message:Cannot read and write in different locations: source: SOURCE_REGION, destination: DESTINATION_REGION,reason:invalid

Error ini terjadi saat sumber dan tujuan berada di region yang berbeda. Error ini juga dapat terjadi saat lokasi penahapan dan tujuan berada di region yang berbeda. Misalnya, jika tugas membaca dari Pub/Sub, lalu menulis ke bucket temp Cloud Storage sebelum menulis ke tabel BigQuery, bucket temp Cloud Storage dan tabel BigQuery harus berada di region yang sama.

Lokasi multi-region dianggap berbeda dengan lokasi satu region, meskipun satu region berada dalam cakupan lokasi multi-region. Misalnya, us (multiple regions in the United States) dan us-central1 adalah region yang berbeda.

Untuk mengatasi masalah ini, pastikan lokasi tujuan, sumber, dan penyiapan Anda berada di region yang sama. Lokasi bucket Cloud Storage tidak dapat diubah, jadi Anda mungkin perlu membuat bucket Cloud Storage baru di region yang benar.

Waktu koneksi habis

Saat menjalankan tugas Dataflow, Anda mungkin melihat error berikut dalam file log:

org.springframework.web.client.ResourceAccessException: I/O error on GET request for CONNECTION_PATH: Connection timed out (Connection timed out); nested exception is java.net.ConnectException: Connection timed out (Connection timed out)

Masalah ini terjadi saat pekerja Dataflow gagal membuat atau mempertahankan koneksi dengan sumber atau tujuan data.

Untuk mengatasi masalah ini, ikuti langkah-langkah pemecahan masalah berikut:

  • Pastikan sumber data berjalan.
  • Pastikan tujuan sedang berjalan.
  • Tinjau parameter koneksi yang digunakan dalam konfigurasi pipeline Dataflow.
  • Verifikasi bahwa masalah performa tidak memengaruhi sumber atau tujuan.
  • Pastikan aturan firewall tidak memblokir koneksi.

Objek tersebut tidak ada

Saat menjalankan tugas Dataflow, Anda mungkin melihat error berikut di file log:

..., 'server': 'UploadServer', 'status': '404'}>, <content <No such object:...

Error ini biasanya terjadi saat beberapa tugas Dataflow yang sedang berjalan menggunakan temp_location yang sama untuk melakukan penyiapan file tugas sementara yang dibuat saat pipeline berjalan. Jika beberapa tugas serentak berbagi temp_location yang sama, tugas ini dapat saling menimpa data sementara, dan kondisi persaingan dapat terjadi. Untuk menghindari masalah ini, sebaiknya gunakan temp_location yang unik untuk setiap tugas.

Dataflow tidak dapat menentukan backlog

Saat menjalankan pipeline streaming dari Pub/Sub, peringatan berikut akan muncul:

Dataflow is unable to determine the backlog for Pub/Sub subscription

Saat pipeline Dataflow menarik data dari Pub/Sub, Dataflow perlu meminta informasi dari Pub/Sub berulang kali. Informasi ini mencakup jumlah backlog pada langganan dan usia pesan tertua yang belum dikonfirmasi. Terkadang, Dataflow tidak dapat mengambil informasi ini dari Pub/Sub karena masalah sistem internal, yang dapat menyebabkan penumpukan backlog sementara.

Untuk mengetahui informasi selengkapnya, lihat Streaming dengan Cloud Pub/Sub.

DEADLINE_EXCEEDED atau Server Tidak Responsif

Saat menjalankan tugas, Anda mungkin mengalami pengecualian waktu tunggu RPC atau salah satu error berikut:

DEADLINE_EXCEEDED

Atau:

Server Unresponsive

Error ini biasanya terjadi karena salah satu alasan berikut:

  • Jaringan Virtual Private Cloud (VPC) yang digunakan untuk tugas Anda mungkin tidak memiliki aturan firewall. Aturan firewall harus mengizinkan semua traffic TCP di antara VM dalam jaringan VPC yang Anda tentukan dalam opsi pipeline. Untuk mengetahui informasi selengkapnya, lihat Aturan firewall untuk Dataflow.

    Dalam beberapa kasus, pekerja tidak dapat berkomunikasi satu sama lain. Saat Anda menjalankan tugas Dataflow yang tidak menggunakan Dataflow Shuffle atau Streaming Engine, pekerja perlu berkomunikasi satu sama lain menggunakan port TCP 12345 dan 12346 dalam jaringan VPC. Dalam skenario ini, error mencakup nama harness pekerja dan port TCP yang diblokir. Error tersebut terlihat seperti salah satu contoh berikut:

    DEADLINE_EXCEEDED: (g)RPC timed out when SOURCE_WORKER_HARNESS
    talking to DESTINATION_WORKER_HARNESS:12346.
    
    Rpc to WORKER_HARNESS:12345 completed with error UNAVAILABLE: failed to connect to all addresses
    Server unresponsive (ping error: Deadline Exceeded, UNKNOWN: Deadline Exceeded...)
    

    Untuk mengatasi masalah ini, gunakan tanda gcloud compute firewall-rules create rules untuk mengizinkan traffic jaringan ke port 12345 dan 12346. Contoh berikut menunjukkan perintah Google Cloud CLI:

    gcloud compute firewall-rules create FIREWALL_RULE_NAME \
      --network NETWORK \
      --action allow \
      --direction IN \
      --target-tags dataflow \
      --source-tags dataflow \
      --priority 0 \
      --rules tcp:12345-12346
    

    Ganti kode berikut:

    • FIREWALL_RULE_NAME: nama aturan firewall Anda
    • NETWORK: nama jaringan Anda
  • Tugas Anda terikat pengacakan.

    Untuk mengatasi masalah ini, lakukan satu atau beberapa perubahan berikut.

    Java

    • Jika tugas tidak menggunakan shuffle berbasis layanan, beralihlah ke penggunaan Dataflow Shuffle berbasis layanan dengan menyetel --experiments=shuffle_mode=service. Untuk mengetahui detail dan ketersediaannya, lihat Dataflow Shuffle.
    • Tambahkan lebih banyak pekerja. Coba tetapkan --numWorkers dengan nilai yang lebih tinggi saat Anda menjalankan pipeline.
    • Perbesar ukuran disk terlampir untuk pekerja. Coba tetapkan --diskSizeGb dengan nilai yang lebih tinggi saat Anda menjalankan pipeline.
    • Gunakan persistent disk yang didukung SSD. Coba tetapkan --workerDiskType="compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd" saat Anda menjalankan pipeline.

    Python

    • Jika tugas tidak menggunakan shuffle berbasis layanan, beralihlah ke penggunaan Dataflow Shuffle berbasis layanan dengan menyetel --experiments=shuffle_mode=service. Untuk mengetahui detail dan ketersediaannya, lihat Dataflow Shuffle.
    • Tambahkan lebih banyak pekerja. Coba tetapkan --num_workers dengan nilai yang lebih tinggi saat Anda menjalankan pipeline.
    • Perbesar ukuran disk terlampir untuk pekerja. Coba tetapkan --disk_size_gb dengan nilai yang lebih tinggi saat Anda menjalankan pipeline.
    • Gunakan persistent disk yang didukung SSD. Coba tetapkan --worker_disk_type="compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd" saat Anda menjalankan pipeline.

    Go

    • Jika tugas tidak menggunakan shuffle berbasis layanan, beralihlah ke penggunaan Dataflow Shuffle berbasis layanan dengan menyetel --experiments=shuffle_mode=service. Untuk mengetahui detail dan ketersediaannya, lihat Dataflow Shuffle.
    • Tambahkan lebih banyak pekerja. Coba tetapkan --num_workers dengan nilai yang lebih tinggi saat Anda menjalankan pipeline.
    • Perbesar ukuran disk terlampir untuk pekerja. Coba tetapkan --disk_size_gb dengan nilai yang lebih tinggi saat Anda menjalankan pipeline.
    • Gunakan persistent disk yang didukung SSD. Coba tetapkan --disk_type="compute.googleapis.com/projects/PROJECT_ID/zones/ZONE/diskTypes/pd-ssd" saat Anda menjalankan pipeline.

Error encoding, IOException, atau perilaku yang tidak terduga dalam kode pengguna

SDK Apache Beam dan pekerja Dataflow bergantung pada komponen pihak ketiga yang umum. Komponen ini mengimpor dependensi tambahan. Konflik versi dapat menyebabkan perilaku yang tidak terduga dalam layanan. Selain itu, beberapa library tidak kompatibel dengan versi yang lebih baru. Anda mungkin perlu menyematkan ke versi yang tercantum yang berada dalam cakupan selama eksekusi. SDK and Worker Dependencies berisi daftar dependensi dan versi yang diperlukan.

Terjadi error saat menjalankan LookupEffectiveGuestPolicies

Saat menjalankan tugas Dataflow, Anda mungkin melihat error berikut di file log:

OSConfigAgent Error policies.go:49: Error running LookupEffectiveGuestPolicies:
error calling LookupEffectiveGuestPolicies: code: "Unauthenticated",
message: "Request is missing required authentication credential.
Expected OAuth 2 access token, login cookie or other valid authentication credential.

Error ini terjadi jika pengelolaan konfigurasi OS diaktifkan untuk seluruh project.

Untuk mengatasi masalah ini, nonaktifkan kebijakan VM Manager yang berlaku untuk seluruh project. Jika menonaktifkan kebijakan VM Manager untuk seluruh project tidak memungkinkan, Anda dapat mengabaikan error ini dengan aman dan memfilternya dari alat pemantauan log.

Error fatal telah terdeteksi oleh Java Runtime Environment

Error berikut terjadi selama startup worker:

A fatal error has been detected by the Java Runtime Environment

Error ini terjadi jika pipeline menggunakan Java Native Interface (JNI) untuk menjalankan kode non-Java dan kode atau binding JNI tersebut berisi error.

Error kunci atribut googclient_deliveryattempt

Tugas Dataflow Anda gagal dengan salah satu error berikut:

The request contains an attribute key that is not valid (key=googclient_deliveryattempt). Attribute keys must be non-empty and must not begin with 'goog' (case-insensitive).

Atau:

Invalid extensions name: googclient_deliveryattempt

Error ini terjadi saat tugas Dataflow Anda memiliki karakteristik berikut:

Error ini terjadi karena saat Anda menggunakan library klien Java atau C# Pub/Sub dan topik pesan yang tidak terkirim diaktifkan untuk langganan, upaya pengiriman berada di atribut pesan googclient_deliveryattempt, bukan di kolom delivery_attempt. Untuk mengetahui informasi selengkapnya, lihat Melacak upaya pengiriman di halaman "Menangani kegagalan pesan".

Untuk mengatasi masalah ini, lakukan satu atau beberapa perubahan berikut.

Tombol pintas ... terdeteksi

Terjadi error berikut:

A hot key HOT_KEY_NAME was detected in...

Error ini terjadi jika data Anda berisi tombol cepat. Kunci panas adalah kunci dengan elemen yang cukup untuk memengaruhi performa pipeline secara negatif. Kunci ini membatasi kemampuan Dataflow untuk memproses elemen secara paralel, yang meningkatkan waktu eksekusi.

Untuk mencetak kunci yang mudah dibaca manusia ke log saat tombol pintas terdeteksi di pipeline, gunakan opsi pipeline tombol pintas.

Untuk mengatasi masalah ini, pastikan data Anda didistribusikan secara merata. Jika kunci memiliki nilai yang sangat banyak secara tidak proporsional, pertimbangkan tindakan berikut:

Untuk melihat tombol pintas di antarmuka pemantauan Dataflow, lihat Memecahkan masalah tugas batch yang tertinggal.

Spesifikasi tabel tidak valid di Data Catalog

Saat Anda menggunakan Dataflow SQL untuk membuat tugas Dataflow SQL, tugas Anda mungkin gagal dengan error berikut dalam file log:

Invalid table specification in Data Catalog: Could not resolve table in Data Catalog

Error ini terjadi jika akun layanan Dataflow tidak memiliki akses ke Data Catalog API.

Untuk mengatasi masalah ini, aktifkan Data Catalog API di Google Cloud project yang Anda gunakan untuk menulis dan menjalankan kueri.

Atau, tetapkan peran roles/datacatalog.viewer ke akun layanan Dataflow.

Grafik tugas terlalu besar

Tugas Anda mungkin gagal dengan error berikut:

The job graph is too large. Please try again with a smaller job graph,
or split your job into two or more smaller jobs.

Error ini terjadi jika ukuran grafik tugas Anda melebihi 10 MB. Kondisi tertentu dalam pipeline dapat menyebabkan grafik tugas melebihi batas. Kondisi umum meliputi:

  • Transformasi Create yang mencakup data dalam memori dalam jumlah besar.
  • Instance DoFn besar yang diserialisasi untuk transmisi ke pekerja jarak jauh.
  • DoFn sebagai instance class dalam anonim yang (mungkin secara tidak sengaja) mengambil sejumlah besar data untuk diserialisasi.
  • Grafik asiklik terarah (DAG) digunakan sebagai bagian dari loop terprogram yang menghitung daftar besar.

Untuk menghindari kondisi ini, pertimbangkan untuk menyusun ulang pipeline Anda.

Commit Kunci Terlalu Besar

Saat menjalankan tugas streaming, error berikut muncul di file log pekerja:

KeyCommitTooLargeException

Error ini terjadi dalam skenario streaming jika data dalam jumlah yang sangat besar dikelompokkan tanpa menggunakan transformasi Combine, atau jika data dalam jumlah besar dihasilkan dari satu elemen input.

Untuk mengurangi kemungkinan terjadinya error ini, gunakan strategi berikut:

  • Pastikan pemrosesan satu elemen tidak dapat menghasilkan output atau modifikasi status yang melebihi batas.
  • Jika beberapa elemen dikelompokkan berdasarkan kunci, pertimbangkan untuk memperluas ruang kunci guna mengurangi elemen yang dikelompokkan per kunci.
  • Jika elemen untuk kunci dipancarkan dengan frekuensi tinggi dalam waktu singkat, hal itu dapat menghasilkan banyak GB peristiwa untuk kunci tersebut dalam jendela. Tulis ulang pipeline untuk mendeteksi kunci seperti ini dan hanya mengeluarkan output yang menunjukkan bahwa kunci sering ada di jendela tersebut.
  • Gunakan transformasi ruang Combine sublinear untuk operasi komutatif dan asosiatif. Jangan gunakan penggabung jika tidak mengurangi ruang. Misalnya, penggabung untuk string yang hanya menambahkan string bersama-sama lebih buruk daripada tidak menggunakan penggabung.

Menolak pesan yang berukuran lebih dari 7168 K

Saat Anda menjalankan tugas Dataflow yang dibuat dari template, tugas mungkin gagal dengan error berikut:

Error: CommitWork failed: status: APPLICATION_ERROR(3): Pubsub publish requests are limited to 10MB, rejecting message over 7168K (size MESSAGE_SIZE) to avoid exceeding limit with byte64 request encoding.

Error ini terjadi saat pesan yang ditulis ke antrean pesan yang tidak terkirim melebihi batas ukuran 7168 K. Sebagai solusi sementara, aktifkan Streaming Engine, yang memiliki batas ukuran lebih tinggi. Untuk mengaktifkan Streaming Engine, gunakan opsi pipeline berikut.

Java

--enableStreamingEngine=true

Python

--enable_streaming_engine=true

Request Entity Too Large

Saat Anda mengirimkan tugas, salah satu error berikut akan muncul di konsol atau jendela terminal:

413 Request Entity Too Large
The size of serialized JSON representation of the pipeline exceeds the allowable limit
Failed to create a workflow job: Invalid JSON payload received
Failed to create a workflow job: Request payload exceeds the allowable limit

Jika Anda mengalami error terkait payload JSON saat mengirimkan tugas, representasi JSON pipeline Anda melebihi ukuran permintaan maksimum 20 MB.

Ukuran tugas Anda terkait dengan representasi JSON dari pipeline. Pipeline yang lebih besar berarti permintaan yang lebih besar. Dataflow memiliki batasan yang membatasi permintaan hingga 20 MB.

Untuk memperkirakan ukuran permintaan JSON pipeline Anda, jalankan pipeline dengan opsi berikut:

Java

--dataflowJobFile=PATH_TO_OUTPUT_FILE

Python

--dataflow_job_file=PATH_TO_OUTPUT_FILE

Go

Menampilkan output tugas sebagai JSON tidak didukung di Go.

Perintah ini menulis representasi JSON tugas Anda ke file. Ukuran file yang diserialkan adalah perkiraan yang baik untuk ukuran permintaan. Ukuran sebenarnya sedikit lebih besar karena beberapa informasi tambahan yang disertakan dalam permintaan.

Kondisi tertentu dalam pipeline dapat menyebabkan representasi JSON melebihi batas. Kondisi umum meliputi:

  • Transformasi Create yang mencakup data dalam memori dalam jumlah besar.
  • Instance DoFn besar yang diserialisasi untuk transmisi ke pekerja jarak jauh.
  • DoFn sebagai instance class dalam anonim yang (mungkin secara tidak sengaja) mengambil sejumlah besar data untuk diserialisasi.

Untuk menghindari kondisi ini, pertimbangkan untuk menyusun ulang pipeline Anda.

Opsi pipeline SDK atau daftar file penyiapan melebihi batas ukuran

Saat menjalankan pipeline, salah satu error berikut terjadi:

SDK pipeline options or staging file list exceeds size limit.
Please keep their length under 256K Bytes each and 512K Bytes in total.

Atau:

Value for field 'resource.properties.metadata' is too large: maximum size

Error ini terjadi jika pipeline tidak dapat dimulai karena batas metadata Compute Engine terlampaui. Batas ini tidak dapat diubah. Dataflow menggunakan metadata Compute Engine untuk opsi pipeline. Batas ini didokumentasikan dalam batasan metadata kustom Compute Engine.

Skenario berikut dapat menyebabkan representasi JSON melampaui batas:

  • Ada terlalu banyak file JAR yang perlu disiapkan.
  • Kolom permintaan sdkPipelineOptions terlalu besar.

Untuk memperkirakan ukuran permintaan JSON pipeline Anda, jalankan pipeline dengan opsi berikut:

Java

--dataflowJobFile=PATH_TO_OUTPUT_FILE

Python

--dataflow_job_file=PATH_TO_OUTPUT_FILE

Go

Menampilkan output tugas sebagai JSON tidak didukung di Go.

Ukuran file output dari perintah ini harus kurang dari 256 KB. 512 KB dalam pesan error merujuk pada total ukuran file output dan opsi metadata kustom untuk instance VM Compute Engine.

Anda bisa mendapatkan perkiraan kasar opsi metadata kustom untuk instance VM dari tugas Dataflow yang berjalan di project. Pilih tugas Dataflow yang sedang berjalan. Ambil instance VM, lalu buka halaman detail instance VM Compute Engine untuk VM tersebut guna memeriksa bagian metadata kustom. Total panjang metadata kustom dan file harus kurang dari 512 KB. Perkiraan yang akurat untuk tugas yang gagal tidak mungkin dilakukan, karena VM tidak di-spin up untuk tugas yang gagal.

Jika daftar JAR Anda mencapai batas 256 KB, tinjau dan kurangi file JAR yang tidak diperlukan. Jika masih terlalu besar, coba jalankan Dataflow job menggunakan JAR uber. Untuk contoh yang menunjukkan cara membuat dan menggunakan JAR uber, lihat Membangun dan men-deploy JAR Uber.

Jika kolom permintaan sdkPipelineOptions terlalu besar, sertakan opsi berikut saat Anda menjalankan pipeline. Opsi pipeline sama untuk Java, Python, dan Go.

--experiments=no_display_data_on_gce_metadata

Kunci pengacakan terlalu besar

Error berikut muncul di file log pekerja:

Shuffle key too large

Error ini terjadi jika kunci berseri yang dikeluarkan ke (Co-)GroupByKey tertentu terlalu besar setelah coder yang sesuai diterapkan. Dataflow memiliki batas untuk kunci shuffle yang diserialisasi.

Untuk mengatasi masalah ini, kurangi ukuran kunci atau gunakan coder yang lebih hemat ruang.

Untuk mengetahui informasi selengkapnya, lihat batas produksi untuk Dataflow.

Jumlah total objek BoundedSource ... lebih besar daripada batas yang diizinkan

Salah satu error berikut mungkin terjadi saat menjalankan tugas dengan Java:

Total number of BoundedSource objects generated by splitIntoBundles() operation is larger than the allowable limit

Atau:

Total size of the BoundedSource objects generated by splitIntoBundles() operation is larger than the allowable limit

Java

Error ini dapat terjadi jika Anda membaca dari sejumlah besar file menggunakan TextIO, AvroIO, BigQueryIO melalui EKSPOR, atau sumber berbasis file lainnya. Batas tertentu bergantung pada detail sumber Anda, tetapi berkisar puluhan ribu file dalam satu pipeline. Misalnya, menyematkan skema di AvroIO.Read memungkinkan lebih sedikit file.

Error ini juga dapat terjadi jika Anda membuat sumber data kustom untuk pipeline dan metode splitIntoBundles sumber Anda menampilkan daftar objek BoundedSource yang berukuran lebih dari 20 MB saat diserialisasi.

Batas yang diizinkan untuk ukuran total objek BoundedSource yang dihasilkan oleh operasi splitIntoBundles() sumber kustom Anda adalah 20 MB.

Untuk mengatasi keterbatasan ini, lakukan salah satu perubahan berikut:

  1. Aktifkan Runner V2. Runner v2 mengonversi sumber menjadi DoFn yang dapat dibagi dan tidak memiliki batas pemisahan sumber ini.

  2. Ubah subclass BoundedSource kustom Anda sehingga ukuran total objek BoundedSource yang dihasilkan lebih kecil dari batas 20 MB. Misalnya, sumber Anda mungkin menghasilkan lebih sedikit pemisahan pada awalnya, dan mengandalkan Penyeimbangan Ulang Tugas Dinamis untuk memisahkan lebih lanjut input sesuai permintaan.

NameError

Saat Anda menjalankan pipeline menggunakan layanan Dataflow, error berikut terjadi:

NameError

Error ini tidak terjadi saat Anda menjalankan secara lokal, seperti saat Anda menjalankan menggunakan DirectRunner.

Error ini terjadi jika DoFn Anda menggunakan nilai di namespace global yang tidak tersedia di pekerja Dataflow.

Secara default, impor, fungsi, dan variabel global yang ditentukan di sesi utama tidak disimpan selama serialisasi tugas Dataflow.

Untuk mengatasi masalah ini, gunakan salah satu metode berikut. Jika DoFn Anda ditentukan dalam file utama dan mereferensikan impor dan fungsi dalam namespace global, tetapkan opsi pipeline --save_main_session ke True. Perubahan ini mengambil status namespace global dan memuatnya di pekerja Dataflow.

Jika Anda memiliki objek di namespace global yang tidak dapat di-pickle, akan terjadi error pickling. Jika error terkait modul yang seharusnya tersedia di distribusi Python, impor modul secara lokal, tempat modul tersebut digunakan.

Misalnya, bukan:

import re
…
def myfunc():
  # use re module

penggunaan:

def myfunc():
  import re
  # use re module

Atau, jika DoFn Anda mencakup beberapa file, gunakan pendekatan lain untuk mengemas alur kerja dan mengelola dependensi.

Objek tunduk pada kebijakan retensi bucket

Jika Anda memiliki tugas Dataflow yang menulis ke bucket Cloud Storage, tugas akan gagal dengan error berikut:

Object 'OBJECT_NAME' is subject to bucket's retention policy or object retention and cannot be deleted or overwritten

Anda mungkin juga melihat error berikut:

Unable to rename "gs://BUCKET"

Error pertama terjadi saat retensi objek diaktifkan di bucket Cloud Storage yang digunakan untuk menulis tugas Dataflow. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan dan menggunakan konfigurasi retensi objek.

Untuk mengatasi masalah ini, gunakan salah satu solusi sementara berikut:

  • Menulis ke bucket Cloud Storage yang tidak memiliki kebijakan retensi di folder temp.

  • Hapus kebijakan retensi dari bucket yang ditulisi oleh tugas. Untuk mengetahui informasi selengkapnya, lihat Menetapkan konfigurasi retensi objek.

Error kedua dapat menunjukkan bahwa retensi objek diaktifkan di bucket Cloud Storage, atau dapat menunjukkan bahwa akun layanan pekerja Dataflow tidak memiliki izin untuk menulis ke bucket Cloud Storage.

Jika Anda melihat error kedua dan retensi objek diaktifkan di bucket Cloud Storage, coba solusi yang dijelaskan sebelumnya. Jika retensi objek tidak diaktifkan di bucket Cloud Storage, verifikasi apakah akun layanan pekerja Dataflow memiliki izin tulis di bucket Cloud Storage. Untuk mengetahui informasi selengkapnya, lihat Mengakses bucket Cloud Storage.

Pemrosesan macet atau operasi sedang berlangsung

Jika Dataflow menghabiskan lebih banyak waktu untuk mengeksekusi DoFn daripada waktu yang ditentukan dalam TIME_INTERVAL tanpa menampilkan hasil, pesan berikut akan ditampilkan.

Java

Salah satu dari dua pesan log berikut, bergantung pada versinya:

Processing stuck in step STEP_NAME for at least TIME_INTERVAL

Operation ongoing in bundle BUNDLE_ID for at least TIME_INTERVAL without outputting or completing: at STACK_TRACE

Python

Operation ongoing for over TIME_INTERVAL in state STATE in step STEP_ID without returning. Current Traceback: TRACEBACK

Go

Operation ongoing in transform TRANSFORM_ID for at least TIME_INTERVAL without outputting or completing in state STATE

Perilaku ini memiliki dua kemungkinan penyebab:

  • Kode DoFn Anda lambat, atau menunggu beberapa operasi eksternal yang lambat selesai.
  • Kode DoFn Anda mungkin macet, mengalami kebuntuan, atau sangat lambat dalam menyelesaikan pemrosesan.

Untuk menentukan mana yang terjadi, perluas entri log Cloud Monitoring untuk melihat stack trace. Cari pesan yang menunjukkan bahwa kode DoFn macet atau mengalami masalah lainnya. Jika tidak ada pesan, masalahnya mungkin kecepatan eksekusi kode DoFn. Pertimbangkan untuk menggunakan Cloud Profiler atau alat lain untuk menyelidiki performa kode Anda.

Jika pipeline Anda dibangun di Java VM (menggunakan Java atau Scala), Anda dapat menyelidiki penyebab kode Anda macet. Buat thread dump lengkap dari seluruh JVM (bukan hanya thread yang macet) dengan mengikuti langkah-langkah berikut:

  1. Catat nama pekerja dari entri log.
  2. Di bagian Compute Engine pada konsol Google Cloud , temukan instance Compute Engine dengan nama pekerja yang Anda catat.
  3. Gunakan SSH untuk terhubung ke instance dengan nama tersebut.
  4. Jalankan perintah berikut:

    curl http://localhost:8081/threadz
    

Operasi sedang berlangsung dalam paket

Saat Anda menjalankan pipeline yang membaca dari JdbcIO, pembacaan berpartisi dari JdbcIO berjalan lambat, dan pesan berikut muncul di file log pekerja:

Operation ongoing in bundle process_bundle-[0-9-]* for PTransform{id=Read from JDBC with Partitions\/JdbcIO.Read\/JdbcIO.ReadAll\/ParDo\(Read\)\/ParMultiDo\(Read\).*, state=process} for at least (0[1-9]h[0-5][0-9]m[0-5][0-9]s) without outputting or completing:

Untuk mengatasi masalah ini, lakukan satu atau beberapa perubahan berikut pada pipeline Anda:

  • Gunakan partisi untuk meningkatkan paralelisme tugas. Baca dengan partisi yang lebih banyak dan lebih kecil untuk penskalaan yang lebih baik.

  • Periksa apakah kolom partisi adalah kolom indeks atau kolom partisi sebenarnya di sumber. Aktifkan pengindeksan dan partisi pada kolom ini di database sumber untuk mendapatkan performa terbaik.

  • Gunakan parameter lowerBound dan upperBound untuk melewati penemuan batas.

Error kuota Pub/Sub

Saat menjalankan pipeline streaming dari Pub/Sub, terjadi error berikut:

429 (rateLimitExceeded)

Atau:

Request was throttled due to user QPS limit being reached

Error ini terjadi jika project Anda tidak memiliki kuota Pub/Sub yang cukup.

Untuk mengetahui apakah project Anda memiliki kuota yang tidak mencukupi, ikuti langkah-langkah berikut untuk memeriksa error klien:

  1. Buka Google Cloud console.
  2. Di menu sebelah kiri, pilih APIs & services.
  3. Di Kotak Penelusuran, telusuri Cloud Pub/Sub.
  4. Klik tab Penggunaan.
  5. Periksa Kode Respons dan cari kode error klien (4xx).

Permintaan dilarang oleh kebijakan organisasi

Saat menjalankan pipeline, terjadi error berikut:

Error trying to get gs://BUCKET_NAME/FOLDER/FILE:
{"code":403,"errors":[{"domain":"global","message":"Request is prohibited by organization's policy","reason":"forbidden"}],
"message":"Request is prohibited by organization's policy"}

Error ini terjadi jika bucket Cloud Storage berada di luar perimeter layanan Anda.

Untuk mengatasi masalah ini, buat aturan keluar yang mengizinkan akses ke bucket di luar perimeter layanan.

Paket bertahap...tidak dapat diakses

Tugas yang sebelumnya berhasil mungkin gagal dengan error berikut:

Staged package...is inaccessible

Untuk menyelesaikan masalah ini:

  • Pastikan bucket Cloud Storage yang digunakan untuk penyiapan tidak memiliki setelan TTL yang menyebabkan paket yang disiapkan dihapus.
  • Pastikan akun layanan pekerja project Dataflow Anda memiliki izin untuk mengakses bucket Cloud Storage yang digunakan untuk staging. Kesenjangan dalam izin dapat disebabkan oleh salah satu alasan berikut:

    • Bucket Cloud Storage yang digunakan untuk staging ada di project yang berbeda.
    • Bucket Cloud Storage yang digunakan untuk penyiapan telah dimigrasikan dari akses terperinci ke akses level bucket yang seragam. Karena ketidakkonsistenan antara kebijakan IAM dan ACL, memigrasikan bucket penyiapan ke akses level bucket yang seragam akan melarang ACL untuk resource Cloud Storage. ACL mencakup izin yang dimiliki oleh akun layanan pekerja project Dataflow Anda atas bucket staging.

Untuk mengetahui informasi selengkapnya, lihat Mengakses bucket Cloud Storage di seluruh Google Cloud project.

Item tugas telah gagal 4 kali

Error berikut terjadi saat tugas batch gagal:

The job failed because a work item has failed 4 times.

Error ini terjadi jika satu operasi dalam tugas batch menyebabkan kode pekerja gagal empat kali. Dataflow gagal menjalankan tugas, dan pesan ini ditampilkan.

Saat berjalan dalam mode streaming, paket yang menyertakan item yang gagal akan dicoba ulang tanpa batas, yang dapat menyebabkan pipeline Anda terhenti secara permanen.

Anda tidak dapat mengonfigurasi nilai minimum kegagalan ini. Untuk mengetahui detail selengkapnya, lihat penanganan error dan pengecualian pipeline.

Untuk mengatasi masalah ini, lihat log Cloud Monitoring tugas untuk mengetahui empat kegagalan individual. Dalam log pekerja, cari entri log Tingkat error atau Tingkat fatal yang menunjukkan pengecualian atau error. Pengecualian atau error harus muncul setidaknya empat kali. Jika log hanya berisi error waktu tunggu generik terkait akses ke resource eksternal, seperti MongoDB, verifikasi bahwa akun layanan pekerja memiliki izin untuk mengakses subnetwork resource.

Waktu Tunggu di File Hasil Polling

Hal berikut terjadi saat tugas gagal:

Timeout in polling result file: PATH. Possible causes are:
1. Your launch takes too long time to finish. Please check the logs on stackdriver.
2. Service account SERVICE_ACCOUNT may not have enough permissions to pull
container image IMAGE_PATH or create new objects in PATH.
3. Transient errors occurred, please try again.

Masalah ini sering kali terkait dengan cara penginstalan dependensi Python dengan menggunakan file requirements.txt. Stager Apache Beam mendownload sumber semua dependensi dari PyPi, termasuk sumber dependensi transitif. Kemudian, kompilasi wheel terjadi secara implisit selama perintah download pip untuk beberapa paket Python yang merupakan dependensi apache-beam. Masalah waktu tunggu mungkin terjadi karena file requirements.txt.

Untuk mengetahui informasi selengkapnya, lihat pelacakan bug masalah ini oleh tim Apache Arrow. Solusi sementara yang disarankan adalah menginstal apache-beam langsung di Dockerfile. Dengan cara ini, waktu tunggu untuk file requirements.txt tidak diterapkan.

Write Correct File/Write/WriteImpl/PreFinalize gagal

Saat menjalankan tugas, tugas gagal secara berkala, dan terjadi error berikut:

Workflow failed. Causes: S27:Write Correct File/Write/WriteImpl/PreFinalize failed., Internal Issue (ID): ID:ID, Unable to expand file pattern gs://BUCKET_NAME/temp/FILE

Error ini terjadi saat subfolder yang sama digunakan sebagai lokasi penyimpanan sementara untuk beberapa tugas yang berjalan secara bersamaan.

Untuk mengatasi masalah ini, jangan gunakan subfolder yang sama sebagai lokasi penyimpanan sementara untuk beberapa pipeline. Untuk setiap pipeline, berikan subfolder unik untuk digunakan sebagai lokasi penyimpanan sementara.

Elemen melebihi ukuran pesan protobuf maksimum

Saat menjalankan tugas Dataflow dan pipeline Anda memiliki elemen besar, Anda mungkin melihat error yang mirip dengan contoh berikut:

Exception serializing message!
ValueError: Message org.apache.beam.model.fn_execution.v1.Elements exceeds maximum protobuf size of 2GB

Atau:

Buffer size ... exceeds GRPC limit 2147483548. This is likely due to a single element that is too large.

Anda mungkin juga melihat peringatan yang mirip dengan contoh berikut:

Data output stream buffer size ... exceeds 536870912 bytes. This is likely due to a large element in a PCollection.

Error ini terjadi saat pipeline Anda berisi elemen besar.

Untuk mengatasi masalah ini, jika Anda menggunakan Python SDK, upgrade ke Apache Beam versi 2.57.0 atau yang lebih baru. Python SDK versi 2.57.0 dan yang lebih baru meningkatkan pemrosesan elemen besar dan menambahkan logging yang relevan.

Jika error tetap terjadi setelah mengupgrade atau jika Anda tidak menggunakan Python SDK, identifikasi langkah dalam tugas tempat error terjadi, dan coba kurangi ukuran elemen dalam langkah tersebut.

Jika objek PCollection dalam pipeline Anda memiliki elemen besar, persyaratan RAM untuk pipeline akan meningkat. Elemen besar juga dapat menyebabkan error runtime, terutama saat melintasi batas tahap gabungan.

Elemen besar dapat terjadi saat pipeline secara tidak sengaja mewujudkan iterable besar. Misalnya, pipeline yang meneruskan output operasi GroupByKey ke operasi Reshuffle yang tidak perlu mewujudkan daftar sebagai elemen tunggal. Daftar ini berpotensi berisi sejumlah besar nilai untuk setiap kunci.

Jika error terjadi pada langkah yang menggunakan input samping, perlu diketahui bahwa penggunaan input samping dapat menimbulkan hambatan penggabungan. Periksa apakah transformasi yang menghasilkan elemen besar dan transformasi yang menggunakannya termasuk dalam tahap yang sama.

Saat membuat pipeline, ikuti praktik terbaik berikut:

  • Di PCollections, gunakan beberapa elemen kecil, bukan satu elemen besar.
  • Simpan blob besar dalam sistem penyimpanan eksternal. Gunakan PCollections untuk meneruskan metadatanya, atau gunakan coder kustom yang mengurangi ukuran elemen.
  • Jika Anda harus meneruskan PCollection yang dapat melebihi 2 GB sebagai input samping, gunakan tampilan yang dapat diiterasi, seperti AsIterable dan AsMultiMap.

Ukuran maksimum untuk satu elemen dalam tugas Dataflow dibatasi hingga 2 GB. Untuk mengetahui informasi selengkapnya, silakan melihat Kuota dan batas.

Dataflow tidak dapat memproses transformasi terkelola...

Pipeline yang menggunakan Managed I/O mungkin gagal dengan error ini jika Dataflow tidak dapat mengupgrade secara otomatis transformasi I/O ke versi terbaru yang didukung. URN dan nama langkah yang diberikan dalam error harus menentukan transformasi persis yang gagal diupgrade oleh Dataflow.

Anda dapat menemukan detail tambahan terkait error ini di Logs Explorer di bagian Nama log Dataflow managed-transforms-worker dan managed-transforms-worker-startup.

Jika Logs Explorer tidak memberikan informasi yang memadai untuk memecahkan masalah error, hubungi Cloud Customer Care.

Error tugas pengarsipan

Bagian berikut berisi error umum yang mungkin Anda alami saat mencoba mengarsipkan tugas Dataflow menggunakan API.

Tidak ada nilai yang diberikan

Saat Anda mencoba mengarsipkan tugas Dataflow menggunakan API, error berikut mungkin terjadi:

The field mask specifies an update for the field job_metadata.user_display_properties.archived in job JOB_ID, but no value is provided. To update a field, please provide a field for the respective value.

Error ini terjadi karena salah satu alasan berikut:

  • Jalur yang ditentukan untuk kolom updateMask tidak mengikuti format yang benar. Masalah ini dapat terjadi karena kesalahan ketik.

  • JobMetadata tidak ditentukan dengan benar. Di kolom JobMetadata, untuk userDisplayProperties, gunakan key-value pair "archived":"true".

Untuk mengatasi error ini, pastikan perintah yang Anda teruskan ke API cocok dengan format yang diperlukan. Untuk mengetahui detail selengkapnya, lihat Mengarsipkan tugas.

API tidak mengenali nilai

Saat Anda mencoba mengarsipkan tugas Dataflow menggunakan API, error berikut mungkin terjadi:

The API does not recognize the value VALUE for the field job_metadata.user_display_properties.archived for job JOB_ID. REASON: Archived display property can only be set to 'true' or 'false'

Error ini terjadi saat nilai yang diberikan dalam key-value pair tugas pengarsipan bukan nilai yang didukung. Nilai yang didukung untuk pasangan nilai kunci tugas pengarsipan adalah "archived":"true" dan "archived":"false".

Untuk mengatasi error ini, pastikan perintah yang Anda teruskan ke API cocok dengan format yang diperlukan. Untuk mengetahui detail selengkapnya, lihat Mengarsipkan tugas.

Tidak dapat memperbarui status dan mask secara bersamaan

Saat Anda mencoba mengarsipkan tugas Dataflow menggunakan API, error berikut mungkin terjadi:

Cannot update both state and mask.

Error ini terjadi saat Anda mencoba memperbarui status tugas dan status pengarsipan dalam panggilan API yang sama. Anda tidak dapat melakukan pembaruan pada status tugas dan parameter kueri updateMask dalam panggilan API yang sama.

Untuk mengatasi error ini, perbarui status tugas dalam panggilan API terpisah. Lakukan pembaruan pada status tugas sebelum memperbarui status arsip tugas.

Modifikasi alur kerja gagal

Saat Anda mencoba mengarsipkan tugas Dataflow menggunakan API, error berikut mungkin terjadi:

Workflow modification failed.

Error ini biasanya terjadi saat Anda mencoba mengarsipkan tugas yang sedang berjalan.

Untuk mengatasi error ini, tunggu hingga tugas selesai sebelum mengarsipkannya. Tugas yang telah selesai memiliki salah satu status tugas berikut:

  • JOB_STATE_CANCELLED
  • JOB_STATE_DRAINED
  • JOB_STATE_DONE
  • JOB_STATE_FAILED
  • JOB_STATE_UPDATED

Untuk mengetahui informasi selengkapnya, lihat Mendeteksi penyelesaian tugas Dataflow.

Error image container

Bagian berikut berisi error umum yang mungkin Anda alami saat menggunakan penampung kustom dan langkah-langkah untuk menyelesaikan atau memecahkan masalah error tersebut. Error biasanya diawali dengan pesan berikut:

Unable to pull container image due to error: DETAILED_ERROR_MESSAGE

Izin "containeranalysis.occurrences.list" ditolak

Error berikut muncul di file log Anda:

Error getting old patchz discovery occurrences: generic::permission_denied: permission "containeranalysis.occurrences.list" denied for project "PROJECT_ID", entity ID "" [region="REGION" projectNum=PROJECT_NUMBER projectID="PROJECT_ID"]

Container Analysis API diperlukan untuk pemindaian kerentanan.

Untuk mengetahui informasi selengkapnya, lihat Ringkasan pemindaian OS dan Mengonfigurasi kontrol akses dalam dokumentasi Artifact Analysis.

Error saat menyinkronkan pod ... gagal "StartContainer"

Error berikut terjadi selama startup worker:

Error syncing pod POD_ID, skipping: [failed to "StartContainer" for CONTAINER_NAME with CrashLoopBackOff: "back-off 5m0s restarting failed container=CONTAINER_NAME pod=POD_NAME].

Pod adalah grup container Docker yang ditempatkan bersama dan berjalan di pekerja Dataflow. Error ini terjadi saat salah satu penampung Docker di pod gagal dimulai. Jika kegagalan tidak dapat dipulihkan, worker Dataflow tidak dapat dimulai, dan tugas batch Dataflow akhirnya gagal dengan error seperti berikut:

The Dataflow job appears to be stuck because no worker activity has been seen in the last 1h.

Error ini biasanya terjadi saat salah satu penampung terus mengalami error selama proses startup.

Untuk memahami akar penyebabnya, cari log yang diambil tepat sebelum kegagalan terjadi. Untuk menganalisis log, gunakan Logs Explorer. Di Logs Explorer, batasi file log ke entri log yang dikeluarkan dari pekerja dengan error startup container. Untuk membatasi entri log, selesaikan langkah-langkah berikut:

  1. Di Logs Explorer, temukan entri log Error syncing pod.
  2. Untuk melihat label yang terkait dengan entri log, luaskan entri log.
  3. Klik label yang terkait dengan resource_name, lalu klik Show matching entries.

Halaman Logs Explorer dengan langkah-langkah untuk membatasi file log yang ditandai.

Di Logs Explorer, log Dataflow disusun ke dalam beberapa aliran log. Pesan Error syncing pod dikeluarkan dalam log bernama kubelet. Namun, log dari container yang gagal dapat berada di aliran log yang berbeda. Setiap penampung memiliki nama. Gunakan tabel berikut untuk menentukan aliran log mana yang mungkin berisi log yang relevan dengan container yang gagal.

Nama container Nama log
sdk, sdk0, sdk1, sdk-0-0, dan yang serupa docker
tali pengaman harness, harness-startup
python, java-batch, java-streaming worker-startup, worker
artefak artefak

Saat Anda membuat kueri Logs Explorer, pastikan kueri menyertakan nama log yang relevan di antarmuka pembuat kueri atau tidak memiliki batasan pada nama log.

Kueri Logs Explorer yang menyertakan nama log yang relevan.

Setelah Anda memilih log yang relevan, hasil kueri mungkin akan terlihat seperti contoh berikut:

resource.type="dataflow_step"
resource.labels.job_id="2022-06-29_08_02_54-JOB_ID"
labels."compute.googleapis.com/resource_name"="testpipeline-jenkins-0629-DATE-cyhg-harness-8crw"
logName=("projects/apache-beam-testing/logs/dataflow.googleapis.com%2Fdocker"
OR
"projects/apache-beam-testing/logs/dataflow.googleapis.com%2Fworker-startup"
OR
"projects/apache-beam-testing/logs/dataflow.googleapis.com%2Fworker")

Karena log yang melaporkan gejala kegagalan penampung terkadang dilaporkan sebagai INFO, sertakan log INFO dalam analisis Anda.

Penyebab umum kegagalan penampung meliputi hal-hal berikut:

  1. Pipeline Python Anda memiliki dependensi tambahan yang diinstal saat runtime, dan penginstalan tidak berhasil. Anda mungkin melihat error seperti pip install failed with error. Masalah ini dapat terjadi karena persyaratan yang bertentangan atau karena konfigurasi jaringan yang dibatasi yang mencegah worker Dataflow menarik dependensi eksternal dari repositori publik melalui internet.
  2. Pekerja gagal di tengah eksekusi pipeline karena error kehabisan memori (OOM). Anda mungkin melihat error seperti salah satu dari berikut ini:

    • java.lang.OutOfMemoryError: Java heap space
    • Shutting down JVM after 8 consecutive periods of measured GC thrashing. Memory is used/total/max = 24453/42043/42043 MB, GC last/max = 58.97/99.89 %, #pushbacks=82, gc thrashing=true. Heap dump not written.

    Untuk men-debug masalah kurang memori, lihat Memecahkan masalah error kurang memori Dataflow.

  3. Dataflow tidak dapat menarik image container. Untuk mengetahui informasi selengkapnya, lihat Permintaan penarikan image gagal dengan error.

  4. Container yang digunakan tidak kompatibel dengan arsitektur CPU VM pekerja. Di log startup harness, Anda mungkin melihat error seperti berikut: exec /opt/apache/beam/boot: exec format error. Untuk memeriksa arsitektur image penampung, jalankan docker image inspect $IMAGE:$TAG dan cari kata kunci Architecture. Jika muncul pesan Error: No such image: $IMAGE:$TAG, Anda mungkin perlu menarik image terlebih dahulu dengan menjalankan docker pull $IMAGE:$TAG. Untuk mengetahui informasi tentang cara membuat image multi-arsitektur, lihat Membuat image container multi-arsitektur.

Setelah Anda mengidentifikasi error yang menyebabkan kegagalan penampung, coba atasi error tersebut, lalu kirim ulang pipeline.

Permintaan pull gambar gagal dengan error

Selama startup pekerja, salah satu error berikut muncul di log pekerja atau tugas:

Image pull request failed with error
pull access denied for IMAGE_NAME
manifest for IMAGE_NAME not found: manifest unknown: Failed to fetch
Get IMAGE_NAME: Service Unavailable

Error ini terjadi jika pekerja tidak dapat memulai karena pekerja tidak dapat menarik image container Docker. Masalah ini terjadi dalam skenario berikut:

  • URL image container SDK kustom salah
  • Pekerja tidak memiliki kredensial atau akses jaringan ke gambar jarak jauh

Untuk menyelesaikan masalah ini:

  • Jika Anda menggunakan image container kustom dengan tugas, pastikan URL image Anda sudah benar dan memiliki tag atau ringkasan yang valid. Worker Dataflow juga memerlukan akses ke gambar.
  • Verifikasi bahwa image publik dapat ditarik secara lokal dengan menjalankan docker pull $image dari mesin yang tidak diautentikasi.

Untuk gambar pribadi atau pekerja pribadi:

  • Jika Anda menggunakan Container Registry untuk menghosting image container, sebaiknya gunakan Artifact Registry. Mulai 15 Mei 2023, Container Registry tidak digunakan lagi. Jika Anda menggunakan Container Registry, Anda dapat beralih ke Artifact Registry. Jika gambar Anda berada dalam project yang berbeda dengan project yang digunakan untuk menjalankan tugas Google Cloud ,konfigurasi kontrol akses untuk akun layanan Google Cloud default.
  • Jika menggunakan Virtual Private Cloud (VPC) bersama, pastikan pekerja dapat mengakses host repositori penampung kustom.
  • Gunakan ssh untuk terhubung dengan VM pekerja tugas yang sedang berjalan dan jalankan docker pull $image untuk mengonfirmasi secara langsung bahwa pekerja dikonfigurasi dengan benar.

Jika pekerja gagal beberapa kali berturut-turut karena error ini dan pekerjaan telah dimulai pada tugas, tugas dapat gagal dengan error yang mirip dengan pesan berikut:

Job appears to be stuck.

Jika Anda menghapus akses ke gambar saat tugas sedang berjalan, baik dengan menghapus gambar itu sendiri atau mencabut Kredensial Akun Layanan pekerja Dataflow atau akses internet untuk mengakses gambar, Dataflow hanya mencatat error. Dataflow tidak akan membuat tugas gagal. Dataflow juga menghindari kegagalan pipeline streaming yang berjalan lama untuk menghindari hilangnya status pipeline.

Error lain yang mungkin terjadi dapat berasal dari masalah atau gangguan kuota repositori. Jika Anda mengalami masalah karena melampaui kuota Docker Hub untuk menarik image publik atau gangguan umum pada repositori pihak ketiga, pertimbangkan untuk menggunakan Artifact Registry sebagai repositori image.

SystemError: opcode tidak diketahui

Pipeline container kustom Python Anda mungkin gagal dengan error berikut segera setelah pengiriman tugas:

SystemError: unknown opcode

Selain itu, stack trace mungkin mencakup

apache_beam/internal/pickler.py

Untuk mengatasi masalah ini, pastikan versi Python yang Anda gunakan secara lokal cocok dengan versi dalam image container hingga versi utama dan minor. Perbedaan versi patch, seperti 3.6.7 versus 3.6.8, tidak menimbulkan masalah kompatibilitas. Perbedaan versi minor, seperti 3.6.8 versus 3.8.2, dapat menyebabkan kegagalan pipeline.

Error saat mengupgrade pipeline streaming

Untuk mengetahui informasi tentang cara mengatasi error saat Anda mengupgrade pipeline streaming menggunakan fitur seperti menjalankan tugas penggantian paralel, lihat Memecahkan masalah upgrade pipeline streaming.

Error pekerja

Bagian berikut berisi error umum pekerja yang mungkin Anda temui dan langkah-langkah untuk menyelesaikan atau memecahkan masalah error tersebut.

Panggilan dari harness pekerja Java ke Python DoFn gagal dengan error

Jika panggilan dari harness pekerja Java ke DoFn Python gagal, pesan error yang relevan akan ditampilkan.

Untuk menyelidiki error, perluas entri log error Cloud Monitoring, lalu lihat pesan error dan traceback. Error ini menunjukkan kode mana yang gagal sehingga Anda dapat memperbaikinya jika perlu. Jika Anda yakin bahwa error tersebut adalah bug di Apache Beam atau Dataflow, laporkan bug tersebut.

EOFError: marshal data terlalu pendek

Error berikut muncul di log pekerja:

EOFError: marshal data too short

Error ini terkadang terjadi saat pekerja pipeline Python kehabisan ruang disk.

Untuk mengatasi masalah ini, lihat Tidak ada ruang penyimpanan yang tersisa di perangkat.

Gagal melampirkan disk

Saat Anda mencoba meluncurkan tugas Dataflow yang menggunakan VM C3 dengan Persistent Disk, tugas gagal dengan satu atau kedua error berikut:

Failed to attach disk(s), status: generic::invalid_argument: One or more operations had an error
Can not allocate sha384 (reason: -2), Spectre V2 : WARNING: Unprivileged eBPF is enabled with eIBRS on...

Error ini terjadi saat Anda menggunakan VM C3 dengan jenis Persistent Disk yang tidak didukung. Untuk mengetahui informasi selengkapnya, lihat Jenis disk yang didukung untuk C3.

Untuk menggunakan VM C3 dengan tugas Dataflow, pilih jenis disk pekerja pd-ssd. Untuk mengetahui informasi selengkapnya, lihat Opsi tingkat pekerja.

Java

--workerDiskType=pd-ssd

Python

--worker_disk_type=pd-ssd

Go

disk_type=pd-ssd

Tidak ada ruang tersisa di perangkat

Jika ruang disk tugas habis, error berikut mungkin muncul di log pekerja:

No space left on device

Error ini dapat terjadi karena salah satu alasan berikut:

  • Penyimpanan persisten pekerja kehabisan ruang kosong, yang dapat terjadi karena salah satu alasan berikut:
    • Job mendownload dependensi besar saat runtime
    • Tugas menggunakan container kustom besar
    • Tugas menulis banyak data sementara ke disk lokal
  • Saat menggunakan Pengacakan Dataflow, Dataflow menetapkan ukuran disk default yang lebih rendah. Akibatnya, error ini dapat terjadi pada tugas yang berpindah dari pengacakan berbasis worker.
  • Disk booting pekerja penuh karena mencatat lebih dari 50 entri per detik.

Untuk mengatasi masalah ini, ikuti langkah-langkah pemecahan masalah berikut:

Untuk melihat resource disk yang terkait dengan satu pekerja, cari detail instance VM untuk VM pekerja yang terkait dengan tugas Anda. Sebagian ruang disk digunakan oleh sistem operasi, biner, log, dan container.

Untuk menambah ruang persistent disk atau boot disk, sesuaikan opsi pipeline ukuran disk.

Lacak penggunaan ruang disk pada instance VM pekerja menggunakan Cloud Monitoring. Lihat Menerima metrik VM pekerja dari agen Monitoring untuk mengetahui petunjuk yang menjelaskan cara menyiapkannya.

Cari masalah ruang disk boot dengan Melihat output port serial pada instance VM pekerja dan mencari pesan seperti:

Failed to open system journal: No space left on device

Jika memiliki banyak instance VM pekerja, Anda dapat membuat skrip untuk menjalankan gcloud compute instances get-serial-port-output di semua instance tersebut sekaligus. Sebagai gantinya, Anda dapat meninjau output tersebut.

Pipeline Python gagal setelah satu jam tidak ada aktivitas pekerja

Saat menggunakan Apache Beam SDK untuk Python dengan Dataflow Runner V2 di mesin pekerja dengan banyak core CPU, gunakan Apache Beam SDK 2.35.0 atau yang lebih baru. Jika tugas Anda menggunakan container kustom, gunakan Apache Beam SDK 2.46.0 atau yang lebih baru.

Pertimbangkan untuk membangun container Python Anda terlebih dahulu. Langkah ini dapat meningkatkan waktu startup VM dan performa penskalaan otomatis horizontal. Untuk menggunakan fitur ini, aktifkan Cloud Build API di project Anda dan kirimkan pipeline dengan parameter berikut:

‑‑prebuild_sdk_container_engine=cloud_build.

Untuk mengetahui informasi selengkapnya, lihat Dataflow Runner V2.

Anda juga dapat menggunakan image container kustom dengan semua dependensi yang telah diinstal sebelumnya.

RESOURCE_POOL_EXHAUSTED

Saat Anda membuat resource Google Cloud , terjadi error berikut:

Startup of the worker pool in zone ZONE_NAME failed to bring up any of the desired NUMBER workers.
ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS: Instance 'INSTANCE_NAME' creation failed: The zone 'projects/PROJECT_ID/zones/ZONE_NAME' does not have enough resources available to fulfill the request. '(resource type:RESOURCE_TYPE)'.

Error ini terjadi karena kondisi kehabisan stok sementara untuk resource tertentu di zona tertentu.

Untuk mengatasi masalah ini, Anda dapat menunggu, atau membuat resource yang sama di zona lain.

Sebagai solusi sementara, terapkan loop percobaan ulang untuk tugas Anda, sehingga saat terjadi error kehabisan stok, tugas akan otomatis mencoba lagi hingga resource tersedia. Untuk membuat loop percobaan ulang, terapkan alur kerja berikut:

  1. Buat tugas Dataflow, dan dapatkan ID tugas.
  2. Lakukan polling status tugas hingga status tugas menjadi RUNNING atau FAILED.
    • Jika status tugas adalah RUNNING, keluar dari loop percobaan ulang.
    • Jika status tugas adalah FAILED, gunakan Cloud Logging API untuk membuat kueri log tugas untuk string ZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS. Untuk mengetahui informasi selengkapnya, lihat Bekerja dengan log pipeline.
      • Jika log tidak berisi string, keluar dari loop percobaan ulang.
      • Jika log berisi string, buat tugas Dataflow, dapatkan ID tugas, dan mulai ulang loop percobaan ulang.

Sebagai praktik terbaik, distribusikan resource Anda di beberapa zona dan region untuk menoleransi pemadaman layanan.

Instance dengan akselerator tamu tidak mendukung migrasi langsung

Pipeline Dataflow gagal saat pengiriman tugas dengan error berikut:

UNSUPPORTED_OPERATION: Instance <worker_instance_name> creation failed:
Instances with guest accelerators do not support live migration

Error ini dapat terjadi jika Anda telah meminta jenis mesin pekerja yang memiliki akselerator hardware, tetapi Anda belum mengonfigurasi Dataflow untuk menggunakan akselerator.

Gunakan --worker_acceleratoropsi layanan Dataflow atau accelerator petunjuk resource untuk meminta akselerator hardware.

Jika menggunakan template Flex, Anda dapat menggunakan opsi --additionalExperiments untuk menyediakan opsi layanan Dataflow. Jika dilakukan dengan benar, opsi worker_accelerator dapat ditemukan di panel info Tugas tugas di konsol Google Cloud .

Kuota project ... atau kebijakan kontrol akses yang mencegah operasi

Terjadi error berikut:

Startup of the worker pool in zone ZONE_NAME failed to bring up any of the desired NUMBER workers. The project quota may have been exceeded or access control policies may be preventing the operation; review the Cloud Logging 'VM Instance' log for diagnostics.

Error ini terjadi karena salah satu alasan berikut:

  • Anda telah melampaui salah satu kuota Compute Engine yang digunakan untuk pembuatan pekerja Dataflow.
  • Organisasi Anda memiliki batasan yang melarang beberapa aspek proses pembuatan instance VM, seperti akun yang digunakan, atau zona yang ditargetkan.

Untuk mengatasi masalah ini, ikuti langkah-langkah pemecahan masalah berikut:

Tinjau log Instance VM

  1. Buka pelihat Cloud Logging
  2. Di menu drop-down Audited Resource, pilih VM Instance.
  3. Di menu drop-down All logs, pilih compute.googleapis.com/activity_log.
  4. Pindai log untuk menemukan entri yang terkait dengan kegagalan pembuatan instance VM.

Memeriksa penggunaan kuota Compute Engine

  1. Untuk melihat penggunaan resource Compute Engine dibandingkan dengan kuota Dataflow untuk zona yang Anda targetkan, jalankan perintah berikut:

    gcloud compute regions describe [REGION]

  2. Tinjau hasil untuk resource berikut guna melihat apakah ada yang melebihi kuota:

    • CPUS
    • DISKS_TOTAL_GB
    • IN_USE_ADDRESSES
    • INSTANCE_GROUPS
    • INSTANCES
    • REGIONAL_INSTANCE_GROUP_MANAGERS
  3. Jika perlu, minta perubahan kuota.

Meninjau batasan kebijakan organisasi Anda

  1. Buka halaman Kebijakan organisasi
  2. Tinjau batasan untuk setiap batasan yang mungkin membatasi pembuatan instance VM untuk akun yang Anda gunakan (secara default, akun layanan Dataflow) atau di zona yang Anda targetkan.
  3. Jika Anda memiliki kebijakan yang membatasi penggunaan alamat IP eksternal, nonaktifkan alamat IP eksternal untuk tugas ini. Untuk mengetahui informasi selengkapnya tentang cara menonaktifkan alamat IP eksternal, lihat Mengonfigurasi akses internet dan aturan firewall.

Waktu tunggu update dari pekerja habis

Jika tugas Dataflow gagal, error berikut akan terjadi:

Root cause: Timed out waiting for an update from the worker. For more information, see https://cloud.google.com/dataflow/docs/guides/common-errors#worker-lost-contact.

Beberapa penyebab dapat menimbulkan error ini, termasuk:

Beban kerja berlebih

Terkadang, error waktu tunggu terjadi saat worker kehabisan memori atau ruang swap. Untuk mengatasi masalah ini, sebagai langkah pertama, coba jalankan tugas lagi. Jika tugas masih gagal dan error yang sama terjadi, coba gunakan pekerja dengan lebih banyak memori dan ruang disk. Misalnya, tambahkan opsi startup pipeline berikut:

--worker_machine_type=m1-ultramem-40 --disk_size_gb=500

Mengubah jenis pekerja dapat memengaruhi biaya yang ditagih. Untuk mengetahui informasi selengkapnya, lihat Memecahkan masalah error kehabisan memori Dataflow.

Error ini juga dapat terjadi saat data Anda berisi tombol pintas. Dalam skenario ini, pemanfaatan CPU tinggi pada beberapa pekerja selama sebagian besar durasi tugas. Namun, jumlah pekerja tidak mencapai jumlah maksimum yang diizinkan. Untuk mengetahui informasi selengkapnya tentang tombol pintas dan kemungkinan solusinya, lihat Menulis pipeline Dataflow dengan mempertimbangkan skalabilitas.

Untuk solusi tambahan terkait masalah ini, lihat Tombol cepat ... terdeteksi.

Python: Global Interpreter Lock (GIL)

Jika kode Python Anda memanggil kode C/C++ menggunakan mekanisme ekstensi Python, periksa apakah kode ekstensi melepaskan Kunci Interpreter Global (GIL) Python di bagian kode yang intensif secara komputasi dan tidak mengakses status Python. Jika GIL tidak dilepaskan dalam jangka waktu yang lama, Anda mungkin akan melihat pesan error seperti: Unable to retrieve status info from SDK harness <...> within allowed time dan SDK worker appears to be permanently unresponsive. Aborting the SDK.

Library yang memfasilitasi interaksi dengan ekstensi seperti Cython, dan PyBind memiliki primitif untuk mengontrol status GIL. Anda juga dapat melepaskan GIL secara manual dan memperolehnya kembali sebelum mengembalikan kontrol ke interpreter Python dengan menggunakan makro Py_BEGIN_ALLOW_THREADS dan Py_END_ALLOW_THREADS. Untuk mengetahui informasi selengkapnya, lihat Thread State and the Global Interpreter Lock dalam dokumentasi Python.

Stacktrace thread yang menahan GIL pada pekerja Dataflow yang sedang berjalan dapat diambil sebagai berikut:

# SSH into a running Dataflow worker VM that is currently a straggler, for example:
gcloud compute ssh --zone "us-central1-a" "worker-that-emits-unable-to-retrieve-status-messages" --project "project-id"

# Install nerdctl to inspect a running container with ptrace privileges.
wget https://github.com/containerd/nerdctl/releases/download/v2.0.2/nerdctl-2.0.2-linux-amd64.tar.gz
sudo tar Cxzvvf /var/lib/toolbox  nerdctl-2.0.2-linux-amd64.tar.gz
alias nerdctl="sudo /var/lib/toolbox/nerdctl -n k8s.io"

# Find a container running the Python SDK harness.
CONTAINER_ID=`nerdctl ps | grep sdk-0-0 | awk '{print $1}'`

# Start a shell in the running container.
nerdctl exec --privileged -it $CONTAINER_ID /bin/bash

# Inspect python processes in the running container.
ps -A | grep python
PYTHON_PID=$(ps -A | grep python | head -1 | awk '{print $1}')

# Use pystack to retrieve stacktraces from the python process.
pip install pystack

pystack remote --native $PYTHON_PID

# Find which thread holds the GIL and inspect the stacktrace.
pystack remote --native $PYTHON_PID | grep -iF "Has the GIL" -A 100

# Alternately, use inspect with gdb.
apt update && apt install -y gdb
gdb --quiet \
  --eval-command="set pagination off" \
  --eval-command="thread apply all bt" \
  --eval-command "set confirm off" \
  --eval-command="quit"  -p $PYTHON_PID

Dalam pipeline Python, pada konfigurasi default, Dataflow mengasumsikan bahwa setiap proses Python yang berjalan di pekerja menggunakan satu inti vCPU secara efisien. Jika kode pipeline melewati batasan GIL, seperti dengan menggunakan library yang diimplementasikan di C++, elemen pemrosesan mungkin menggunakan resource dari lebih dari satu core vCPU, dan pekerja mungkin tidak mendapatkan resource CPU yang cukup. Untuk mengatasi masalah ini, kurangi jumlah thread pada pekerja.

Penyiapan DoFn yang berjalan lama

Jika Anda tidak menggunakan Runner v2, panggilan yang berjalan lama ke DoFn.Setup dapat menyebabkan error berikut:

Timed out waiting for an update from the worker

Secara umum, hindari operasi yang memakan waktu dalam DoFn.Setup.

Error sementara saat memublikasikan ke topik

Saat tugas streaming Anda menggunakan mode streaming minimal satu kali dan memublikasikan ke sink Pub/Sub, error berikut akan muncul di log tugas:

There were transient errors publishing to topic

Jika tugas Anda berjalan dengan benar, error ini tidak berbahaya, dan Anda dapat mengabaikannya. Dataflow akan otomatis mencoba mengirim ulang pesan Pub/Sub dengan penundaan mundur.

Tidak dapat mengambil data karena token tidak cocok untuk kunci

Error berikut berarti item kerja yang sedang diproses telah dialokasikan ulang ke worker lain:

Unable to fetch data due to token mismatch for key

Hal ini paling sering terjadi selama penskalaan otomatis, tetapi dapat terjadi kapan saja. Setiap pekerjaan yang terpengaruh akan dicoba lagi. Anda dapat mengabaikan error ini.

Masalah dependensi Java

Class dan library yang tidak kompatibel dapat menyebabkan masalah dependensi Java. Jika pipeline Anda mengalami masalah dependensi Java, salah satu error berikut mungkin terjadi:

  • NoClassDefFoundError: Error ini terjadi saat seluruh class tidak tersedia selama runtime. Hal ini dapat disebabkan oleh masalah konfigurasi umum atau inkompatibilitas antara versi protobuf Beam dan proto yang dihasilkan klien (misalnya, masalah ini).
  • NoSuchMethodError: Error ini terjadi saat class di classpath menggunakan versi yang tidak berisi metode yang benar atau saat tanda tangan metode berubah.
  • NoSuchFieldError: Error ini terjadi saat class di classpath menggunakan versi yang tidak memiliki kolom yang diperlukan selama runtime.
  • FATAL ERROR in native method: Error ini terjadi saat dependensi bawaan tidak dapat dimuat dengan benar. Saat menggunakan JAR uber (shaded), jangan sertakan library yang menggunakan tanda tangan (seperti Conscrypt) dalam JAR yang sama.

Jika pipeline Anda berisi kode dan setelan khusus pengguna, kode tersebut tidak boleh berisi library versi campuran. Jika Anda menggunakan library pengelolaan dependensi, sebaiknya gunakan BoM LibraryGoogle Cloud .

Jika Anda menggunakan Apache Beam SDK, untuk mengimpor BOM library yang benar, gunakan beam-sdks-java-io-google-cloud-platform-bom:

Maven

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.apache.beam</groupId>
      <artifactId>beam-sdks-java-google-cloud-platform-bom</artifactId>
      <version>BEAM_VERSION</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Gradle

dependencies {
    implementation(platform("org.apache.beam:beam-sdks-java-google-cloud-platform-bom:BEAM_VERSION"))
}

Untuk mengetahui informasi selengkapnya, lihat Mengelola dependensi pipeline di Dataflow.

InaccessibleObjectException di JDK 17 dan yang lebih baru

Saat Anda menjalankan pipeline dengan Java Platform, Standard Edition Development Kit (JDK) versi 17 dan yang lebih baru, error berikut mungkin muncul di file log pekerja:

Unable to make protected METHOD accessible:
    module java.MODULE does not "opens java.MODULE" to ...

Masalah ini terjadi karena mulai dari Java versi 9, opsi mesin virtual (JVM) Java modul terbuka diperlukan untuk mengakses internal JDK. Di Java 16 dan versi yang lebih baru, opsi JVM modul terbuka selalu diperlukan untuk mengakses internal JDK.

Untuk mengatasi masalah ini, saat Anda meneruskan modul ke pipeline Dataflow untuk dibuka, gunakan format MODULE/PACKAGE=TARGET_MODULE(,TARGET_MODULE)* dengan opsi pipeline jdkAddOpenModules. Format ini memungkinkan akses ke library yang diperlukan.

Misalnya, jika errornya adalah module java.base does not "opens java.lang" to unnamed module @..., sertakan opsi pipeline berikut saat Anda menjalankan pipeline:

--jdkAddOpenModules=java.base/java.lang=ALL-UNNAMED

Untuk mengetahui informasi selengkapnya, lihat dokumentasi class DataflowPipelineOptions.

Error saat melaporkan progres item kerja

Untuk pipeline Java, jika Anda tidak menggunakan Running V2, Anda mungkin melihat error berikut:

Error reporting workitem progress update to Dataflow service: ...

Error ini disebabkan oleh pengecualian yang tidak tertangani selama pembaruan progres item kerja, seperti selama pemisahan sumber. Dalam sebagian besar kasus, jika kode pengguna Apache Beam menampilkan pengecualian yang tidak tertangani, item kerja akan gagal, sehingga menyebabkan pipeline gagal.Namun, pengecualian di Source.split akan dihentikan, karena bagian kode tersebut berada di luar item kerja. Akibatnya, hanya log error yang direkam.

Error ini biasanya tidak berbahaya jika hanya terjadi sesekali. Namun, pertimbangkan untuk menangani pengecualian dengan baik di dalam kode Source.split Anda.

Error konektor BigQuery

Bagian berikut berisi error umum konektor BigQuery yang mungkin Anda alami dan langkah-langkah untuk menyelesaikan atau memecahkan masalah error tersebut.

quotaExceeded

Saat menggunakan konektor BigQuery untuk menulis ke BigQuery menggunakan penyisipan streaming, throughput penulisan lebih rendah dari yang diharapkan, dan error berikut mungkin terjadi:

quotaExceeded

Throughput yang lambat mungkin disebabkan oleh pipeline Anda yang melebihi kuota penyisipan streaming BigQuery yang tersedia. Jika ya, pesan error terkait kuota dari BigQuery akan muncul di log pekerja Dataflow (cari error quotaExceeded).

Jika Anda melihat error quotaExceeded, untuk mengatasi masalah ini:

  • Saat menggunakan Apache Beam SDK untuk Java, tetapkan opsi sink BigQuery ignoreInsertIds().
  • Saat menggunakan Apache Beam SDK untuk Python, gunakan opsi ignore_insert_ids.

Setelan ini membuat Anda memenuhi syarat untuk throughput penyisipan streaming BigQuery satu GB per detik, per project. Untuk mengetahui informasi selengkapnya tentang peringatan terkait penghapusan duplikat pesan otomatis, lihat dokumentasi BigQuery. Untuk meningkatkan kuota penyisipan streaming BigQuery lebih tinggi dari satu GBps, kirimkan permintaan melalui konsol. Google Cloud

Jika Anda tidak melihat error terkait kuota di log pekerja, masalahnya mungkin karena parameter terkait penggabungan atau batching default tidak memberikan paralelisme yang memadai agar pipeline Anda dapat diskalakan. Anda dapat menyesuaikan beberapa konfigurasi terkait konektor BigQuery Dataflow untuk mencapai performa yang diharapkan saat menulis ke BigQuery menggunakan penyisipan streaming. Misalnya, untuk Apache Beam SDK for Java, sesuaikan numStreamingKeys agar sesuai dengan jumlah maksimum pekerja dan pertimbangkan untuk meningkatkan insertBundleParallelism guna mengonfigurasi konektor BigQuery agar menulis ke BigQuery menggunakan lebih banyak thread paralel.

Untuk konfigurasi yang tersedia di Apache Beam SDK untuk Java, lihat BigQueryPipelineOptions, dan untuk konfigurasi yang tersedia di Apache Beam SDK untuk Python, lihat transformasi WriteToBigQuery.

rateLimitExceeded

Saat menggunakan konektor BigQuery, terjadi error berikut:

rateLimitExceeded

Error ini terjadi jika terlalu banyak permintaan API BigQuery dikirim selama durasi singkat. BigQuery memiliki batas kuota jangka pendek. Pipeline Dataflow Anda dapat melampaui kuota tersebut untuk sementara. Dalam skenario ini, permintaan API dari pipeline Dataflow ke BigQuery mungkin gagal, yang dapat menyebabkan error rateLimitExceeded dalam log pekerja.

Dataflow mencoba ulang kegagalan tersebut, sehingga Anda dapat mengabaikan error ini dengan aman. Jika Anda yakin bahwa pipeline Anda terpengaruh oleh error rateLimitExceeded, hubungi Cloud Customer Care.

Error lain-lain

Bagian berikut berisi berbagai error yang mungkin Anda alami dan langkah-langkah untuk menyelesaikan atau memecahkan masalah error tersebut.

Tidak dapat mengalokasikan sha384

Tugas Anda berjalan dengan benar, tetapi Anda melihat error berikut di log tugas:

ima: Can not allocate sha384 (reason: -2)

Jika tugas Anda berjalan dengan benar, error ini tidak berbahaya, dan Anda dapat mengabaikannya. Image dasar VM pekerja terkadang menghasilkan pesan ini. Dataflow secara otomatis merespons dan mengatasi masalah yang mendasarinya.

Ada permintaan fitur untuk mengubah tingkat pesan ini dari WARN menjadi INFO. Untuk mengetahui informasi selengkapnya, lihat Menurunkan tingkat log error peluncuran sistem Dataflow ke WARN atau INFO.

Error saat menginisialisasi pemeriksa plugin dinamis

Tugas Anda berjalan dengan benar, tetapi Anda melihat error berikut di log tugas:

Error initializing dynamic plugin prober" err="error (re-)creating driver directory: mkdir /usr/libexec/kubernetes: read-only file system

Jika tugas Anda berjalan dengan benar, error ini tidak berbahaya, dan Anda dapat mengabaikannya. Error ini terjadi saat tugas Dataflow mencoba membuat direktori tanpa izin tulis yang diperlukan, dan tugas gagal. Jika tugas Anda berhasil, direktori tidak diperlukan, atau Dataflow mengatasi masalah yang mendasarinya.

Ada permintaan fitur untuk mengubah tingkat pesan ini dari WARN menjadi INFO. Untuk mengetahui informasi selengkapnya, lihat Menurunkan tingkat log error peluncuran sistem Dataflow ke WARN atau INFO.

Objek tersebut tidak ada: pipeline.pb

Saat mencantumkan tugas menggunakan opsi JOB_VIEW_ALL, terjadi error berikut:

No such object: BUCKET_NAME/PATH/pipeline.pb

Error ini dapat terjadi jika Anda menghapus file pipeline.pb dari file penyiapan untuk tugas.

Melewati sinkronisasi pod

Tugas Anda berjalan dengan benar, tetapi Anda melihat salah satu error berikut di log tugas:

Skipping pod synchronization" err="container runtime status check may not have completed yet"

Atau:

Skipping pod synchronization" err="[container runtime status check may not have completed yet, PLEG is not healthy: pleg has yet to be successful]"

Jika tugas Anda berjalan dengan benar, error ini tidak berbahaya, dan Anda dapat mengabaikannya. Pesan container runtime status check may not have completed yet muncul saat kubelet Kubernetes melewati sinkronisasi pod karena menunggu inisialisasi runtime container. Skenario ini terjadi karena berbagai alasan, seperti saat runtime container baru saja dimulai atau dimulai ulang.

Jika pesan menyertakan PLEG is not healthy: pleg has yet to be successful, kubelet menunggu generator peristiwa siklus proses pod (PLEG) menjadi sehat sebelum menyinkronkan pod. PLEG bertanggung jawab untuk menghasilkan peristiwa yang digunakan oleh kubelet untuk melacak status pod.

Ada permintaan fitur untuk mengubah tingkat pesan ini dari WARN menjadi INFO. Untuk mengetahui informasi selengkapnya, lihat Menurunkan tingkat log error peluncuran sistem Dataflow ke WARN atau INFO.

Rekomendasi

Untuk panduan tentang rekomendasi yang dihasilkan oleh Insight Dataflow, lihat Insight.