【问题标题】:Apache Beam / Google dataflow - Error handlingApache Beam / Google 数据流 - 错误处理
【发布时间】:2018-05-14 16:11:28
【问题描述】:

我有一个包含很多步骤(刚刚超过 15 个)的管道。我想在每次DoFn 失败时报告失败。我开始通过TupleTags 使用以下代码实现它:

try {
 ... do stuff ...
 c.output(successTag, ...);
} catch (Exception e) {
 c.output(failureTag, new Failure(...));
}

但是由于我的管道包含很多步骤,这使得管道定义代码很难阅读/维护。

有没有更全球化的方式来实现它?类似于引发在管道级别全局处理的自定义异常?

【问题讨论】:

    标签: java error-handling google-cloud-dataflow apache-beam


    【解决方案1】:

    您正在做的是捕获错误并以不同方式输出它们的正确方法。不过,您在每一步都需要这个。如果您愿意,可以使用 java 模式来重用它。为所有 ParDos 创建一个基类,并在 processElement 中添加异常处理代码。然后在您在 processElement 中调用的单独函数(即 processElementImpl)中实现您的 processElement。

    【讨论】:

    • 谢谢@alex。我不太担心 DoFn 中的异常处理本身,因为这只有几行。我更关心管道中的管道。你认为我别无选择?
    • 是的,我认为您需要在管道的每个步骤中捕获所有异常。我建议使用设计模式来重用代码块。查看移动游戏管道。为 DoFn 创建一个命名类而不是匿名类,imp。在 processElement 中元素您的异常处理逻辑。使用该类作为所有 DoFns 的基类。如果您的管道也使用组合器,您可能需要对组合器执行相同的操作。
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 2020-12-22
    • 1970-01-01
    • 2018-07-20
    • 2019-06-04
    • 2019-09-16
    • 1970-01-01
    • 2021-01-07
    相关资源
    最近更新 更多