Apache Beam CloudBigtableIO 读/写错误处理

Posted

技术标签:

【中文标题】Apache Beam CloudBigtableIO 读/写错误处理【英文标题】:Apache Beam CloudBigtableIO read/write error handling 【发布时间】:2020-06-15 02:11:17 【问题描述】:

我们有一个基于 Java 的数据流管道,它从 Bigtable 读取数据,经过一些处理后将数据写回 Bigtable。我们将 CloudBigtableIO 用于这些目的。

我正在尝试解决 CloudBigtableIO 中的故障处理问题。我还没有找到任何关于如何在 CloudBigtableIO 内部和外部处理错误的参考/文档。

    CloudBigtableIO 在 BigtableOptionsFactory 中有一堆选项,它们指定超时、重试的 grpc 代码、重试限制。

    google.bigtable.grpc.retry.max.scan.timeout.retries - 这是扫描操作的重试限制还是它也包括变异操作?如果这只是为了扫描,那么对 Mutation 操作进行了多少次重试?它是可配置的吗? google.bigtable.grpc.retry.codes - 这些代码是否启用扫描、变异操作的重试?

    自定义选项只会启用重试,是否会出现 CloudBigtableIO 读取部分数据而不是请求的数据但不会导致管道失败的情况?

    当改变几百万条记录时,我认为我们可能会得到超出重试限制的错误,这样的突变会发生什么?他们只是失败了吗?我们如何在管道中处理它们? BigQueryIO 具有收集故障并提供一种通过侧输出检索故障的功能,为什么 CloudBigtableIO 没有这样的功能?

    我们在编写突变时偶尔会遇到 DEADLINE_EXCEEDED 错误,但日志不清楚突变是重试成功还是重试已用尽,我确实看到了 RetriesExhaustedWithDetailsException 但如果我们无法处理失败,那将毫无用处

    如果前一步和 CloudBigtableIO 写入融合,这些故障是否会返回到数据流管道中的前一步?启用批量突变后,如何将故障退回到前面的步骤并不清楚。

【问题讨论】:

您可以尝试将您的问题发送到 user@beam.apache.org 以获得更好的答案。 【参考方案1】:

对于问题 1,我相信 google.bigtable.mutate.rpc.timeout.ms 将对应于变异操作,尽管 Javadoc 中指出该功能是实验性的。 google.bigtable.grpc.retry.codes 允许您添加其他代码以重试默认情况下未设置(默认包括DEADLINE_EXCEEDEDUNAVAILABLEABORTEDUNAUTHENTICATED )

您可以在此处查看为突变超时设置的配置示例:https://github.com/googleapis/java-bigtable-hbase/blob/master/bigtable-client-core-parent/bigtable-hbase/src/test/java/com/google/cloud/bigtable/hbase/TestBigtableOptionsFactory.java#L169

【讨论】:

google.bigtable.mutate.rpc.timeout.ms 用于超时,我想自定义失败重试次数。【参考方案2】:

google.bigtable.grpc.retry.max.scan.timeout.retries:

仅用于设置SCAN timeout.后重试的次数

关于变异操作的重试

这就是Bigtable handles operations failures。

关于处理管道中的错误的问题

我看到您已经知道"RetriesExhaustedWithDetailsException"。请记住,为了检索每个失败请求的详细异常,您必须调用“RetriesExhaustedWithDetailsException#getCauses()”

至于失败,Google documentation states:

" 追加和增量操作不适用于可重试批处理 编程模型,包括 Hadoop 和 Cloud Dataflow,并且是 因此不支持对 CloudBigtableIO.writeToTable 的输入。 数据流包或一组输入可能会失败,即使其中一些 输入已被处理。在这些情况下,整个捆绑包将 被重试,并且之前完成的追加和增量操作 会执行第二次,导致数据不正确。”

您可能认为有帮助的一些文档:

Cloud Bigtable Client Libraries Source code for Cloud Bigtable HBase client for Java Sample code for use with Cloud BigTable

希望以上内容对您有所帮助。


【讨论】:

以上是关于Apache Beam CloudBigtableIO 读/写错误处理的主要内容,如果未能解决你的问题,请参考以下文章

在 mac zsh 终端上安装 apache-beam[gcp] 时出错 - “zsh: no match found: apache-beam[gcp]”

如何运行 Apache Beam 集成测试?

Python 上的 Apache Beam 将 beam.Map 调用相乘

Apache Beam - 跳过管道步骤

什么是 Apache Beam? [关闭]

apache beam ElasticSearchIO 遇到异常后job中断执行 自己定制beam IO