Azkaban Flow 2.0的使用_azakaban flow-程序员宅基地

技术标签: hive  # Azkaban  hadoop  big data  大数据  

一、Flow 2.0 简介

1.1 Flow 2.0 的产生

Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用 Flow 2.0,因为 Flow 1.0 会在将来的版本被移除。Flow 2.0 的主要设计思想是提供 1.0 所没有的流级定义。用户可以将属于给定流的所有 job / properties 文件合并到单个流定义文件中,其内容采用 YAML 语法进行定义,同时还支持在流中再定义流,称为为嵌入流或子流。

1.2 基本结构

项目 zip 将包含多个流 YAML 文件,一个项目 YAML 文件以及可选库和源代码。Flow YAML 文件的基本结构如下:

  • 每个 Flow 都在单个 YAML 文件中定义;
  • 流文件以流名称命名,如:my-flow-name.flow
  • 包含 DAG 中的所有节点;
  • 每个节点可以是作业或流程;
  • 每个节点 可以拥有 name, type, config, dependsOn 和 nodes sections 等属性;
  • 通过列出 dependsOn 列表中的父节点来指定节点依赖性;
  • 包含与流相关的其他配置;
  • 当前 properties 文件中流的所有常见属性都将迁移到每个流 YAML 文件中的 config 部分。

官方提供了一个比较完善的配置样例,如下:

config:
  user.to.proxy: azktest
  param.hadoopOutData: /tmp/wordcounthadoopout
  param.inData: /tmp/wordcountpigin
  param.outData: /tmp/wordcountpigout

# This section defines the list of jobs
# A node can be a job or a flow
# In this example, all nodes are jobs
nodes:
 # Job definition
 # The job definition is like a YAMLified version of properties file
 # with one major difference. All custom properties are now clubbed together
 # in a config section in the definition.
 # The first line describes the name of the job
 - name: AZTest
   type: noop
   # The dependsOn section contains the list of parent nodes the current
   # node depends on
   dependsOn:
     - hadoopWC1
     - NoOpTest1
     - hive2
     - java1
     - jobCommand2

 - name: pigWordCount1
   type: pig
   # The config section contains custom arguments or parameters which are
   # required by the job
   config:
     pig.script: src/main/pig/wordCountText.pig

 - name: hadoopWC1
   type: hadoopJava
   dependsOn:
     - pigWordCount1
   config:
     classpath: ./*
     force.output.overwrite: true
     input.path: ${
    param.inData}
     job.class: com.linkedin.wordcount.WordCount
     main.args: ${
    param.inData} ${
    param.hadoopOutData}
     output.path: ${
    param.hadoopOutData}

 - name: hive1
   type: hive
   config:
     hive.script: src/main/hive/showdb.q

 - name: NoOpTest1
   type: noop

 - name: hive2
   type: hive
   dependsOn:
     - hive1
   config:
     hive.script: src/main/hive/showTables.sql

 - name: java1
   type: javaprocess
   config:
     Xms: 96M
     java.class: com.linkedin.foo.HelloJavaProcessJob

 - name: jobCommand1
   type: command
   config:
     command: echo "hello world from job_command_1"

 - name: jobCommand2
   type: command
   dependsOn:
     - jobCommand1
   config:
     command: echo "hello world from job_command_2"

二、YAML语法

想要使用 Flow 2.0 进行工作流的配置,首先需要了解 YAML 。YAML 是一种简洁的非标记语言,有着严格的格式要求的,如果你的格式配置失败,上传到 Azkaban 的时候就会抛出解析异常。

2.1 基本规则
  1. 大小写敏感 ;
  2. 使用缩进表示层级关系 ;
  3. 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级;
  4. 使用#表示注释 ;
  5. 字符串默认不用加单双引号,但单引号和双引号都可以使用,双引号表示不需对特殊字符进行转义;
  6. YAML 中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间。
2.2 对象的写法

value 与 : 符号之间必须要有一个空格
key: value

2.3 map的写法

写法一 同一缩进的所有键值对属于一个map
key:
key1: value1
key2: value2
写法二
{key1: value1, key2: value2}

2.3 数组的写法

写法一 使用一个短横线加一个空格代表一个数组项
- a
- b
- c

写法二
[a,b,c]

2.5 单双引号

支持单引号和双引号,但双引号不会对特殊字符进行转义:

s1: ‘内容\n 字符串’
s2: “内容\n 字符串”
转换后:
{ s1: ‘内容\n 字符串’, s2: ‘内容\n 字符串’ }

2.6 特殊符号

一个 YAML 文件中可以包括多个文档,使用---进行分割。

2.7 配置引用

Flow 2.0 建议将公共参数定义在config下,并通过${}进行引用。

三、简单任务调度

3.1 任务配置

新建 flow 配置文件:

nodes:
  - name: jobA
    type: command
    config:
      command: echo "Hello Azkaban Flow 2.0."

在当前的版本中,Azkaban 同时支持 Flow 1.0 和 Flow 2.0,如果你希望以 2.0 的方式运行,则需要新建一个 project 文件,指明是使用的是 Flow 2.0:

azkaban-flow-version: 2.0

3.2 打包上传

在这里插入图片描述

3.3 执行结果

由于在 1.0 版本中已经介绍过 Web UI 的使用,这里就不再赘述。对于 1.0 和 2.0 版本,只有配置方式有所不同,其他上传执行的方式都是相同的。执行结果如下:
在这里插入图片描述

四、多任务调度

和 1.0 给出的案例一样,这里假设有五个任务(jobA——jobE), D 任务需要在 A,B,C 任务执行完成后才能执行,而 E 任务则需要在 D 任务执行完成后才能执行,相关配置文件应如下。可以看到在 1.0 中需要分别定义五个配置文件,而在 2.0 中只需要一个配置文件即可完成配置。

nodes:
  - name: jobE
    type: command
    config:
      command: echo "This is job E"
    # jobE depends on jobD
    dependsOn: 
      - jobD
    
  - name: jobD
    type: command
    config:
      command: echo "This is job D"
    # jobD depends on jobA、jobB、jobC
    dependsOn:
      - jobA
      - jobB
      - jobC

  - name: jobA
    type: command
    config:
      command: echo "This is job A"

  - name: jobB
    type: command
    config:
      command: echo "This is job B"

  - name: jobC
    type: command
    config:
      command: echo "This is job C"

五、内嵌流

Flow2.0 支持在一个 Flow 中定义另一个 Flow,称为内嵌流或者子流。这里给出一个内嵌流的示例,其 Flow 配置如下:

nodes:
  - name: jobC
    type: command
    config:
      command: echo "This is job C"
    dependsOn:
      - embedded_flow

  - name: embedded_flow
    type: flow
    config:
      prop: value
    nodes:
      - name: jobB
        type: command
        config:
          command: echo "This is job B"
        dependsOn:
          - jobA

      - name: jobA
        type: command
        config:
          command: echo "This is job A"

内嵌流的 DAG 图如下:

在这里插入图片描述
执行情况如下:
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45462732/article/details/125062315

智能推荐

DPDK总结(rte_eal_init)_dpdk rte_eal_init-程序员宅基地

文章浏览阅读1w次,点赞3次,收藏21次。DPDK学习(rte_eal_init)DPDK学习(eal_thread_loop)rte_bus_liststruct rte_bus { TAILQ_ENTRY(rte_bus) next; /**< Next bus object in linked list */ const char *name; /**< Name of the bus..._dpdk rte_eal_init

HDU 2066 一个人的旅行 - from lanshui_Yang_一个人的旅行from: hdu, 2066-程序员宅基地

文章浏览阅读1.3k次。Problem Description虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时_一个人的旅行from: hdu, 2066

VMware vSphere 5 主机网卡的网络设计布局和配置-程序员宅基地

文章浏览阅读526次。这些物理网卡设计的假设是,这些主机将要与企业增强版许可配置,以便所有的vSphere功能都可以使用。我没有创建一堆不同的设计和以前一样,因为理想情况下,你会希望坚持使用符合一堆标准对于大多数人来说一个简单的设计。另外,我已经更新了这些CONFIGS为执行iSCSI的多路径和删除使用以太通道的配置,因为那些大多需要在标准的vSwitch配置。我也建议开始移动了一切到vNetwo..._vsphere布局设置

在move base中使用给定的全局路径,实现局部避障_拟合一条曲线发送给move_base的全局路劲-程序员宅基地

文章浏览阅读4.3k次,点赞11次,收藏85次。在move base中global planner效果并不理想,很大程度上也影响局部规划的效果,因此尝试给出人工采取的全局路径,再用teb local planner局部避障。_拟合一条曲线发送给move_base的全局路劲

典型计算机的性能分析,计算机系统性能测试与分析概论.ppt-程序员宅基地

文章浏览阅读233次。《计算机系统性能测试与分析概论.ppt》由会员分享,可在线阅读,更多相关《计算机系统性能测试与分析概论.ppt(59页珍藏版)》请在人人文库网上搜索。1、a,1,计算机系统性能测试陈文光清华大学计算机系,a,2,为什么要学这本门课,组装一台电脑 关心哪些指标? 处理器主频 内存大小 如何评价一个计算机系统的性能,选哪些程序评测? 都测试哪些值? 这些值如何汇总? 这些值真的能够反映计算机系统的性能..._计算机系统性能评价 陈文光

Leetcode错误:control reaches end of non-void function [-Werror=return-type]-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏3次。leecode错误:control reaches end of non-void function [-Werror=return-type]_ontrol reaches end of non-void function [-werror=return-type]

随便推点

OpenGL.ES在Android上的简单实践:20-水印录制(预览+透明水印 表情 弹幕 gl_blend)_android使用opengl录像时添加水印-程序员宅基地

文章浏览阅读7.6k次,点赞13次,收藏16次。OpenGL.ES在Android上的简单实践:20-水印录制(预览 gl_blend)1、继续画出预览帧紧接着上篇文章,既然是要画出预览帧,按照之前其他项目的架构组成。我们是通过模型FrameRect.draw的方法画出预览帧,在定义这个draw方法之前我们从着色器出发,看看需要什么。 private static final String VERTEX_SHADER ..._android使用opengl录像时添加水印

Java: 理解异常/错误(Error和Exception)_java 错误和异常-程序员宅基地

文章浏览阅读1.8k次。一、Throwable结构在Java中,Throwable是所有错误与异常的超类。Throwable包含两个子类:Error(错误)和Exception(异常)异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理Error: 是程序无法处理的错误,表示运行应用程序中较严重问题. 大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。(如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefF.._java 错误和异常

kudu报错解决_cannot complete before timeout-程序员宅基地

文章浏览阅读1.2w次。错误一:解决办法:1.4.0版本,因为master的元数据全部在本地磁盘文件,如果额外的添加了一个master,会报错,找不到consensus-meta,也就是master的容错机制,需要对数据格式化错误二:impala中创建使用kudu存储,但是client端读取数据,读取不出来。错误三: [New I/O worker #1] WARN org.apa_cannot complete before timeout

WPF 给容器加边框_stackpanel 边框-程序员宅基地

文章浏览阅读8.1k次,点赞2次,收藏3次。WPF 中不时所有控件都有Border边框属性,像容器就没有这个属性,那么如何给容器加边框呢,WPF中Border可以当做一个控件使用如下文给StackPanel内加Border控件 <StackPanel Name="panel" Grid.Column="0"> <Border BorderBrush="{DynamicResource {x:Static..._stackpanel 边框

las文件读写_pcl io loadlasfile-程序员宅基地

文章浏览阅读598次。读取有一点误差#include <pcl/visualization/cloud_viewer.h>#include <iostream>//标准C++库中的输入输出类相关头文件。#include <pcl/io/io.h>#include <pcl/io/pcd_io.h>//pcd 读写类相关的头文件。#include <pcl/..._pcl io loadlasfile

usbcamera拔掉设备崩溃_uscamera拔掉崩溃-程序员宅基地

文章浏览阅读848次。崩溃堆栈如下:解决办法:_uscamera拔掉崩溃

推荐文章

热门文章

相关标签