调试无法正常工作的 Google 数据流流作业
Debugging a Google Dataflow Streaming Job that does not work expected
我正在学习有关将数据从 Oracle 数据库迁移到云 SQL PostreSQL 实例的 this 教程。
我正在使用 Google 提供的流媒体模板 Datastream to PostgreSQL
在高层次上,这是预期的:
- Datastream 以 Avro 格式回填和更改数据从源 Oracle 数据库导出到指定的 Cloud Bucket 位置
- 这会触发 Dataflow 作业从该云存储位置获取 Avro 文件并插入到 PostgreSQL 实例中。
当 Avro 文件上传到云存储位置时,确实触发了作业,但是当我检查目标 PostgreSQL 数据库时,所需的数据尚未填充。
当我检查作业日志和工作日志时,没有错误日志。当作业被触发时,这些是记录的日志:
StartBundle: 4
Matched 1 files for pattern gs://BUCKETNAME/ora2pg/DEMOAPP_DEMOTABLE/2022/01/11/20/03/7e13ac05aa3921875434e51c0c0c63aaabced31a_oracle-backfill_336860711_1_0.avro
FinishBundle: 5
有人知道问题出在哪里吗?是配置问题吗?如果需要,我会 post 所需的配置。
如果没有,有人可以帮助我如何正确调试这个特定的数据流作业吗?谢谢
编辑 1:
检查管道中步骤的步骤信息时,发现以下内容:
以下是流程中的所有步骤:
第一步 (DatastreamIO) 似乎按预期工作,“输出集合”中的元素计数器数量正确,为 2。
但是在第二步中,Output 集合中找不到这两个元素计数器。在进一步检查中,可以看出元素似乎在以下步骤中被删除(格式为 Postgres DML > 格式为 Postgres DML > 映射):
编辑 2:
这是上述步骤的 Cloud Worker 日志的屏幕截图:
编辑 3:
我单独构建并部署了来自 source 的模板以调试此问题。我发现代码在 DatabaseMigrationUtils.java
:
中达到以下行
return KV.of(jsonString, dmlInfo);
其中 jsonString
变量包含从 .avro
文件读取的数据集。
但是代码并没有超出这个范围,并且似乎突然停止而没有抛出任何错误。
截至 2022 年 1 月 19 日,此答案准确无误。
手动调试此数据流后,我发现问题是由于数据流作业正在寻找一个 schema,其名称与为参数传递的值完全相同databaseName
并且作业没有其他输入参数可以用来传递架构名称。因此,要使这项工作正常进行,表必须 created/imported 放入与数据库同名的模式中。
然而,正如@Iñigo González 所说,这个数据流目前处于测试阶段,似乎有一些错误,因为我 运行 一旦这个问题得到解决就进入另一个问题,这要求我必须更改源代码数据流模板作业本身并为其构建自定义 docker 图像。
我正在学习有关将数据从 Oracle 数据库迁移到云 SQL PostreSQL 实例的 this 教程。
我正在使用 Google 提供的流媒体模板 Datastream to PostgreSQL
在高层次上,这是预期的:
- Datastream 以 Avro 格式回填和更改数据从源 Oracle 数据库导出到指定的 Cloud Bucket 位置
- 这会触发 Dataflow 作业从该云存储位置获取 Avro 文件并插入到 PostgreSQL 实例中。
当 Avro 文件上传到云存储位置时,确实触发了作业,但是当我检查目标 PostgreSQL 数据库时,所需的数据尚未填充。
当我检查作业日志和工作日志时,没有错误日志。当作业被触发时,这些是记录的日志:
StartBundle: 4
Matched 1 files for pattern gs://BUCKETNAME/ora2pg/DEMOAPP_DEMOTABLE/2022/01/11/20/03/7e13ac05aa3921875434e51c0c0c63aaabced31a_oracle-backfill_336860711_1_0.avro
FinishBundle: 5
有人知道问题出在哪里吗?是配置问题吗?如果需要,我会 post 所需的配置。
如果没有,有人可以帮助我如何正确调试这个特定的数据流作业吗?谢谢
编辑 1:
检查管道中步骤的步骤信息时,发现以下内容:
以下是流程中的所有步骤:
第一步 (DatastreamIO) 似乎按预期工作,“输出集合”中的元素计数器数量正确,为 2。
但是在第二步中,Output 集合中找不到这两个元素计数器。在进一步检查中,可以看出元素似乎在以下步骤中被删除(格式为 Postgres DML > 格式为 Postgres DML > 映射):
编辑 2:
这是上述步骤的 Cloud Worker 日志的屏幕截图:
编辑 3:
我单独构建并部署了来自 source 的模板以调试此问题。我发现代码在 DatabaseMigrationUtils.java
:
return KV.of(jsonString, dmlInfo);
其中 jsonString
变量包含从 .avro
文件读取的数据集。
但是代码并没有超出这个范围,并且似乎突然停止而没有抛出任何错误。
截至 2022 年 1 月 19 日,此答案准确无误。
手动调试此数据流后,我发现问题是由于数据流作业正在寻找一个 schema,其名称与为参数传递的值完全相同databaseName
并且作业没有其他输入参数可以用来传递架构名称。因此,要使这项工作正常进行,表必须 created/imported 放入与数据库同名的模式中。
然而,正如@Iñigo González 所说,这个数据流目前处于测试阶段,似乎有一些错误,因为我 运行 一旦这个问题得到解决就进入另一个问题,这要求我必须更改源代码数据流模板作业本身并为其构建自定义 docker 图像。