【问题标题】:Debugging a Google Dataflow Streaming Job that does not work expected调试无法正常工作的 Google 数据流流作业
【发布时间】:2022-01-27 03:14:10
【问题描述】:

我正在关注 this 关于将数据从 oracle 数据库迁移到 Cloud SQL PostreSQL 实例的教程。

我正在使用 Google 提供的流媒体模板 Datastream to PostgreSQL

在高层次上,这是预期的:

  1. 以 Avro 格式回填的数据流导出并将更改的数据从源 Oracle 数据库中导出到指定的云存储桶位置
  2. 这会触发 Dataflow 作业从该云存储位置提取 Avro 文件并插入到 PostgreSQL 实例中。

当 Avro 文件上传到 Cloud Storage 位置时,确实会触发作业,但是当我检查目标 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

有谁知道问题出在哪里?是配置问题吗?如果需要,我会发布所需的配置。

如果没有,有人可以帮助我如何正确调试这个特定的 Dataflow 作业吗?谢谢

编辑 1:

在检查管道中步骤的步骤信息时,发现以下内容:

以下是管道中的所有步骤:

第一步(DatastreamIO)似乎按预期工作,“输出集合”中元素计数器的正确数量为 2。

但是在第二步中,这两个元素计数器在输出集合中找不到。进一步检查,可以看出元素似乎在以下步骤中被删除(格式化为 Postgres DML > 格式化为 Postgres DML > 映射):

编辑 2:

这是上述步骤的 Cloud Worker 日志的屏幕截图:

编辑 3:

为了调试这个问题,我从source 单独构建和部署了模板。我发现代码在DatabaseMigrationUtils.java 中一直到以下行:

return KV.of(jsonString, dmlInfo);

其中jsonString 变量包含从.avro 文件中读取的数据集。

但是代码并没有超出这个范围,并且似乎突然停止而没有抛出任何错误。

【问题讨论】:

  • 您是否使用 Google Cloud Console 检查作业状态?例如,您可以检查元素计数器以确定是否为某个步骤读取了任何数据。
  • 嗨@chamikara,根据您的建议,我发现“地图”步骤中的流程中断了。您能否检查问题中的编辑 1。我附上了一些截图。知道如何调试问题吗?谢谢
  • 您在 Cloud Worker 日志中看到该步骤的任何错误吗?
  • @chamikara 此步骤的 Cloud Worker 日志中没有此特定步骤的日志。请在编辑 2 中查看随附的屏幕截图
  • 您使用的数据流目前处于测试阶段。请向 Google 支持开一张票,他们会立即完善服务,并且非常愿意提供帮助。

标签: postgresql google-cloud-platform google-cloud-dataflow


【解决方案1】:

截至 2022 年 1 月 19 日,此答案是准确的。

在手动调试此数据流时,我发现问题是由于数据流作业正在寻找与传递给参数 databaseName 的值完全相同的名称的 schema 并且存在没有其他输入参数可以用于传递模式名称的作业。因此,要使这项工作正常工作,必须将表创建/导入到与数据库同名的模式中。

但是,正如@Iñigo González 所说,此数据流目前处于测试阶段,并且似乎存在一些错误,因为我在解决此问题后遇到了另一个问题,这需要我更改数据流模板作业本身的源代码,并且为它构建一个自定义的 docker 镜像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多