Jika Anda mengalami masalah dengan pipeline atau tugas Dataflow, halaman ini menampilkan pesan error yang mungkin Anda lihat dan memberikan saran terkait 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 pada tugas. Log ini juga dapat menunjukkan kondisi
yang mencegah jalur logging normal berfungsi.
Pipeline Anda mungkin menampilkan pengecualian saat memproses data. Beberapa error ini bersifat sementara, misalnya saat terjadi kesulitan sementara untuk 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 error ditampilkan untuk elemen apa pun dalam paket tersebut. Saat berjalan dalam mode batch, paket yang menyertakan item yang gagal akan dicoba lagi empat kali. Pipeline akan gagal sepenuhnya jika satu paket gagal empat kali. Saat berjalan dalam mode streaming, paket yang menyertakan item yang gagal akan dicoba ulang 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 konsol atau jendela terminal.
Pertimbangkan untuk mencegah error dalam kode Anda dengan menambahkan pengendali pengecualian. Misalnya,
jika Anda ingin menghapus elemen yang gagal dalam beberapa validasi input kustom
yang dilakukan di ParDo
, gunakan blok try/catch dalam ParDo
untuk menangani
pengecualian, mencatat ke dalam log, dan menghapus elemen. Untuk beban kerja produksi, terapkan
pola pesan yang belum diproses. Untuk melacak jumlah error, Anda menggunakan
transformasi agregasi.
File log tidak ada
Jika Anda tidak melihat log untuk tugas, hapus filter pengecualian yang berisi
resource.type="dataflow_step"
dari semua sink Log Router Cloud Logging.
Untuk mengetahui detail selengkapnya tentang cara menghapus pengecualian log, lihat panduan Menghapus pengecualian.
Duplikat dalam output
Saat Anda menjalankan tugas Dataflow, output akan berisi data duplikasi.
Masalah ini dapat terjadi saat tugas Dataflow Anda menggunakan mode streaming pipeline setidaknya sekali. Mode ini menjamin bahwa data diproses setidaknya satu kali. Namun, data duplikat dapat terjadi dalam mode ini.
Jika alur kerja Anda tidak dapat menerima data duplikat, gunakan mode streaming exactly-once. Dalam mode ini, Dataflow memastikan bahwa data tidak dihapus 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 pipeline umum 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 akan 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 akan muncul di file log, dan tugas akan 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 @, 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:
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 sinkron karena penundaan 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 jika sumber dan tujuan berada di region yang berbeda. Hal ini
juga dapat terjadi jika lokasi staging 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 staging Anda berada di wilayah yang sama. Lokasi bucket Cloud Storage tidak dapat diubah, sehingga 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 data atau tujuan.
Untuk mengatasi masalah ini, ikuti langkah-langkah pemecahan masalah berikut:
- Pastikan sumber data sedang berjalan.
- Pastikan tujuan sedang berjalan.
- Tinjau parameter koneksi yang digunakan dalam konfigurasi pipeline Dataflow.
- Pastikan masalah performa tidak memengaruhi sumber atau tujuan.
- Pastikan aturan firewall tidak memblokir koneksi.
Tidak ada objek tersebut
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 berjalan menggunakan temp_location
yang sama untuk melakukan staging file tugas sementara yang dibuat saat pipeline berjalan. Jika beberapa tugas serentak memiliki temp_location
yang sama,
tugas ini dapat menginjak data sementara satu sama lain, dan kondisi race dapat
terjadi. Untuk menghindari masalah ini, sebaiknya gunakan temp_location
unik
untuk setiap tugas.
Dataflow tidak dapat menentukan backlog
Saat menjalankan pipeline streaming dari Pub/Sub, peringatan berikut akan terjadi:
Dataflow is unable to determine the backlog for Pub/Sub subscription
Saat pipeline Dataflow mengambil data dari Pub/Sub, Dataflow perlu berulang kali meminta informasi dari Pub/Sub. Informasi ini mencakup jumlah backlog pada langganan dan usia pesan terlama yang belum direspons. 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 mengaktifkan semua traffic TCP di antara VM di 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 harus saling berkomunikasi menggunakan port TCP
12345
dan12346
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 flag rules
gcloud compute firewall-rules create
untuk mengizinkan traffic jaringan ke port12345
dan12346
. 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 AndaNETWORK
: nama jaringan Anda
Tugas Anda terikat shuffle.
Untuk mengatasi masalah ini, lakukan satu atau beberapa perubahan berikut.
Java
- Jika tugas tidak menggunakan shuffle berbasis layanan, beralihlah untuk menggunakan Dataflow Shuffle berbasis layanan dengan menetapkan
--experiments=shuffle_mode=service
. Untuk mengetahui detail dan ketersediaan, lihat Dataflow Shuffle. - Tambahkan lebih banyak pekerja. Coba tetapkan
--numWorkers
dengan nilai yang lebih tinggi saat Anda menjalankan pipeline. - Meningkatkan ukuran disk yang terpasang 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 untuk menggunakan Dataflow Shuffle berbasis layanan dengan menetapkan
--experiments=shuffle_mode=service
. Untuk mengetahui detail dan ketersediaan, lihat Dataflow Shuffle. - Tambahkan lebih banyak pekerja. Coba tetapkan
--num_workers
dengan nilai yang lebih tinggi saat Anda menjalankan pipeline. - Meningkatkan ukuran disk yang terpasang 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 untuk menggunakan Dataflow Shuffle berbasis layanan dengan menetapkan
--experiments=shuffle_mode=service
. Untuk mengetahui detail dan ketersediaan, lihat Dataflow Shuffle. - Tambahkan lebih banyak pekerja. Coba tetapkan
--num_workers
dengan nilai yang lebih tinggi saat Anda menjalankan pipeline. - Meningkatkan ukuran disk yang terpasang 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.
- Jika tugas tidak menggunakan shuffle berbasis layanan, beralihlah untuk menggunakan Dataflow Shuffle berbasis layanan dengan menetapkan
Error encoding, IOException, atau perilaku yang tidak terduga dalam kode pengguna
Apache Beam SDK dan pekerja Dataflow bergantung pada komponen pihak ketiga umum. Komponen ini mengimpor dependensi tambahan. Konflik versi dapat menyebabkan perilaku yang tidak terduga dalam layanan. Selain itu, beberapa library tidak kompatibel dengan versi mendatang. Anda mungkin perlu menyematkan ke versi yang tercantum dan berada dalam cakupan selama eksekusi. SDK dan Dependensi Pekerja 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 tidak dapat menonaktifkan kebijakan VM Manager untuk seluruh project, 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 pekerja:
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 tersebut atau binding JNI 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 jika tugas Dataflow Anda memiliki karakteristik berikut:
- Tugas Dataflow menggunakan Streaming Engine.
- Pipeline memiliki sink Pub/Sub.
- Pipeline menggunakan langganan pull.
- Pipeline menggunakan salah satu API layanan Pub/Sub untuk memublikasikan pesan, bukan menggunakan sink I/O Pub/Sub bawaan.
- Pub/Sub menggunakan library klien Java atau C#.
- Langganan Pub/Sub memiliki topik yang dihentikan pengirimannya.
Error ini terjadi karena saat Anda menggunakan library klien Java atau C# Pub/Sub dan topik dead-letter untuk langganan diaktifkan, 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.
- Nonaktifkan Streaming Engine.
- Gunakan konektor
PubSubIO
Apache Beam bawaan, bukan API layanan Pub/Sub. - Gunakan jenis langganan Pub/Sub yang berbeda.
- Hapus topik yang dihentikan pengirimannya.
- Jangan gunakan library klien Java atau C# dengan langganan pull Pub/Sub Anda. Untuk opsi lainnya, lihat Contoh kode library klien.
- Dalam kode pipeline, saat kunci atribut dimulai dengan
goog
, hapus atribut pesan sebelum memublikasikan pesan.
Tombol pintasan ... terdeteksi
Error berikut terjadi:
A hot key HOT_KEY_NAME was detected in...
Error ini terjadi jika data Anda berisi tombol pintasan. Hot key 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 dapat dibaca manusia ke log saat tombol cepat terdeteksi di pipeline, gunakan opsi pipeline tombol cepat.
Untuk mengatasi masalah ini, pastikan data Anda didistribusikan secara merata. Jika kunci memiliki nilai yang tidak proporsional, pertimbangkan tindakan berikut:
- Mengganti kunci enkripsi data Anda. Terapkan transformasi
ParDo
untuk menghasilkan key-value pair baru. - Untuk tugas Java, gunakan transformasi
Combine.PerKey.withHotKeyFanout
. - Untuk tugas Python, gunakan transformasi
CombinePerKey.with_hot_key_fanout
. - Aktifkan Dataflow Shuffle.
Untuk melihat tombol pintasan di antarmuka pemantauan Dataflow, lihat Memecahkan masalah straggler dalam tugas batch.
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 project Google Cloud 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 Anda dapat menyebabkan grafik tugas melebihi batas. Kondisi umum meliputi:
- Transformasi
Create
yang menyertakan 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) menarik data dalam jumlah besar untuk diserialisasi.- Directed acyclic graph (DAG) digunakan sebagai bagian dari loop terprogram yang menghitung daftar besar.
Untuk menghindari kondisi ini, pertimbangkan untuk menyusun ulang pipeline Anda.
Key Commit Terlalu Besar
Saat menjalankan tugas streaming, error berikut akan muncul dalam file log pekerja:
KeyCommitTooLargeException
Error ini terjadi dalam skenario streaming jika data dalam jumlah 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 perubahan status yang melebihi batas.
- Jika beberapa elemen dikelompokkan menurut kunci, pertimbangkan untuk meningkatkan ruang kunci guna mengurangi elemen yang dikelompokkan per kunci.
- Jika elemen untuk kunci dimunculkan dengan frekuensi tinggi dalam waktu singkat, hal itu dapat menghasilkan banyak GB peristiwa untuk kunci tersebut di jendela. Tulis ulang pipeline untuk mendeteksi kunci seperti ini dan hanya tampilkan output yang menunjukkan kunci sering muncul di jendela tersebut.
- Gunakan transformasi
Combine
ruang sublinear untuk operasi komutatif dan terkait. Jangan gunakan penggabungan jika tidak mengurangi ruang. Misalnya, penggabung untuk string yang hanya menambahkan string menjadi satu lebih buruk daripada tidak menggunakan penggabungan.
Menolak pesan yang berukuran lebih dari 7168 K
Saat Anda menjalankan tugas Dataflow yang dibuat dari template, tugas tersebut 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 tidak terkirim melebihi batas ukuran 7168 K. Sebagai solusi, aktifkan Streaming Engine, yang memiliki batas ukuran yang 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, jalankan pipeline dengan opsi berikut:
Java
--dataflowJobFile=PATH_TO_OUTPUT_FILE
Python
--dataflow_job_file=PATH_TO_OUTPUT_FILE
Go
Output tugas Anda sebagai JSON tidak didukung di Go.
Perintah ini menulis representasi JSON tugas Anda ke file. Ukuran file yang diserialisasi adalah estimasi yang baik untuk ukuran permintaan. Ukuran sebenarnya sedikit lebih besar karena beberapa informasi tambahan disertakan dalam permintaan.
Kondisi tertentu dalam pipeline Anda dapat menyebabkan representasi JSON melebihi batas. Kondisi umum meliputi:
- Transformasi
Create
yang menyertakan 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) menarik data dalam jumlah besar untuk diserialisasi.
Untuk menghindari kondisi ini, pertimbangkan untuk menyusun ulang pipeline Anda.
Opsi pipeline SDK atau daftar file staging 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 melebihi batas:
- Ada terlalu banyak file JAR untuk di-stage.
- Kolom permintaan
sdkPipelineOptions
terlalu besar.
Untuk memperkirakan ukuran permintaan JSON pipeline, jalankan pipeline dengan opsi berikut:
Java
--dataflowJobFile=PATH_TO_OUTPUT_FILE
Python
--dataflow_job_file=PATH_TO_OUTPUT_FILE
Go
Output tugas Anda sebagai JSON tidak didukung di Go.
Ukuran file output dari perintah ini harus kurang dari 256 KB. 512 KB dalam pesan error mengacu 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 menjalankan tugas Dataflow dalam project. Pilih tugas Dataflow apa pun 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 dapat dilakukan, karena VM tidak diaktifkan 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 tugas Dataflow menggunakan JAR uber. Untuk contoh yang menunjukkan cara membuat dan menggunakan JAR uber, lihat Mem-build 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 serial yang dikeluarkan ke (Co-)GroupByKey tertentu terlalu besar setelah coder yang sesuai diterapkan. Dataflow memiliki batas untuk kunci shuffle serial.
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 dari 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 file dalam jumlah sangat besar menggunakan
TextIO
, AvroIO
, BigQueryIO
melalui EXPORT, atau beberapa sumber berbasis file
lainnya. Batas tertentu bergantung pada detail sumber Anda, tetapi
berada dalam urutan puluhan ribu file dalam satu pipeline. Misalnya,
skema penyematan 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 menghabiskan lebih dari 20 MB saat diserialisasi.
Batas yang diizinkan untuk ukuran total objek BoundedSource
yang dihasilkan oleh operasi splitIntoBundles()
dari sumber kustom Anda adalah
20 MB.
Untuk mengatasi keterbatasan ini, lakukan salah satu perubahan berikut:
Aktifkan Runner V2. Runner v2 mengonversi sumber menjadi DoFn yang dapat dibagi yang tidak memiliki batas pemisahan sumber ini.
Ubah subclass
BoundedSource
kustom Anda sehingga ukuran total objekBoundedSource
yang dihasilkan lebih kecil dari batas 20 MB. Misalnya, sumber Anda mungkin menghasilkan lebih sedikit bagian pada awalnya, dan mengandalkan Penyeimbangan Ulang Tugas Dinamis untuk membagi input lebih lanjut sesuai permintaan.
NameError
Saat Anda menjalankan pipeline menggunakan layanan Dataflow, error berikut akan 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 dalam namespace global yang tidak tersedia di pekerja Dataflow.
Secara default, impor, fungsi, dan variabel global yang ditentukan dalam 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 mengimpor serta mereferensikan fungsi dalam namespace global, tetapkan opsi pipeline --save_main_session
ke True
. Perubahan ini
mem-pickle status namespace global ke dan memuatkannya di pekerja
Dataflow.
Jika Anda memiliki objek di namespace global yang tidak dapat di-pickle, error pickle akan terjadi. 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 yang berbeda untuk memaketkan alur kerja dan
mengelola dependensi.
Objek tunduk pada kebijakan retensi bucket
Jika Anda memiliki tugas Dataflow yang menulis ke bucket Cloud Storage, tugas tersebut 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 menjadi tujuan penulisan tugas Dataflow. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan dan menggunakan konfigurasi retensi objek.
Untuk mengatasi masalah ini, gunakan salah satu solusi berikut:
Tulis ke bucket Cloud Storage yang tidak memiliki kebijakan retensi di folder
temp
.Hapus kebijakan retensi dari bucket tempat tugas menulis. 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, pastikan akun layanan pekerja Dataflow memiliki izin tulis di bucket Cloud Storage. Untuk 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 di TIME_INTERVAL tanpa ditampilkan, 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 deadlock, atau lambat secara tidak wajar untuk menyelesaikan pemrosesan.
Untuk menentukan mana yang terjadi, luaskan entri log Cloud Monitoring untuk melihat pelacakan tumpukan. Cari pesan yang menunjukkan bahwa kode DoFn
macet
atau mengalami masalah. 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 dibuat di Java VM (menggunakan Java atau Scala), Anda dapat menyelidiki penyebab kode macet. Ambil thread dump lengkap dari seluruh JVM (bukan hanya thread yang macet) dengan mengikuti langkah-langkah berikut:
- Catat nama pekerja dari entri log.
- Di bagian Compute Engine pada konsol Google Cloud, temukan instance Compute Engine dengan nama pekerja yang Anda catat.
- Gunakan SSH untuk terhubung ke instance dengan nama tersebut.
Jalankan perintah berikut:
curl http://localhost:8081/threadz
Operasi sedang berlangsung dalam paket
Saat Anda menjalankan pembacaan pipeline dari
JdbcIO
,
pembacaan berpartisi dari JdbcIO
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. Membaca dengan lebih banyak partisi yang lebih kecil untuk penskalaan yang lebih baik.
Periksa apakah kolom partisi adalah kolom indeks atau kolom partisi yang sebenarnya di sumber. Aktifkan pengindeksan dan partisi pada kolom ini di database sumber untuk mendapatkan performa terbaik.
Gunakan parameter
lowerBound
danupperBound
untuk melewati penemuan batas.
Error kuota Pub/Sub
Saat menjalankan pipeline streaming dari Pub/Sub, error berikut akan terjadi:
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 memadai.
Untuk mengetahui apakah project Anda tidak memiliki cukup kuota, ikuti langkah-langkah berikut untuk memeriksa error klien:
- Buka Konsol Google Cloud.
- Di menu sebelah kiri, pilih API & layanan.
- Di Kotak Penelusuran, telusuri Cloud Pub/Sub.
- Klik tab Penggunaan.
- Periksa Kode Respons dan cari kode error klien
(4xx)
.
Permintaan dilarang oleh kebijakan organisasi
Saat menjalankan pipeline, error berikut terjadi:
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 yang di-stage...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 staging tidak memiliki setelan TTL yang menyebabkan paket yang di-staging dihapus.
Pastikan akun layanan pekerja project Dataflow Anda memiliki izin untuk mengakses bucket Cloud Storage yang digunakan untuk staging. Kesenjangan 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 staging dimigrasikan dari akses terperinci ke akses level bucket yang seragam. Karena inkonsistensi antara kebijakan IAM dan ACL, memigrasikan bucket staging 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 di bucket staging.
Untuk informasi selengkapnya, lihat Mengakses bucket Cloud Storage di seluruh project Google Cloud.
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 akan gagal menjalankan tugas, dan pesan ini akan ditampilkan.
Saat berjalan dalam mode streaming, paket yang menyertakan item yang gagal akan dicoba ulang tanpa batas waktu, yang dapat menyebabkan pipeline Anda terhenti secara permanen.
Anda tidak dapat mengonfigurasi nilai minimum kegagalan ini. Untuk mengetahui detail selengkapnya, lihat penanganan pengecualian dan error pipeline.
Untuk mengatasi masalah ini, lihat log Cloud Monitoring tugas untuk menemukan empat kegagalan individual. Dalam log pekerja, cari entri log Error-level atau Fatal-level yang menampilkan pengecualian atau error. Pengecualian atau error harus muncul minimal empat kali. Jika log hanya berisi error waktu tunggu umum yang terkait dengan akses ke resource eksternal, seperti MongoDB, pastikan akun layanan pekerja memiliki izin untuk mengakses subjaringan resource.
Waktu tunggu habis 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
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 habis mungkin terjadi karena file requirements.txt
.
Untuk mengetahui informasi selengkapnya, lihat
bug tim Apache Arrow yang melacak masalah ini.
Solusi yang disarankan adalah menginstal apache-beam
langsung di Dockerfile. Dengan cara ini, waktu tunggu
untuk file requirements.txt
tidak diterapkan.
Menulis File yang Benar/Menulis/WriteImpl/PreFinalize gagal
Saat menjalankan tugas, tugas gagal secara berkala, dan error berikut terjadi:
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 serentak.
Untuk mengatasi masalah ini, jangan gunakan subfolder yang sama sebagai lokasi penyimpanan sementara untuk beberapa pipeline. Untuk setiap pipeline, berikan subfolder unik yang akan digunakan sebagai lokasi penyimpanan sementara.
Elemen melebihi ukuran pesan protobuf maksimum
Saat menjalankan tugas Dataflow dan pipeline Anda memiliki elemen yang 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 berlanjut 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 yang besar, persyaratan RAM untuk pipeline akan meningkat.
Elemen besar juga dapat menyebabkan error runtime,
terutama saat elemen tersebut melintasi batas tahap yang digabungkan.
Elemen besar dapat terjadi saat pipeline secara tidak sengaja mewujudkan iterable
yang besar. Misalnya, pipeline yang meneruskan output
operasi GroupByKey
ke operasi Reshuffle
yang tidak diperlukan
akan mewujudkan daftar sebagai elemen tunggal. Daftar ini berpotensi berisi
sejumlah besar nilai untuk setiap kunci.
Jika error terjadi pada langkah yang menggunakan input samping, perhatikan bahwa penggunaan input samping dapat menyebabkan penghalang fusi. 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. - Menyimpan blob besar di 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 di-iterasi, seperti
AsIterable
danAsMultiMap
.
Ukuran maksimum untuk satu elemen dalam tugas Dataflow dibatasi hingga 2 GB. Untuk mengetahui informasi selengkapnya, silakan melihat Kuota dan batas.
Error tugas arsip
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 kolomJobMetadata
, untukuserDisplayProperties
, gunakan pasangan nilai kunci"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 jika nilai yang diberikan dalam pasangan nilai kunci tugas arsip bukan
nilai yang didukung. Nilai yang didukung untuk pasangan nilai kunci tugas arsip 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
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 arsip 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.
Perubahan 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 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. Error ini 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 informasi selengkapnya, lihat Ringkasan pemindaian OS dan Mengonfigurasi kontrol akses dalam dokumentasi Analisis Artefak.
Terjadi error saat menyinkronkan pod ... gagal "StartContainer"
Error berikut terjadi selama startup pekerja:
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, pekerja Dataflow tidak dapat dimulai, dan tugas batch Dataflow pada akhirnya akan 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 startup.
Untuk memahami akar masalahnya, cari log yang diambil tepat sebelum kegagalan. Untuk menganalisis log, gunakan Logs Explorer. Di Logs Explorer, batasi file log ke entri log yang dikeluarkan dari pekerja dengan error startup penampung. Untuk membatasi entri log, selesaikan langkah-langkah berikut:
- Di Logs Explorer, temukan entri log
Error syncing pod
. - Untuk melihat label yang terkait dengan entri log, luaskan entri log.
- Klik label yang terkait dengan
resource_name
, lalu klik Show matching entries.
Di Logs Explorer, log Dataflow diatur ke dalam beberapa aliran log. Pesan Error syncing pod
ditampilkan dalam log bernama
kubelet
. Namun, log dari penampung yang gagal dapat berada dalam streaming log
yang berbeda. Setiap penampung memiliki nama. Gunakan tabel berikut untuk menentukan
aliran log yang mungkin berisi log yang relevan dengan penampung yang gagal.
Nama container | Nama log |
---|---|
sdk, sdk0, sdk1, sdk-0-0, dan yang serupa | docker |
tali harness | 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.
Setelah Anda memilih log yang relevan, hasil kueri mungkin 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:
- 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 mungkin terjadi karena persyaratan yang bertentangan, atau karena konfigurasi jaringan yang dibatasi yang mencegah pekerja Dataflow mengambil dependensi eksternal dari repositori publik melalui internet. Pekerja gagal di tengah-tengah operasi pipeline karena error kehabisan memori. Anda mungkin melihat error seperti salah satu berikut:
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 kehabisan memori, lihat Memecahkan masalah error kehabisan memori Dataflow.
Dataflow tidak dapat menarik image container. Untuk mengetahui informasi selengkapnya, lihat Permintaan pull image gagal dengan error.
Penampung yang digunakan tidak kompatibel dengan arsitektur CPU VM pekerja. Dalam log startup harness, Anda mungkin melihat error seperti berikut:
exec /opt/apache/beam/boot: exec format error
. Untuk memeriksa arsitektur gambar penampung, jalankandocker image inspect $IMAGE:$TAG
dan cari kata kunciArchitecture
. Jika bertuliskanError: No such image: $IMAGE:$TAG
, Anda mungkin perlu menarik image terlebih dahulu dengan menjalankandocker pull $IMAGE:$TAG
. Untuk informasi tentang cara mem-build image multi-arsitektur, lihat Mem-build image container multi-arsitektur.
Setelah Anda mengidentifikasi error yang menyebabkan penampung gagal, coba atasi error tersebut, lalu kirim ulang pipeline.
Permintaan pull image gagal dengan error
Selama startup pekerja, salah satu error berikut akan 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 penampung Docker. Masalah ini terjadi dalam skenario berikut:
- URL image penampung SDK kustom salah
- Pekerja tidak memiliki kredensial atau akses jaringan ke image 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. Pekerja Dataflow juga memerlukan akses ke gambar.
- Pastikan image publik dapat diambil 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 menggunakan Container Registry, Anda dapat bertransisi 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 jalankandocker pull $image
untuk langsung mengonfirmasi 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 ke dalam log. Dataflow tidak akan membuat tugas gagal. Dataflow juga menghindari kegagalan pipeline streaming yang berjalan lama untuk menghindari kehilangan status pipeline.
Kemungkinan error lainnya dapat muncul dari masalah atau pemadaman kuota repositori. Jika Anda mengalami masalah yang melebihi kuota Docker Hub untuk mengambil image publik atau pemadaman repositori pihak ketiga umum, pertimbangkan untuk menggunakan Artifact Registry sebagai repositori image.
SystemError: opcode tidak diketahui
Pipeline penampung kustom Python Anda mungkin gagal dengan error berikut segera setelah pengiriman tugas:
SystemError: unknown opcode
Selain itu, pelacakan tumpukan mungkin menyertakan
apache_beam/internal/pickler.py
Untuk mengatasi masalah ini, pastikan versi Python yang Anda gunakan secara lokal cocok dengan versi dalam image penampung 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 pekerja
Bagian berikut berisi error pekerja umum yang mungkin Anda temui dan langkah-langkah untuk menyelesaikan atau memecahkan masalah error.
Panggilan dari harness pekerja Java ke DoFn Python gagal dengan error
Jika panggilan dari harness pekerja Java ke DoFn
Python gagal, pesan error
yang relevan akan ditampilkan.
Untuk menyelidiki error, luaskan entri log error Cloud Monitoring dan lihat pesan error serta traceback. Kode 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: data marshal 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 tersisa di perangkat.
Gagal memasang disk
Saat Anda mencoba meluncurkan tugas Dataflow yang menggunakan VM C3 dengan Persistent Disk, tugas tersebut akan gagal dengan satu atau dua 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 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:
- Tugas mendownload dependensi besar saat runtime
- Tugas menggunakan container kustom besar
- Tugas menulis banyak data sementara ke disk lokal
- Saat menggunakan Dataflow Shuffle, Dataflow menetapkan ukuran disk default yang lebih rendah. Akibatnya, error ini mungkin terjadi dengan tugas yang berpindah dari shuffle berbasis pekerja.
- Disk booting pekerja terisi 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 penampung.
Untuk meningkatkan ruang persistent disk atau boot disk, sesuaikan opsi pipeline ukuran disk.
Lacak penggunaan kapasitas disk di 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 booting dengan Melihat output port serial di 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 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 penampung kustom, gunakan Apache Beam SDK 2.46.0 atau yang lebih baru.
Pertimbangkan untuk mem-build 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 Runner Dataflow V2.
Anda juga dapat menggunakan image penampung kustom dengan semua dependensi yang sudah diinstal sebelumnya.
RESOURCE_POOL_EXHAUSTED
Saat Anda membuat resource Google Cloud, error berikut akan terjadi:
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 untuk 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, terapkan loop percobaan ulang untuk tugas Anda, sehingga saat error kehabisan stock terjadi, tugas akan otomatis mencoba ulang hingga resource tersedia. Untuk membuat loop percobaan ulang, terapkan alur kerja berikut:
- Buat tugas Dataflow, dan dapatkan ID tugas.
- Lakukan polling status tugas hingga status tugas menjadi
RUNNING
atauFAILED
.- Jika status tugas adalah
RUNNING
, keluar dari loop percobaan ulang. - Jika status tugasnya adalah
FAILED
, gunakan Cloud Logging API untuk membuat kueri log tugas untuk stringZONE_RESOURCE_POOL_EXHAUSTED_WITH_DETAILS
. Untuk mengetahui informasi selengkapnya, lihat Mengelola 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.
- Jika status tugas adalah
Sebagai praktik terbaik, distribusikan resource Anda di beberapa zona dan region untuk menoleransi pemadaman layanan.
Kuota project ... atau kebijakan kontrol akses yang mencegah operasi
Error berikut terjadi:
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 menjadi dasar pembuatan pekerja Dataflow.
- Organisasi Anda telah menerapkan 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:
Meninjau log Instance VM
- Buka pelihat Cloud Logging
- Di menu drop-down Audited Resource, pilih VM Instance.
- Di menu drop-down All logs, pilih compute.googleapis.com/activity_log.
- Pindai log untuk menemukan entri yang terkait dengan kegagalan pembuatan instance VM.
Memeriksa penggunaan kuota Compute Engine
Untuk melihat penggunaan resource Compute Engine dibandingkan dengan kuota Dataflow untuk zona yang Anda targetkan, jalankan perintah berikut:
gcloud compute regions describe [REGION]
Tinjau hasil untuk resource berikut untuk melihat apakah ada yang melebihi kuota:
- CPU
- DISKS_TOTAL_GB
- IN_USE_ADDRESSES
- INSTANCE_GROUPS
- INSTANCE
- REGIONAL_INSTANCE_GROUP_MANAGERS
Jika perlu, minta perubahan kuota.
Meninjau batasan kebijakan organisasi
- Buka halaman Kebijakan organisasi
- Tinjau batasan yang mungkin membatasi pembuatan instance VM untuk akun yang Anda gunakan (secara default, akun layanan Dataflow) atau di zona yang Anda targetkan.
- 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 aturan akses internet dan firewall.
Waktu tunggu habis saat menunggu update dari pekerja
Saat 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.
Terkadang, error ini terjadi saat pekerja 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 Dataflow kehabisan memori.
Error ini juga dapat terjadi jika data Anda berisi tombol pintasan. Dalam skenario ini, pemakaian CPU tinggi pada beberapa pekerja selama sebagian besar durasi tugas. Namun, jumlah pekerja tidak mencapai batas maksimum yang diizinkan. Untuk mengetahui informasi selengkapnya tentang pintasan keyboard dan kemungkinan solusi, lihat Menulis pipeline Dataflow dengan mempertimbangkan skalabilitas.
Untuk solusi tambahan terkait masalah ini, lihat Tombol pintasan ... terdeteksi.
Jika kode Python Anda memanggil kode C/C++ menggunakan mekanisme ekstensi Python,
periksa apakah kode ekstensi melepaskan Python Global Interpreter Lock (GIL) di bagian kode yang intens
komputasi yang tidak mengakses status Python. Jika GIL tidak dirilis dalam jangka waktu yang lama, Anda mungkin 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 penafsir Python menggunakan
makro Py_BEGIN_ALLOW_THREADS
dan Py_END_ALLOW_THREADS
.
Untuk mengetahui informasi selengkapnya, lihat Status Thread dan Global Interpreter Lock
dalam dokumentasi Python.
Anda mungkin dapat mengambil stacktrace thread yang memegang GIL pada pekerja Dataflow yang sedang berjalan sebagai berikut:
# SSH to a currently running Dataflow worker VM, for example:
gcloud compute ssh --zone "us-central1-a" "beamapp-someworker-harness-abcd" --project "project-id"
# Find a container running the Python SDK harness.
CONTAINER_ID=`docker ps | grep python | head -1 | awk '{print $1}'`
# Start a shell in the running container.
docker 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. Note which thread holds the GIL.
pip install pystack
pystack remote $PYTHON_PID
# To look up the native (C/C++) frames, use --native-all flag or use gdb:
pystack remote --native-all $PYTHON_PID
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, dalam konfigurasi default, Dataflow menganggap bahwa setiap proses Python yang berjalan di pekerja menggunakan satu inti vCPU secara efisien. Jika kode pipeline mengabaikan 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 cukup resource CPU. Untuk mengatasi masalah ini, kurangi jumlah thread pada pekerja.
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 pesan Pub/Sub lagi dengan penundaan backoff.
Masalah dependensi Java
Class dan library yang tidak kompatibel dapat menyebabkan masalah dependensi Java. Jika pipeline Anda memiliki masalah dependensi Java, salah satu error berikut mungkin terjadi:
NoClassDefFoundError
: Error ini terjadi saat seluruh class tidak tersedia selama runtime.NoSuchMethodError
: Error ini terjadi saat class dalam 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 (diarsir), 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 versi library campuran. Jika Anda menggunakan library pengelolaan dependensi, sebaiknya gunakan BOM Library Google 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 Java versi 9, opsi virtual machine Java (JVM) 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 error-nya 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 informasi selengkapnya, lihat dokumentasi class
DataflowPipelineOptions
.
Error konektor BigQuery
Bagian berikut berisi error konektor BigQuery umum yang mungkin Anda alami dan langkah-langkah untuk menyelesaikan atau memecahkan masalah error tersebut.
quotaExceeded
Saat menggunakan konektor BigQuery untuk menulis ke BigQuery menggunakan insert streaming, throughput tulis lebih rendah dari yang diharapkan, dan error berikut dapat terjadi:
quotaExceeded
Throughput lambat mungkin karena pipeline Anda melebihi kuota streaming insert BigQuery yang tersedia. Jika demikian, 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 insert streaming BigQuery satu GB per detik per project. Untuk informasi selengkapnya tentang peringatan yang terkait dengan penghapusan duplikat pesan otomatis, lihat dokumentasi BigQuery. Untuk meningkatkan kuota streaming insert BigQuery lebih dari satu Gbps, kirimkan permintaan melalui konsol Google Cloud.
Jika Anda tidak melihat error terkait kuota di log pekerja, masalahnya mungkin karena
parameter terkait pengelompokan atau pengelompokan default tidak memberikan paralelisme
yang memadai untuk menskalakan pipeline Anda. 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 untuk Java, sesuaikan numStreamingKeys
agar cocok dengan jumlah maksimum pekerja dan pertimbangkan untuk meningkatkan insertBundleParallelism
guna mengonfigurasi konektor BigQuery untuk 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, error berikut akan terjadi:
rateLimitExceeded
Error ini terjadi jika BigQuery mengirim terlalu banyak permintaan API selama durasi yang singkat. BigQuery memiliki batas kuota jangka pendek.
Pipeline Dataflow Anda mungkin
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 akan 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 lainnya
Bagian berikut berisi error lainnya 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 menampilkan pesan ini. Dataflow akan 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 level 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 level log error peluncuran sistem Dataflow ke WARN atau INFO.
Tidak ada objek tersebut: pipeline.pb
Saat mencantumkan tugas menggunakan
opsi JOB_VIEW_ALL
, error berikut akan terjadi:
No such object: BUCKET_NAME/PATH/pipeline.pb
Error ini dapat terjadi jika Anda menghapus file pipeline.pb
dari file staging
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
terjadi
saat kubelet Kubernetes melewati sinkronisasi pod karena
menunggu runtime penampung diinisialisasi. Skenario ini terjadi
karena berbagai alasan, seperti saat runtime penampung 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 level log error peluncuran sistem Dataflow ke WARN atau INFO.
Rekomendasi
Untuk panduan tentang rekomendasi yang dihasilkan oleh Insight Dataflow, lihat Insight.