azkaban mysql参数_azkaban参数详解

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

1 参数类型综述

azkaban的工作流中的参数可以分为如下几个类型:

Azkaban UI 页面输入参数

环境变量参数

job作业文件中定义的参数

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

工作流运行时产生的系统参数

job的common参数

参数类型与其对应的参数范围如下:

参数类型

作用域

UI 页面输入参数 ,即工作流参数

flow全局有效

工作流ZIP压缩包中的属性文件(.properties结尾)

flow全局有效,zip文件目录以及子目录有效

工作流运行时参数

flow全局有效

环境变量参数

flow全局有效

job的common参数

job内局部有效

JOB文件中定义的参数

job内局部有效

上游作业传递给下游的参数

job内局部有效

2. job 参数简介commom参数

除了type,command,dependencies三个参数外,还有如下一些保留参数可以为每个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配置将会被忽略。

3. job之间的参数传递

先看官网的描述:

Parameter Passing

There is often a desire to pass these parameters to the executing job code. The method of passing these parameters is dependent on the jobtype that is run, but usually Azkaban writes these parameters to a temporary file that is readable by the job.

The path of the file is set in JOB_PROP_FILE environment variable. The format is the same key value pair property files. Certain built-in job types do this automatically for you. The java type, for instance, will invoke your Runnable and given a proper constructor, Azkaban can pass parameters to your code automatically.

Parameter Output

Properties can be exported to be passed to its dependencies. A second environment variable JOB_OUTPUT_PROP_FILE is set by Azkaban. If a job writes a file to that path, Azkaban will read this file and then pass the output to the next jobs in the flow.

The output file should be in json format. Certain built-in job types can handle this automatically, such as the java type.

意思是:JOB_OUTPUT_PROP_FILE和JOB_PROP_FILE都是一个环境变量,指向文件路径。

参数传入:

上游节点把需要输出的值以json的格式写入JOB_OUTPUT_PROP_FILE文件,azkaban以job执行过程中,上游job传递进来的临时参数,运行时参数,项目中配置文件的参数,job定义中参数等 都保存在 ${JOB_PROP_FILE}文件中,保存格式为key=value。执行job的中shell命令时,可以作为参数传递。

参数传出:

一个azkaban job执行结束,可以将一些参数写入到${JOB_OUTPUT_PROP_FILE}文件 中,azkaban会将这些参数传递到下游依赖的的job的参数文件${JOB_PROP_FILE}文件中,供下游job引用。写入到${JOB_OUTPUT_PROP_FILE}文件中参数需要是json格式的,否则会报json解析错。下游节点就可以在JOB_PROP_FILE中看到key-value形式的输出,用${key}的方式使用变量。

举例:

baseflow.flow

#baseflow.flow

nodes:

- name: jobB

type: command

dependsOn:

- jobA

config:

command: sh commandB.sh "${firstName}"

- name: jobA

type: command

config:

command: sh commandA.sh

commandA.sh

#!/bin/bashecho '{ "firstName":"John" , "lastName":"Doe" }' >> ${JOB_OUTPUT_PROP_FILE}

commandB.sh

#!/bin/bashcat ${JOB_PROP_FILE} >> /root/azkaban.txtecho $1 >> /root/azkaban.txt

jobB依赖JobA,jobA执行完成后,会一串json内容到${JOB_OUTPUT_PROP_FILE}指向的文件中,JobA执行完成后,jobB才可以执行,等job执行时,会将jobA输出的内容写入到/root/azkaban.txt,并追加参数中的firstName写入到文件中,注意第一个参数只能通过shell调用的方式来传递。

4 job参数之runtime属性

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 的时区

5 job参数之参数继承

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

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

system.properties

baz.job

myflow/myflow.properties

myflow/myflow2.properties

myflow/foo.job

myflow/bar.job

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

6 job参数之参数替换

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

shared.properties

# shared.properties

replaceparameter=bar

myjob.job

# myjob.job

param1=mytest

foo=${replaceparameter} #${replaceparameter}会替换为bar

param2=${param1} # ${param1} 会被替换成mytest。

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

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

7 shell动态传参

0e3feb66eb49871b4ce295a2dd882c17.png

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

7.1 UI页面输入参数定义

ui_test=test111111111

7.2 在job文件myjob.job指定

##作业定义文件UI输入参数接收:

job_param4=${ui_test}

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

7.3 shell test_azkaban_job.sh 的内容

vim  test_azkaban_job.sh

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

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

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

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

7.4 shell中使用参数的注意事项

在UI页面重新输入运行时参数时,可以覆盖系统默认生成的参数值。运行时参数,和UI输入的参数,都可以认为是全局参数,在整个工作流的作业配置中,都可以通过 ${参数名} 的方式引用使用。

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

在shell中只能直接使用环境变量;

公共参数,运行时系统参数,UI输入参数能只通过shell的脚本参数的方式传递进来。

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

8 reference

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口与回调

【0】README 0.1) 本文描述源代码均 转自 core java volume 1, 旨在理解 接口与回调 概念 ; 【1】接口与回调相关 1.1)回调定义: 回调是一种常见的程序设计模式, 在这种模式中, 可以指出某个…

spring react_使用Spring Cloud Gateway保护React式微服务

spring react朋友不允许朋友写用户身份验证。 厌倦了管理自己的用户? 立即尝试Okta的API和Java SDK。 数分钟之内即可在任何应用程序中对用户进行身份验证,管理和保护。 所以你想完全React,是吗? 大! React式编程是使…

mysql断电同步不起作用_mysql主从同步因断电产生的不能同步问题

偶尔因为断电导致mysql slave 出现复制错误“Could not parse relay log event entry”Could not parse relay log event entry. The possible reasons are: the masters binary log is corrupted (you can check this by running mysqlbinlog on the binary log), the slaves …

图论——Dijkstra+prim算法涉及到的优先队列(二叉堆)

【0】README 0.1)为什么有这篇文章?因为 Dijkstra算法的优先队列实现 涉及到了一种新的数据结构,即优先队列(二叉堆)的操作需要更改以适应这种新的数据结构,我们暂且吧它定义为Distance, 而不是…

cucumber测试_如何在Cucumber中进行后端测试

cucumber测试Cucumber是一种规范语言的执行框架。 它并不是要成为测试语言,而是用于创建测试自动化。 Cucumber最适合出现一些实际参与者互动并取得某种成果的情况。 当可以从用户的角度编写它时,它特别有用。 Given Sarah is a premium club member W…

linux mysql删除密码忘记了_linux下忘记mysql密码的几种找回方法(推荐)

今天我们主要是讲一下关于linux忘记mysql密码处理方法,下面提供了5种linux忘记mysql密码找回方法哦。方法一(先进入root权限):# /etc/init.d/mysql stop# mysqld_safe --usermysql --skip-grant-tables --skip-networking &# mysql -u rootmysql>…

Dijkstra 算法——计算有权最短路径(边有权值)

【0】README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在理解 Dijkstra 的思想并用源代码加以实现; 0.2)最短路径算法的基础知识,参见 http://blog.csdn.net/pacosonswjtu/article/detail…

spring使用自定义注解_用Spring组成自定义注释

spring使用自定义注解Java批注在2004年随Java 5一起引入,是一种将元数据添加到Java源代码中的方法。 如今,许多主要框架(如Spring或Hibernate)都严重依赖注释。 在本文中,我们将介绍一个非常有用的Spring功能&#xf…

打印结果和调试结果不一样(C语言)

【0】README 0.1)本文旨在阐述 个人的debug经历,遇到的各种debug 奇葩问题, 说是奇葩,其实也是自己 不小心或者说是编程习惯不好; 【1】debug和running的运行结果不一致(乍眼一看,你肯定醉了&a…

mysql add default_MySQL中create table DEFAULT 用法

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)][table_options] [select_statement]TEMPORARY:该关键字表示用create table新建的表为临时表,此表在当前会话结束后将自动消失。临时表主要被应用于存储过程中,…

jakarta ee_Jakarta EE贡献–入门

jakarta ee您是否有兴趣帮助Jakarta EE向前发展? 我也是。我想提供一些详细信息,以帮助有兴趣入门的人。 第1步: 开始捐款的第一步是签署Eclipse Foundation Committer and Contributor Agreement(ECA): …

最小生成树基础

【0】README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 review 最小生成树的基础知识; 0.2)了解本文的内容是 分析 Prim算法(普利姆算法)和 Kruskal算法(克鲁斯卡…

mysql dump gtid_mysqldump命令详解 Part 3- 备份全库

前面说了MySQL Linux平台和Windows平台的安装下面开始是MySQL的一些学习笔记前面我们说了如果构造数据这节开始说MySQL 的备份环境为MySQL 5.7.25在解释命令之前我们先弄清楚数据库中有哪些对象上一节我们建立了数据库并建立相关的对象数据库表存储过程函数触发器事件这节讲一些…

apache lucene_Apache Lucene中的并发查询执行

apache luceneApache Lucene是一个出色的并发纯Java搜索引擎,如果您愿意,它可以轻松地使服务器上的可用CPU或IO资源饱和。 “典型” Lucene应用程序的并发模型在搜索时每个查询一个线程,但是您是否知道Lucene也可以使用多个线程同时执行一个查…

最小生成树——Prim(普利姆)算法

【0】README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解Prim算法的idea 并用 源代码加以实现; 0.2)最小生成树的基础知识,参见 http://blog.csdn.net/pacosonswjtu/article/details…

mysql grant usage on_grant 权限 on 数据库对象 to 用户

grant 权限 on 数据库对象 to 用户一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。grant select on testdb.* to common_user’%’grant insert on testdb.* to common_user’%’grant update on testdb.* to common_user’%’grant del…

openjdk8 项目结构_OpenJDK织机和结构化并发

openjdk8 项目结构Project Loom是Hotspot Group赞助的项目之一,旨在向JAVA世界提供高吞吐量和轻量级的并发模型。 在撰写本文时,Loom项目仍在积极开发中,其API可能会更改。 为什么要织机? 每个新项目可能会出现的第一个问题是为什…

mysql连库串_数据库连接串整理 - osc_ac5z111b的个人空间 - OSCHINA - 中文开源技术交流社区...

常用JDBC驱动与连接字符串MySQLdriver:com.mysql.jdbc.Driverurl:jdbc:mysql://localhost:3306/mydbMySQL url格式:jdbc:mysql://[host:port]/[database][?参数名1][参数值1][&参数名2][参数值2]…参数名称参数说明缺省值最低版本要求us…

最小生成树——Kruskal(克鲁斯卡尔)算法

【0】README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 Kruskal(克鲁斯卡尔)算法 的idea 并用 源代码加以实现; 0.2)最小生成树的基础知识,参见 http://blo…

java 正则表达式 开头_如何在Java中修复表达式的非法开头

java 正则表达式 开头您是否遇到过这个令人难以置信的错误,想知道如何解决它? 让我们仔细阅读一下,研究如何解决表达式Java非法开头错误。 这是一个动态错误,这意味着编译器会发现某些不符合Java编程规则或语法的内容。 初学者大…