我需要通过 Dataflow 和 Beam 运行从 GCS 到 BigQuery 的批处理作业。我的所有文件都是具有相同架构的 avro。
我创建了一个数据流java应用程序,它在较小的数据集(~1gb,大约5个文件)上取得了成功。
但是当我尝试在更大的数据集(> 500 GB,> 1000 个文件)上运行它时,我收到一条错误消息
java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: java.lang.RuntimeException: Failed to create load job with id prefix 1b83679a4f5d48c5b45ff20b2b822728_6e48345728d4da6cb51353f0dc550c1b_00001_00000, reached max retries: 3, last failed load job: ...
重试 3 次后,它终止:
Workflow failed. Causes: S57....... A work item was attempted 4 times without success....
此步骤是加载到 BigQuery。
堆栈驱动程序表示处理卡在步骤中......持续了 10 毫秒......并且
Request failed with code 409, performed 0 retries due to IOExceptions, performed 0 retries due to unsuccessful status codes.....
我查找了 409 错误代码,指出我可能有现有作业、数据集或表。我已删除所有表并重新运行应用程序,但它仍然显示相同的错误消息。
我目前限制 65 名工作人员,并且让他们使用 n1-standard-4 cpu。
我相信还有其他方法可以将数据从 gcs 移动到 bq,但我需要演示数据流。