一、简介
Azkaban失败重试分为两种:自动失败重试和手动失败重试。
作用
- 自动失败重试:当任务第一次执行失败后,可以根据特定时间间隔来进行自动重新执行。
- 手动失败重试:当任务经历过自动失败重试,在某个节点依旧执行失败,排查修复完问题,继续执行任务时,可以跳过执行成功的工作单元,从上次失败的工作单元向下执行。
场景
-
自动失败重试
由于暂时网络波动导致的超时、暂时资源不足导致的超时等原因产生的暂时性故障导致的任务失败。
-
手动失败重试
由于服务器宕机、任务配置出错等原因无法通过自动失败重试解决的问题,当问题修复完之后,需要手动失败重试继续执行任务。
二、自动失败重试案例
需求:如果执行任务失败,需要重试 3 次,重试的时间间隔 10000ms
具体步骤
(1)编译配置流
- 新建demo.flow文件
nodes:
- name: JobA
type: command
config:
command: sh /not_exists.sh
retries: 3
retry.backoff: 10000
command的配置信息是执行根目录下的not_exists.sh文件。
参数说明:
- retries:重试次数
- retry.backoff:重试的时间间隔(单位:毫秒)
(2)将demo.project和demo.flow文件打成zip包
(3)通过Azkaban WEB界面上传到服务器上执行
(4)执行并观察到一次失败+三次重试
(5)可以在 Flow 全局配置中添加任务失败重试配置
- 此时重试配置会应用到所有 Job
config:
retries: 3
retry.backoff: 10000
nodes:
- name: JobA
type: command
config:
command: sh /not_exists.sh
三、手动失败重试案例
需求:JobA=>JobB(依赖于 A)=>JobC=>JobD=>JobE=>JobF。生产环境,任何 Job 都 有可能挂掉,可以根据需求执行想要执行的 Job。
具体步骤
(1)编译配置流
- 新建basis.flow文件
nodes:
- name: JobA
type: command
config:
command: echo "This is JobA."
- name: JobB
type: command
dependsOn:
- JobA
config:
command: echo "This is JobB."
- name: JobC
type: command
dependsOn:
- JobB
config:
command: echo "This is JobC."
- name: JobD
type: command
dependsOn:
- JobC
config:
command: echo "This is JobD."
- name: JobE
type: command
dependsOn:
- JobD
config:
command: echo "This is JobE."
- name: JobF
type: command
dependsOn:
- JobE
config:
command: echo "This is JobF."
(2)将basis.project和basis.flow文件打成zip包
(3)通过Azkaban WEB界面上传到服务器上执行
(4)当某个任务失败时,点击Prepare Execution按钮
(5)选择执行错误的节点,进行设置
说明
Enable 和 Disable 下面都分别有如下参数:
- Parents:该作业的上一个任务
- Ancestors:该作业前的所有任务
- Children:该作业后的一个任务
- Descendents:该作业后的所有任务
- Enable All:所有的任务
设置完成后点击Execute执行任务。