【发布时间】:2017-05-15 09:12:32
【问题描述】:
我有一个在本地运行的 Dataflow 管道。目标是使用 TEXTIO 读取 JSON 文件,创建会话并将其加载到 BigQuery。鉴于结构,我必须在 GCS 中创建一个临时目录,然后使用它将其加载到 BigQuery 中。以前我有一个数据架构错误阻止我加载数据,请参阅here。该问题已解决。
因此,现在当我在本地运行管道时,它以将临时 JSON 换行符分隔文件转储到 GCS 结束。然后 SDK 会为我提供以下信息:
Starting BigQuery load job beam_job_xxxx_00001-1: try 1/3
INFO [main] (BigQueryIO.java:2191) - BigQuery load job failed: beam_job_xxxx_00001-1
...
Exception in thread "main" com.google.cloud.dataflow.sdk.Pipeline$PipelineExecutionException: java.lang.RuntimeException: Failed to create the load job beam_job_xxxx_00001, reached max retries: 3
at com.google.cloud.dataflow.sdk.Pipeline.run(Pipeline.java:187)
at pedesys.Dataflow.main(Dataflow.java:148)
Caused by: java.lang.RuntimeException: Failed to create the load job beam_job_xxxx_00001, reached max retries: 3
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$WriteTables.load(BigQueryIO.java:2198)
at com.google.cloud.dataflow.sdk.io.BigQueryIO$Write$WriteTables.processElement(BigQueryIO.java:2146)
这些错误描述性不强,数据仍未加载到 BigQuery 中。令人费解的是,如果我转到 BigQuery UI 并从 GCS 加载由 SDK 的 Dataflow 管道手动转储的相同临时文件,在同一张表中,它工作得很好。
相关代码部分如下:
PipelineOptions options = PipelineOptionsFactory.create();
options.as(BigQueryOptions.class)
.setTempLocation("gs://test/temp");
Pipeline p = Pipeline.create(options)
...
...
session_windowed_items.apply(ParDo.of(new FormatAsTableRowFn()))
.apply(BigQueryIO.Write
.named("loadJob")
.to("myproject:db.table")
.withSchema(schema)
.withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED)
.withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_APPEND)
);
【问题讨论】:
-
首先要做的是找出错误到底是什么。获取 BigQuery 加载作业 ID (job beam_job_
_00001-1) 并从命令行 ( bq show -j job beam_job_<xxxx>_00001-1) 获取详细信息,或者通过您的浏览器使用 "try it"在页面底部 (cloud.google.com/bigquery/docs/reference/rest/v2/jobs/get)。然后你会知道更多细节。 -
我提交了issues.apache.org/jira/browse/BEAM-1235 以改进错误报告。
-
谢谢@jkff,这将非常有帮助,并且会首先阻止这一切:)
-
@GrahamPolley 非常感谢您提供此信息。我调试了它,但是学到了两件事。由于 BigQuery UI 中有一个“工作历史记录”部分,我认为这是一个详尽的列表,并且由于我的 SDK 工作没有在其中列出,我没有寻找其他工作获取者,也可以将工作获取者链接起来到 UI 作业历史记录。
-
@plumSemPy - 好消息!好的,我现在添加一个答案,以便其他人遇到同样的问题时知道该怎么做。
标签: google-bigquery google-cloud-storage google-cloud-dataflow