如果一项作业失败,则受管Dataproc群集将终止所有作业

时间:2019-11-07 12:26:06

标签: google-cloud-dataproc

我正在尝试在托管DataProc集群上运行Pig作业。我有几个并行运行的独立养猪工作。我为每个作业都设置了continueOnFailure。现在,如果一项作业失败,则所有其他作业将停止并终止集群。我不希望那样,我希望失败的作业终止,而其他作业按预期运行。

我要通过其实例化的yaml文件如下:

jobs:
- pigJob:
    continueOnFailure: true
    queryList:
      queries:
      - sh pqr.sh
  stepId: run-pig-pqr
- pigJob:
    continueOnFailure: true
    queryList:
      queries:
      - sh abc.sh
  stepId: run-pig-abc

placement:
  managedCluster:
    clusterName: batch-job
    config:
      gceClusterConfig:
        zoneUri: asia-south1-a
      masterConfig:
        machineTypeUri: n1-standard-8
        diskConfig:
          bootDiskSizeGb: 50
      workerConfig:
        machineTypeUri: n2-highcpu-64
        numInstances: 2
        diskConfig:
          bootDiskSizeGb: 50
      softwareConfig:
        imageVersion: 1.4-ubuntu18

我正在使用命令

创建集群
gcloud dataproc workflow-templates instantiate-from-file --file $file-name.yaml

我在yaml中提供了任何错误的配置?

2 个答案:

答案 0 :(得分:1)

在这种情况下可能不清楚的一点是,continueOnFailure参数专门是PigJob参数,而不是Dataproc Workflow参数。例如,您也会在HiveJob上看到它,但在工作流中看不到其他Dataproc作业类型。因此,在这种情况下,continueOnFailure1仅适用于在单个 PigJob中运行的单独命令的行为,而不是设置多个PigJob在共享Dataproc工作流中时的行为方式的设置

不幸的是,目前,Dataproc工作流不支持用于指定当工作流中的单个作业失败时是否继续工作流其余部分的控件。相反,当前行为是假设所有作业均有望成功,否则工作流将中止。

正如您所指出的那样,这显然不是支持Workflows所有用例的完整故事。如评论中所述,这是一个很好的功能请求,可以提交到https://cloud.google.com/support/docs/issue-trackers

同时,如果您不想手动管理多个作业以了解何时在最后一个作业完成后何时拆除群集,则使用Dataproc Cluster Scheduled Deletion可能是最接近您想要的作业。虽然您必须在提交作业之前同步等待集群创建完成,但是您可以在作业上使用--async,而不必在提交所有作业之前对每个作业进行轮询:

gcloud dataproc clusters create --max-idle=10m ${CLUSTER_NAME}
gcloud dataproc jobs submit pig --async --cluster ${CLUSTER_NAME} -e 'sh pqr.sh' 
gcloud dataproc jobs submit pig --async --cluster ${CLUSTER_NAME} -e 'sh abc.sh'

这只有在您的工作运行时间比10分钟的最小空闲TTL长得多的情况下才会真正有效。

答案 1 :(得分:0)

continueOnFailure标志似乎在Pig中可以正常工作:对于某些类型的故障,解释器将忽略故障并继续进行。但是,pig驱动程序仍然会以非零错误代码退出,这将导致Dataproc作业失败,然后Workflow将取消所有作业并删除集群。

由于您使用的是Shell命令,因此可以捕获退出并用代码0替换它:

function finish {
    exit 0
}
trap finish ERR

我也建议您在此处提出功能请求,以添加更好的切换开关来处理错误,这是工作流的一部分: https://issuetracker.google.com/issues/new?component=187133&template=0