Azkaban Flow 2.0

都9102年,还用properties配置文件吗?非也非也。

Azkaban flow 2.0使用yaml进行作业配置:

上传的文件夹中,可以包含多个project 的yml配置文件。

Flow YAML File

关于Flow的文件有如下定义:

  • 每个Flow对应一个yml文件.
  • Flow的名称以yml文件的名称, 如: my-flow-name.flow.
  • 包含所有的执行DAG节点.
  • 每个执行节点可以是job或者是flow.
  • 每个执行节点可以有一下属性:name, type, config, dependsOn 和节点.
  • Node dependencies are specified by listing the parent nodes in dependsOn list.
  • 包含其他的flow配置、.
  • 所有的properties配置文件,将会迁移到YAML文件里面

Demo:acceptance-test.flow 

1--- 2config: 3 user.to.proxy: azktest 4 param.hadoopOutData: /tmp/wordcounthadoopout 5 param.inData: /tmp/wordcountpigin 6 param.outData: /tmp/wordcountpigout 7 8# This section defines the list of jobs 9# A node can be a job or a flow 10# In this example, all nodes are jobs 11nodes: 12 # Job definition 13 # The job definition is like a YAMLified version of properties file 14 # with one major difference. All custom properties are now clubbed together 15 # in a config section in the definition. 16 # The first line describes the name of the job 17 - name: AZTest 18 type: noop 19 # The dependsOn section contains the list of parent nodes the current 20 # node depends on 21 dependsOn: 22 - hadoopWC1 23 - NoOpTest1 24 - hive2 25 - java1 26 - jobCommand2 27 28 - name: pigWordCount1 29 type: pig 30 # The config section contains custom arguments or parameters which are 31 # required by the job 32 config: 33 pig.script: src/main/pig/wordCountText.pig 34 35 - name: hadoopWC1 36 type: hadoopJava 37 dependsOn: 38 - pigWordCount1 39 config: 40 classpath: ./* 41 force.output.overwrite: true 42 input.path: ${param.inData} 43 job.class: com.linkedin.wordcount.WordCount 44 main.args: ${param.inData} ${param.hadoopOutData} 45 output.path: ${param.hadoopOutData} 46 47 - name: hive1 48 type: hive 49 config: 50 hive.script: src/main/hive/showdb.q 51 52 - name: NoOpTest1 53 type: noop 54 55 - name: hive2 56 type: hive 57 dependsOn: 58 - hive1 59 config: 60 hive.script: src/main/hive/showTables.sql 61 62 - name: java1 63 type: javaprocess 64 config: 65 Xms: 96M 66 java.class: com.linkedin.foo.HelloJavaProcessJob 67 68 - name: jobCommand1 69 type: command 70 config: 71 command: echo "hello world from job_command_1" 72 73 - name: jobCommand2 74 type: command 75 dependsOn: 76 - jobCommand1 77 config: 78 command: echo "hello world from job_command_2"

然后打包的zip文件的架构如下:

1project_root 2├── sample_project.project 3├── flow1.flow 4├── flow2.flow 5├── ... 6├── flown.flow 7├── lib 8│ ├── ... 9│ └── paranamer-2.4.1.jar 10└── src 11 └── main 12 ├── hive 13 │ └── query.q 14 └── pig 15 └── pig1.pig

在此之上,还可以做条件flow:

https://github.com/azkaban/azkaban/blob/e9a02f4fff4b06476a8d3bbebbce7de1b7a6d864/docs/conditionalFlow.rst

本人了解的Azkaban的传参方式,目前的解决方案有2种。

  1. 改源码,提供想要的EL表达式,比如${yesterday-ymd} 这种 (比较推荐,但是稍微麻烦)

  2. 使用 python props.py > $JOB_OUTPUT_PROP_FILE 方式。

将一个JSON 数据,输出到一个 $JOB_OUTPUT_PROP_FILE  环境变量中,这个环境变量,只能将参数传递一层依赖。

比如 init_step里面是>JOB_OUTPUT_PROP_FILE,那么依赖  init_step -> second_step -> last_step  中,second_step可以读取init_step中的环境变量。last_step读取不了。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )