【调度工具】Azkaban用户手册

news2025/1/31 3:02:18

目录

一、概述

1.1 Azkaban 是什么

1.2 Azkaban 特点

1.3 Azkaban 与 Oozie 对比

功能

工作流定义

工作流传参

定时执行

资源管理

工作流执行

工作流管理

1.4 Azkaban 运行模式及架构

Azkaban 三大核心组件

Azkaban有两种部署方式

Azkaban Web Server

Azkaban Executor

Azkaban 元数据库

1.5 版本

1.6测试脚本准备

二、Azkaban任务配置

2.1 单一job任务配置和执行

2.2 多个job依赖任务流配置

2.3 任务调度配置

三、Azkaban历史任务查询

四、Azkaban新增用户


一、概述


1.1 Azkaban 是什么


Azkaban 是由 Linkedin 公司推出的一个批量工作流任务调度器,Azkaban 使用 job 文件建立任务之间的依赖关系,并提供 Web 界面供用户管理和调度工作流

1.2 Azkaban 特点


Azkaban 是由 Linkedin 开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban 定义了一种 KV 文件格式来建立任务之间的依赖关系,并提供一个易于使用的 web 用户界面维护和跟踪你的工作流。
它有如下功能特点:

  • Web 用户界面
  • 方便上传工作流
  • 方便设置任务之间的关系
  • 调度工作流
  • 认证/授权(权限的工作)
  • 能够杀死并重新启动工作流
  • 模块化和可插拔的插件机制
  • 项目工作区
  • 工作流和任务的日志记录和审计

1.3 Azkaban 与 Oozie 对比


Azkaban 和 Oozie 是市面上最流行的两种调度器。总体来说,Ooize 相比 Azkaban 是一个重量级的任务调度系统,功能全面,但部署和使用也更复杂,比较适合作为大型项目的任务调度系统。而 Azkaban 相对而言,配置和使用更为简单,能够满足常见的任务调度,比较适合作为中小型项目的任务调度系统。

Azkaban 和 Oozie 详情对比如下:

  • 功能

    两者均可以调度 mapreduce,pig,java,脚本工作流任务
    两者均可以定时执行工作流任务

  • 工作流定义

    Azkaban 使用 Properties 文件定义工作流
    Oozie 使用 XML 文件定义工作流

  • 工作流传参

    Azkaban 支持直接传参

    Oozie 支持参数和 EL 表达式

  • 定时执行

    Azkaban 的定时执行任务是基于时间的
    Oozie 的定时执行任务基于时间和输入数据

  • 资源管理

    Azkaban 有较严格的权限控制,如用户对工作流进行读/写/执行等操作
    Oozie 暂无严格的权限控制

  • 工作流执行

    Azkaban 有两种运行模式,分别是单机模式和集群模式
    Oozie 作为工作流服务器运行,支持多用户和多工作流

  • 工作流管理

    Azkaban 支持浏览器以及 ajax 方式操作工作流
    Oozie 支持命令行、HTTP REST、Java API、浏览器操作工作流

1.4 Azkaban 运行模式及架构


image-20210519220432495

Azkaban 三大核心组件
  • 关系型元数据库(MySQL)
  • Azkaban Web Server
  • Azkaban Executor Server
Azkaban有两种部署方式
  • solo server mode(单机模式)

    WebServer 和 ExecutorServer 在同一个进程

  • cluster server mode(集群模式)

    WebServe r和 ExecutorServer 运行在不同进程,并用数据库保存定义及状态

    • 单个Executor
    • 多个Executor

Azkaban Web Server

AzkabanWebServer 是 Azkaban 的主要管理者,负责项目管理、身份验证、调度和监控执行,并且为用户界面

Azkaban Executor

提交和执行工作流,记录工作流日志,和 Azkaban WebServer 可以在同一台服务器,也可部署在独立的机器。把 Executor 单独分开有几个好处:

  • 在多 Executor 模式下可以方便扩展
  • 工作流在某一个 Executor 挂掉,可以在另一个 Executor 上重试
  • 可以滚动升级,从而不影响调度

Azkaban 元数据库

image-20210519220946638

Azkaban 任务调度步骤

  • Azkaban 新建项目
  • 在 Azkaban Web 界面创建 Project
  • 创建 job 文件
  • 将文件压缩为 zip 文件
  • 上传 zip 文件到 Web 界面
  • 执行调度

1.5 版本


序号

文件及目录

版本号

描述

1

JDK

1.8.x

Java开发环境

2

azkaban.3.30.1

3.30.1

任务调度工具

1.6测试脚本准备


在linux 服务器上准备测试脚本,执行如下命令:

mkdir -p /hadoop/ops/test
cat > /hadoop/ops/test/test_task01.sh << EOF
  echo "test_task01"
EOF

cat > /hadoop/ops/test/test_task02.sh << EOF
   echo "test_task02"
EOF

cat > /hadoop/ops/test/test_task03.sh << EOF
   echo "test_task03"
EOF
chmod u+x /hadoop/ops/test/test_task01.sh
chmod u+x /hadoop/ops/test/test_task02.sh
chmod u+x /hadoop/ops/test/test_task03.sh
chown -R winner_spark:hdfs /hadoop/ops/test

二、Azkaban任务配置


2.1 单一job任务配置和执行


Windows本地创建test_task01.job文件,文件中的内容如下:

type=command
command=bash /hadoop/ops/test/test_task01.sh

创建system.properties

user.to.proxy=winner_spark

文件创建完成后,我们压缩文件为zip包

压缩完成后的文件如下图:

登录Azkaban web 创建Porject “test_task01_project”

  • Name: test_task01_project
  • Description: test_task01_project

创建完成后我们选择 upload 上传test_task01.zip 包

点击“选择文件”

选中 test_task01.zip 包 我们点击打开

选择“Upload”上传

如下图所示 test_task01任务上传成功

对于Flow任务 test_task01 我们可以选择执行、查看此任务执行历史和查看配置信息。

我们选择执行Flow “Execute Flow”

我们选择 “Execute”也就是立即执行一次。

点击“Continue”继续

如下图显示绿色代表任务执行成功。

选择Job List可以看到Flow 的执行时间、执行状态和查看详细日志选项。

我们可以选择“Details”查看任务运行的详细日志输出。

2.2 多个job依赖任务流配置


Windows本地创建system.properties

user.to.proxy=winner_spark

创建test_task01.job文件,文件中的内容如下:

type=command
command=bash /hadoop/ops/test/test_task01.sh

创建文件名test_task02.job,依赖test_task01.job,dependencies写第一个job的文件名,如果有多个依赖,需要用逗号隔开。

type=command
dependencies=test_task01
command=bash /hadoop/ops/test/test_task02.sh

创建文件名test_task03.job,依赖test_task02.job,dependencies写第二个job的文件名,如果有多个依赖,需要用逗号隔开

type=command
dependencies=test_task02
command=bash /hadoop/ops/test/test_task03.sh

文件创建完成后,我们压缩文件为zip包

登录Azkaban web 创建Porject “test_task010203_project”

  • Name: test_task010203_project
  • Description: test_task010203_project

创建完成后我们选择 upload 上传azkban-test.zip 包

点击“选择文件”

选中“azkban-test.zip ”包,打开

选择“Upload”

如下的Flow 中 我们可以看到任务依赖链的执行顺序。我们选择“Execute Flow”

如下图我们可以看到 Flow View ,此处我们选择“Execute”

选择“Continue”继续执行

如下图显示 Flow test_task01到test_task03依次执行成功

我们选择Job List 可以看到任务Job执行的时间线、执行时间和任务可查看详细日志。

我们进入Flow test_task03 的 “Details”日志中

如下可以看到脚本打印输出“test_task03”

2.3 任务调度配置


我们以2.2步骤多个job任务流为例配置调度任务。

我们选择“Execute Flow”

我们选择“Schedule”

下图中是任务调度时间配置页面,配置的cron格式如下:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * 

下图中配置的任务调度时间是每天的9-22之间每5分钟执行一次。配置好调度时间后我们选择“Schedule”

选择“Continue”

如下图中我们可以在“Scheduling”菜单中看到任务第一次调度时间、下一次运行时间、cron调度时间表达式、移除调度。



三、Azkaban历史任务查询


如下图为菜单History 提供的历史任务搜索功能,包括:快速搜索和高级过滤。

如下使用快速搜索在搜索栏中输入“test_task03”,点击“Quick Search”完成搜索。

选择“Advanced Filter”

任务状态选择搜索“Failed”的所有历史任务

选择“Filter”

如下图会显示所有失败任务:

四、Azkaban新增用户


编辑文件/hadoop/azkaban/azkaban-web/conf/azkaban-users.xml

vim /hadoop/azkaban/azkaban-web/conf/azkaban-users.xml
<user username="winner_spark" password="winner@001" groups="group_inspector" menus="history,hdfs"/>
  <group name="group_inspector" roles="inspector" />
  <role name="inspector" permissions="READ"/>

menus="history,hdfs" 表示配置限制只读用户winner_spark拥有history,hdfs两个菜单的查看权限。

添加完成后,“wq”保存退出。执行如下命令重启Azkaban:

cd /opt/azkaban-deploy
sh startAzkaban.sh restart

重启完成

登录Azkaban Web页面,登录地址 https://xxxxx:8444/, 使用账号密码: winner_spark/winner@001

从上图中可以看到只读用户winner_spark拥有history,hdfs两个菜单的查看权限。默认不配置拥有全部菜单的操作权限。

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

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

相关文章

JUC_1

进程 概述 进程&#xff1a;程序是静止的&#xff0c;进程实体的运行过程就是进程&#xff0c;是系统进行资源分配的基本单位 进程的特征&#xff1a;并发性、异步性、动态性、独立性、结构性 线程&#xff1a;线程是属于进程的&#xff0c;是一个基本的 CPU 执行单元&#x…

【LeetCode热题100】153. 寻找旋转排序数组中的最小值(二分)

一.题目要求 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,2]若旋转 7…

使用阿里云服务器可以做什么?太多了

阿里云服务器可以干嘛&#xff1f;能干啥你还不知道么&#xff01;简单来讲可用来搭建网站、个人博客、企业官网、论坛、电子商务、AI、LLM大语言模型、测试环境等&#xff0c;阿里云百科aliyunbaike.com整理阿里云服务器的用途&#xff1a; 阿里云服务器活动 aliyunbaike.com…

数合建模平台简介--4月新版

数合建模平台是一个综合性的数据建模及可视化平台&#xff0c;旨在为用户提供一站式全链路数据生命周期管理解决方案。该平台不仅能够帮助用户有效管理数据资产&#xff0c;还能深入挖掘数据价值&#xff0c;为政府机构、企业、科研机构以及第三方软件服务商等不同客户群体提供…

设计一个登录界面

MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget) {//隐藏窗口默认栏this->resize(535,330);this->setWindowFlag(Qt::FramelessWindowHint); //动图背景QLabel *lab1new QLabel(this);QMovie *mvnew QMovie("C:\\Users\\不鱼\\Desktop…

LangChain Demo | Agent X ReAct X wikipedia 询问《三体》的主要内容

背景 LangChain学习中&#xff0c;尝试改了一下哈里森和吴恩达课程当中的问题&#xff0c;看看gpt-3.5-turbo在集成了ReAct和wikipedia后&#xff0c;如何回答《三体》的主要内容是什么这个问题&#xff0c;当然&#xff0c;主要是为了回答这问题时LangChain内部发生了什么。所…

【Easy云盘 | 第十二篇】分享模块(获取分享信息、校验分享码、获取文件列表)

文章目录 4.4.4获取分享信息4.4.5校验分享码4.4.6获取文件列表 4.4.4获取分享信息 明天做 4.4.5校验分享码 明天做 4.4.6获取文件列表 明天做

0104练习与思考题-算法基础-算法导论第三版

2.3-1 归并示意图 问题&#xff1a;使用图2-4作为模型&#xff0c;说明归并排序再数组 A ( 3 , 41 , 52 , 26 , 38 , 57 , 9 , 49 ) A(3,41,52,26,38,57,9,49) A(3,41,52,26,38,57,9,49)上的操作。图示&#xff1a; tips:&#xff1a;有不少在线算法可视化工具&#xff08;软…

AI视觉入门:卷积和池化

从2012年以AlexNet为代表的模型问世以来&#xff0c;人工智能尤其是视觉cv部分飞速发展&#xff0c;在刚开始效果不如人类&#xff0c;到2015年在ImageNet1000数据集的表现就超过了人类。在Transformer模型出现之前&#xff0c;视觉模型的主要组成部分就是卷积和池化&#xff0…

鸿蒙内核源码分析 (并发并行篇) | 内核如何管理多个 CPU?

理解并发概念 并发&#xff08;Concurrent&#xff09;: 多个线程在单个核心运行&#xff0c;同一时间只能一个线程运行&#xff0c;内核不停切换线程&#xff0c;看起来像同时运行&#xff0c;实际上是线程被高速的切换. 通俗好理解的比喻就是高速单行道&#xff0c;单行道指…

通过 Cookie、Redis共享Session 和 Spring 拦截器技术,实现对用户登录状态的持有和清理(三)

本篇内容对应 “2.4 生成验证码” 小节 和 “4.7 优化登陆模块”小节 视频链接 1 Kaptcha介绍 Kaotcga是一个生成验证码的工具。 你的网站验证码是什么&#xff1f; 在我们这个牛客论坛项目&#xff0c;验证码分为两部分 给用户看的是图片&#xff0c;用户根据图片上显示的…

js中获取某年到某年季度数据

1.新建文件 在utils文件夹下新建文件handleQuarterData.js用于封装 // startYear&#xff1a;开始年份 // endYear&#xff1a;结束年份 // 数据格式为&#xff1a;2024第一季度 export function getQuarterData(startYear, endYear) {const result [];const quarterMap [一…

【Java网络编程】计算机网络基础概念

就目前而言&#xff0c;多数网络编程的系列的文章都在围绕着计算机网络体系进行阐述&#xff0c;但其中太多理论概念&#xff0c;对于大部分开发者而言&#xff0c;用途甚微。因此&#xff0c;在本系列中则会以实际开发者的工作为核心&#xff0c;从Java程序员的角度出发&#…

[lesson10]C++中的新成员

C中的新成员 动态内存分配 C中的动态内存分配 C中通过new关键字进行动态内存申请C中的动态内存申请是基于类型进行的delete关键字用于内存释放 new关键字与malloc函数的区别 new关键字是C的一部分malloc是由C库提供的函数new以具体类型位单位进行内存分配malloc以字节位单位…

k8s1(1),Linux运维基础开发与实践

#设置主机名 hostnamectl hostnameXXX #配置免密(包括操作机) ssh-keygen ssh-copy-id master*/slave* #传输hosts cat > /etc/hosts <<EOF 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain loca…

线程安全性问题的原因

1.抢占式执行随机调度 这里的意思就是&#xff0c;当两个线程同时启动的时候&#xff0c;两个线程会同时进行&#xff0c;并且是抢占式执行的。 而且是随机调度资源的。 如代码&#xff1a; public class Deome4 {public static void main(String[] args) {Thread t1 new …

Kubesphere在创建服务的添加容器步骤搜索镜像步骤找不到镜像

Kubesphere在创建服务的添加容器步骤搜索镜像步骤找不到镜像 {"status": "failed","message": "invalid character p after top-level value" }添加了标签也没用&#xff08;如&#xff1a;mysql:5.7&#xff09; 可以看到 dockerhu…

AI颠覆职场:这些行业将被重塑,你准备好了吗?

人工智能&#xff08;AI&#xff09;已经成为我们生活中不可或缺的一部分。从智能手机到自动驾驶汽车&#xff0c;AI技术的应用无处不在。然而&#xff0c;这股技术浪潮也引发了一个问题&#xff1a;哪些行业将面临被AI替代的风险&#xff1f;本文将深入探讨这一问题&#xff0…

C++进阶(五) 哈希

1. unordered系列关联式容器 1.1 unordered_map 1.2 unordered_map的接口说明 2. 底层结构 2.1 哈希概念 2.2 哈希冲突 2.3 哈希函数 2.4 哈希冲突解决 2.4.1 闭散列 2.4.2 开散列 3. 模拟实现 3.1 unordered_set 3.2 unordered_map 4.哈希的应用 4.1 位图 4.1.…

阿里千问大模型 Qwen1.5 开源 32B 模型,将开源进行到底!!!

阿里开源的千问系列模型&#xff0c;一直受到业界好评&#xff0c;之前版本有0.5B、1.8B、7B、14B、72B&#xff0c;但一直缺少的30B级别开源模型&#xff0c;这也一直是一个遗憾。 怎么说呢&#xff1f;72B模型太大&#xff0c;很多人用不起来&#xff0c;无论是微调&#xf…