【问题标题】:What is the correct way to get the result of Pipeline?获得管道结果的正确方法是什么?
【发布时间】:2016-02-15 04:18:15
【问题描述】:

我处理管道结果的代码如下所示(为简洁起见,有些代码被剪掉了):

PipelineResult result = pipeline.run();
switch (result.getState()) {
      case DONE: {
        handleDone();
        break;
      }
      case FAILED: {
        handleFailed();
        break;
      }
      case CANCELLED: {
        handleCancelled();
        break;   
      }
      case UNKNOWN:
      case RUNNING:
      case STOPPED: {
        handleUnknownRunningStopped();
        break;      
      }
      default: {
        assert false;
        throw new IllegalStateException();
     }
}

但是,我注意到不是返回枚举 PipelineResult.State 的值,例如FAILEDCANCELLED,抛出异常:

  1. 对于失败的作业,会抛出 DataflowJobExecutionException
  2. 对于取消的作业,会抛出 DataflowJobCancelledException

处理管道结果的正确方法是什么(以编程方式)?

【问题讨论】:

    标签: api jobs pipeline google-cloud-dataflow


    【解决方案1】:

    两个 DataflowPipelineRunners 都返回 PipelineResult,允许您查询管道的当前状态。 DataflowPipelineRunner 在作业提交后立即返回一个 PipelineResult,但 BlockingDataflowPipelineRunner 在作业完成之前不会返回它。

    此外,如果作业未成功完成,BlockingDataflowPipeline 运行器会引发异常 - 由于您指定了阻塞 run(),因此我们假设您想知道是否出现问题。因此,如果您对 Blocking Runner 进行了硬编码,那么依赖异常是一种处理故障的简单方法。

    请注意,您编写的代码 sn-p 使用更通用的 PipelineResult 选项,但不适用于非阻塞运行器,因为它会在作业仍在运行时返回结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 2023-01-13
      • 2020-05-01
      相关资源
      最近更新 更多