azkaban作业参数使用介绍

参数传递是调度系统工作流运行时非常重要的一部分,工作流的执行,单个作业的执行,多个工作流之间的依赖执行,历史任务重算,都涉及参数传递和同步。

azkaban的工作流中的参数可以分为如下几个类型:azkaban UI 页面输入参数, 环境变量参数,

job作业文件中定义的参数,工作流的用户定义的属性文件,上游作业传递给下游的参数,

工作流运行时产生的系统参数,job的common参数等。

参数的作业范围分类,对当前job有效局部有效,对整个工作流全局有效。

参数类型 参数的作用域
UI 页面输入参数 ,即工作流参数 flow全局有效
工作流ZIP压缩包中的属性文件 flow全局有效,zip文件目录以及子目录有效
工作流运行时参数 flow全局有效
环境变量参数 flow全局有效
job的common参数 job内局部有效
JOB文件中定义的参数 job内局部有效
上游作业传递给下游的参数 job内局部有效

全局参数,在整个工作流的作业文件配置中,都可以通过 ${参数名} 的方式引用使用。

1. Job配置中的参数

  • common参数配置

除了type,command,decpendencies三个参数外,还有如下一些保留参数可以为每个job配置

参数 说明
retries 失败的job的自动重试的次数
retry.backoff 重试的间隔(毫秒)
working.dir 指定命令被调用的目录。默认的working目录是executions/${execution_ID}目录
env.property 指定在命令执行前需设置的环境变量。Property定义环境变量的名称,
因此 env.VAR_NAME=VALUE就创建了一个$VAR_NAME环境变量
并且指定了它的VALUE
failure.emails job失败时发送的邮箱,用逗号隔开
success.emails job成功时发送的邮箱,用逗号隔开
notify.emails job成功或失败都发送的邮箱,用逗号隔开

一个flow的email属性,只会取最后一个job的配置,其他的job的email配置将会被忽略。

用户也可以自用一下参数,用于接收外部或者上游job的参数,也可用于传递给shell脚本等。

  • Runtime 属性

这些属性在job运行期间自动被添加.

参数 说明
azkaban.job.attempt job重试次数,从0开始增加
azkaban.job.id 运行的job name
azkaban.flow.flowid 运行的job的flow name
azkaban.flow.execid flow的执行id
azkaban.flow.projectid 工程id
azkaban.flow.projectversion project上传的版本
azkaban.flow.uuid flow uuid
azkaban.flow.start.timestamp flow start的时间戳
azkaban.flow.start.year flow start的年份
azkaban.flow.start.month flow start 的月份
azkaban.flow.start.day flow start 的天
azkaban.flow.start.hour flow start的小时
azkaban.flow.start.minute start 分钟
azkaban.flow.start.second start 秒
azkaban.flow.start.millseconds start的毫秒
azkaban.flow.start.timezone start 的时区
  • 参数继承

    后缀名为.properties的文件将会作为参数文件加载,并且为flow中每个job所共享,属性文件通过目录的分层结构继承

    比如,在zip包中有以下结构

    system.properties
    baz.job
    myflow/
    myflow.properties
    myflow2.properties
    foo.job
    bar.job

    system.properties是全局的属性,将会被baz.job和myflow目录下的foo.job和bar.job使用,但是baz.job不会继承myflow.properties和myflow2.properties的属性,因为是它的下层.

  • 参数替换

    azkaban支持参数替换;替换参数样式: azkaban会替换{}中的参数。无论${parameterName} 在job file中或者在参数文件中或者运行时参数发现,都可以被替换为对应的值。

    # shared.properties
    replaceparameter=bar
    # myjob.job
    param1=mytest
    foo=${replaceparameter} #${replaceparameter}会替换为bar
    param2=${param1} # ${param1} 会被替换成mytest。

前面这个例子,在myjob 作业运行前,foo 会被赋值为bar , param2会被赋值为mytest.

参数名不能有空格,标点符号等。

  • Parameter Passing:参数传递

    azkaban以job执行过程中,传递进来的临时参数,运行时参数,项目中配置文件的参数,job定义中参数等 都保存在 ${JOB_PROP_FILE}文件中,保存格式为key=value。执行job的中shell命令时,可以作为参数传递。

    JOB_PROP_FILE 是一个环境变量参数。

  • Parameter Output:参数输出

    一个任务运行结束,可以将一些参数写入到${JOB_OUTPUT_PROP_FILE}文件 中,azkaban会将这些参数传递到下游依赖的的job的参数文件${JOB_PROP_FILE}文件中,供下游job引用。

    写如到${JOB_OUTPUT_PROP_FILE}文件中参数需要是json格式的,否则会报json解析错。

    JOB_OUTPUT_PROP_FILE也是一个环境变量参数。

2. shell类型的job的参数传递

azkaban中的shell 作业,如何接收从webUI传递的参数?

step1: UI页面输入参数定义:

ui_test=test111111111

step2:在job文件myjob.job指定:

##作业定义文件UI输入参数接收:
job_param4=${ui_test} ##作业定义文件脚本命令行引用UI输入参数:
sh test_azkaban_job.sh "${job_param4}"

step3:shell test_azkaban_job.sh 的内容

vi test_azkaban_job.sh

echo "inputparamter:$1"  #接收job文件中传递的参数。

问题:在页面手动执行前面的job时,如果UI参数ui_test在job执行没有输入,会执行失败。异常信息如下:

hello ERROR - Failed to build job executor for job helloCould not find variable substitution for variable(s) [param4->ui_test ]

在定时调度任务指定时,需要指定工作流参数flowParameters :ui_test,避免该错误。

运行时参数:在UI页面重新输入运行时参数时,可以覆盖系统默认生成的参数值。

运行时参数,和UI输入的参数,都可以认为是全局参数,在整个工作流的作业

配置中,都可以通过 ${参数名} 的方式引用使用。

在shell 中直接引用 公共参数,运行时系统参数,UI输入参数,是无效的。

在shell中只能直接使用环境变量;公共参数,运行时系统参数,UI输入参数能只通过shell的脚本参数的方式传递

进来。

job文件中定义的环境变量参数,可以在shell脚本中直接引用,但只对当前job有效。

azkaban作业参数使用介绍的更多相关文章

  1. JQuery中的AJAX参数详细介绍

    Jquery中AJAX参数详细介绍 参数名 类型 描述 url String    (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方 ...

  2. MySQL参数log_bin_trust_function_creators介绍

    MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...

  3. loadrunner脚本优化-ParameterList参数类型介绍

    脚本优化-Parameter List参数类型介绍 by:授客 QQ:1033553122 篇幅问题,这里采用网盘下载的方式和大家分享: 百度网盘分享: 链接: http://pan.baidu.co ...

  4. MySQL参数log_bin_trust_function_creators介绍-存储过程和复制

    MySQL的有个参数log_bin_trust_function_creators,官方文档对这个参数的介绍.解释如下所示: log_bin_trust_function_creators Comma ...

  5. Data Guard相关参数学习介绍

    LOG_ARCHIVE_DEST_n 参数属性介绍 该参数的n在11g中为1到31,下列为参数的属性值: u  AFFIRM and NOAFFIRM u  ALTERNATE (not suppor ...

  6. Xcopy命令参数使用介绍

    DOS批处理命令,永远是不朽的命令,不仅功能强大,同时,速度也是最快的!但是,很多新手学习计算机,都已经遗忘了本不该忘记的批处理命令 XCOPY是COPY的扩展,可以把指定的目录连文件和目录结构一并拷 ...

  7. MS SQL批量生成作业脚本方法介绍总结

    在迁移或升级SQL Server数据库服务器时,很多场景下我们不能还原msdb,所以我们必须手工迁移SQL Server相关作业.如果手工生成每一个作业的脚本话,费时又费力,其实SQL Server中 ...

  8. qt configure参数配置介绍

    ======================================全文是按照./configure -help来翻译的==================================== ...

  9. ShellExecute 启动外部程序 参数详细介绍

    ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件.打开一个目录.打印一个文件等等),并对外部程序有一定的控制. 目录 1基本简介 2原型参数 3返回值 4例子 5特殊用法 ...

随机推荐

  1. Android热修复(HotFix)实战

    线上的BUG一直是程序员头疼的问题.有时候仅仅是因为几行的代码,就能让你的用户损失严重.谷歌在Android Studio 加入了Insttan Run 机制.通过Apk动态加载的技术实现了应用非安装 ...

  2. .net 委托的用法

    定义了两个委托 //Func有返回值:Action无返回值.两个委托 Func<int,int> f= a =>a+1;//参数,返回值: int reslut=f(5);//6

  3. C#aspx页面前台使用<%=%>无法取到后台的值

    检查是不是有拼接问题,正常public和protected修饰的字段或属性均可使用<%=%>.另外,加载(Page_Load)时有没有给它们赋初始值? 答 1)前台页面只能调用本后置代码的 ...

  4. scrollLeft滚动(用animate替代)

    原: let checkedLeft1 = $('#dateBox').find('.checked').position().left let checkedLeft2 = $('#dateBox' ...

  5. Selenium原理初步--Android自动化测试学习历程

    章节:自动化基础篇——Selenium原理初步(第五讲) 注:其实所有的东西都是应该先去用,但是工具基本都一样,底层都是用的最基础的内容实现的,测试应该做的是: (1)熟练使用工具,了解各个工具的利弊 ...

  6. php iframe 上传文件

    我们通过动态的创建iframe,修改form的target,来实现无跳转的文件上传.   具体的实现步骤 1.捕捉表单提交事件 2.创建一个iframe 3.修改表单的target,指向iframe ...

  7. 【转】MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用

    按照MEF的约定,任何一个类或者是接口的实现都可以通过[System.ComponentModel.Composition.ExportAttribute] 特性将其定义为组合部件(Composabl ...

  8. 构建openssl debug版

    一.简介 作为一种安全协议,openssl囊括了主要的密码算法.常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其它目的使用. 参考: http://www.linuxidc ...

  9. servlet 中 service ,doGet , doPost 关系

    web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2 ...

  10. part1:5Linux命令详解

    1.Linux命令介绍 Linux命令是对Linux系统进行管理的命令.对于Linux系统来说,无论是中央处理器.内存.磁盘驱动器.键盘.鼠标还是用户等都是文件.Linux系统管理的命令是它正常运行的 ...