当前位置: 首页 > 知识库问答 >
问题:

Dataflow BigQuery插入作业在使用大数据集时立即失败

狄玮
2023-03-14
    null

通常,代码做它应该做的事情。但是,当从API收集一个大数据集(大约500.000个JSON文件)时,bigquery插入作业在使用DataFlow Runner时(它与在我的计算机上执行的DirectRunner一起工作)启动后立即停止(=在一秒钟内),而没有特定的错误消息。当使用较小的数据集时,一切都很好。

数据流日志如下:

2019-04-22 (00:41:29) Executing BigQuery import job "dataflow_job_14675275193414385105". You can check its status with the...
Executing BigQuery import job "dataflow_job_14675275193414385105". You can check its status with the bq tool: "bq show -j --project_id=X dataflow_job_14675275193414385105". 
2019-04-22 (00:41:29) Workflow failed. Causes: S01:Create Dummy Element/Read+Call API+Transform JSON+Write to Bigquery /Wr...
Workflow failed. Causes: S01:Create Dummy Element/Read+Call API+Transform JSON+Write to Bigquery /WriteToBigQuery/NativeWrite failed., A work item was attempted 4 times without success. Each time the worker eventually lost contact with the service. The work item was attempted on: 
beamapp-X-04212005-04211305-sf4k-harness-lqjg,
beamapp-X-04212005-04211305-sf4k-harness-lgg2,
beamapp-X-04212005-04211305-sf4k-harness-qn55,
beamapp-X-04212005-04211305-sf4k-harness-hcsn

按照建议使用bq cli工具来获取有关bq加载作业的更多信息是行不通的。找不到该作业(由于瞬间失败,我怀疑它是否已经创建)。

BigQueryIO目前有以下限制。

您不能将BigQuery write的完成顺序与>Your Pipeline的其他步骤一起进行。

如果您使用的是用于Python的Beam SDK,那么如果您编写了一个非常大的数据集,则可能会出现import size quota>问题。作为一种变通方法,您可以对>数据集进行分区(例如,使用Beam的分区转换)并写入>多个BigQuery表。Beam SDK for Java没有这个>限制,因为它为您划分数据集。

我很感激任何关于如何缩小这个问题的根本原因的提示。

我也想尝试一个分区Fn,但没有找到任何python源代码示例如何将分区的pcollection写入BigQuery表。

共有1个答案

柳项明
2023-03-14

一件可能有助于调试的事情是查看Stackdriver日志。

如果在Google控制台中拉出Dataflow作业,并单击graph面板右上角的logs,那么应该会打开底部的logs面板。日志面板的右上方有一个指向StackDriver的链接。这将为您提供大量关于员工/洗牌/等的日志信息。为了这份特殊的工作。

其中有很多内容,很难筛选出相关的内容,但希望您能够找到比一个工作项尝试了4次都没有成功更有帮助的内容。例如,每个worker偶尔会记录它正在使用的内存,这可以与每个worker的内存量进行比较(基于机器类型),以查看它们是否确实内存不足,或者错误是否发生在其他地方。

 类似资料:
  • 我试图通过设置服务器身份验证将本地文件加载到bigquery。我已经完成了以下步骤 > gcloud auth激活服务帐户命令 使用登录 gcloud身份验证登录 正在尝试执行python脚本以将文件上载到BigQuery 范围= 结果是 但我有足够的权限创建查询作业 我错过了什么?我以为我已经登录了。

  • 问题内容: 我需要将CSV文件中的约180万行插入MySQL数据库。(只有一张桌子) 当前使用Java解析文件并插入每一行。 可以想象,这需要花费几个小时才能运行。(粗略地10) 我之所以没有将其从文件直接传送到db中,是因为在将数据添加到数据库之前必须对其进行操作。 此过程需要由那里的IT经理来运行。因此,我将其设置为一个不错的批处理文件,以便他们在将新的csv文件放入正确的位置后运行。因此,我

  • 我正在创建一个如下所示的JobDetail,

  • 在我的本地设置中,我使用一个简单的H2数据库。“托管”解决方案将有另一个(类似但不相同)数据库。 我需要将最大可能的日期插入到DateTime列中。我试图用 但是,这会导致列中出现-169104626-12-11 20:08:15.9999999。 关于如何插入最长可能日期,是否有可靠的选项?

  • 我已经使用Spring云数据流来控制一些批处理作业。在SCDF中,我定义了一些任务后,它们作为运行状态的作业启动。当我试图停止一项特定的工作时,它并没有立即停止。我发现该工作仍在运行,直到它完成了当前的步骤。 例如,我的作业'abc'有2个步骤A和B。在SCDF中,当步骤A正在执行,而作业'abc'仍在运行时,我停止作业'abc',直到步骤A完成,并且它没有实现步骤B。 那么,有什么方法可以从Sp

  • 我有一个问题与Spring回滚事务。我有一个方法,它创建一个新的订单插入几个表(,,...)。如果在方法完成之前有一个异常,回滚被启动,在中的记录被删除,但记录仍然存在。我想删除在我的数据库中生成的所有记录。字段(主键)是由MySQL 5.6中的自动增量生成的。的主键是两个外键。 用户表: 订单产品表: 我使用的是MySQL 5.6、Hibernate 4和Spring 4。 日志文件相关: 编辑