获取Pipeline结果的正确方法是什么?

时间:2016-02-15 04:18:15

标签: api jobs pipeline google-cloud-dataflow

我处理管道结果的代码看起来像这样(为简洁起见,有些代码剪掉了):

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
  3. 处理管道结果的正确方法(以编程方式)是什么?

1 个答案:

答案 0 :(得分:3)

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

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

请注意,您编写的代码段使用了更常规的PipelineResult选项,但不能与非阻塞运行程序一起使用,因为这将在作业仍在运行时返回结果。