BigQuery 无法插入作业。工作流失败

Posted

技术标签:

【中文标题】BigQuery 无法插入作业。工作流失败【英文标题】:BigQuery unable to insert job. Workflow failed 【发布时间】:2018-09-13 08:55:43 【问题描述】:

我需要通过 Dataflow 和 Beam 将批处理作业从 GCS 运行到 BigQuery。我所有的文件都是具有相同架构的 avro。 我创建了一个数据流 Java 应用程序,它在一组较小的数据(~1gb,大约 5 个文件)上成功。 但是当我尝试在更大的数据集(>500gb,>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 的加载。

堆栈驱动程序说处理卡在步骤 ....for 10m00s... 和

Request failed with code 409, performed 0 retries due to IOExceptions, performed 0 retries due to unsuccessful status codes.....

我查找了 409 错误代码,说明我可能有一个现有的作业、数据集或表。我已删除所有表并重新运行应用程序,但仍显示相同的错误消息。

我目前限制在 65 名工人,我让他们使用 n1-standard-4 cpus。

我相信还有其他方法可以将数据从 gcs 移动到 bq,但我需要演示数据流。

【问题讨论】:

您是否在 BigQuery 端使用目标表?你为创建和写指定了什么样的配置? 目标表已设置。如果我使用较小的批次(~1gb)运行数据流,它会加载得很好。处置是: .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED) .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)); 很奇怪……你能不能先用大数据集运行作业,然后再用小数据集运行它? 我在加载大数据时也遇到了同样的错误。你能解决这个问题吗?请让我知道,我仍在寻找解决方案。谢谢! @andrew 远射,但您是否可能在表名中包含受限字符?我收到了同样模糊的错误消息,结果是在我的表名中包含连字符。 【参考方案1】:

将@DeaconDesperado 的评论发布为社区 wiki,他们遇到了同样的错误,他们所做的是删除表名和错误消失了。

【讨论】:

【参考方案2】:

"java.lang.RuntimeException: 无法使用前缀 beam_load_csvtobigqueryxxxxxxxxxxxxxx 创建作业,达到最大重试次数:3,最后失败的作业:null。 在 org.apache.beam.sdk.io.gcp.bigquery.BigQueryHelpers$PendingJob.runJob(BigQueryHelpers.java:198)....."

可能的原因之一可能是权限问题。确保与 BigQuery 交互的用户帐户在预定义角色“*BigQuery User”中具有“bigquery.jobs.create”权限

【讨论】:

【参考方案3】:

我在使用“roles/bigquery.jobUser”、“roles/bigquery.dataViewer”和“roles/bigquery.user”时遇到了同样的问题。但只有在授予“roles/bigquery.admin”时,问题才得到解决。

【讨论】:

以上是关于BigQuery 无法插入作业。工作流失败的主要内容,如果未能解决你的问题,请参考以下文章

在使用 BigQuery API 的 python 插入作业期间登录失败

BigQuery 加载作业失败 - 无法访问 GCS 文件

BigQuery 数据传输作业因内部错误而失败(错误:80038528)

数据流作业失败并尝试在 Bigquery 上创建 temp_dataset

数据流:我可以使用批处理作业连续写/流写入BigQuery吗?

将日志插入 BigQuery 表的 Bash 脚本