一、Azkaban简明笔记

news/2024/5/18 12:03:19/文章来源:https://www.cnblogs.com/nuochengze/p/16648348.html

1、azkaban部署

主要是集群部署安装。

1.1 准备安装包

Downloads (azkaban.github.io)

1.2 配置MySQL

  1. 启动mysql

    mysql -uroot -proot

  2. 创建azkaban数据库

    create database azkaban;

  3. 创建azkaban用户并赋予权限(可以不设置账号,继续使用root账号)

    -- 显示相关变量
    SHOW VARIABLES like 'validate_password%';-- 设置密码有效长度1位及以上
    set global validate_password.length=1;
    -- 设置密码策略最低级别
    set global validate_password_policy=0;
    -- 创建Azkaban用户,任何主机都可以访问Azkaban,密码是azkaban
    CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban'; -- 赋予Azkaban用户增删改查权限
    GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
    
  4. 创建azkaban的表

    source /opt/software/azkaban/azkaban-db-3.84.4/create-all-sql-3.84.4.sql;
    
  5. 更改mysql包大小,防止azkaban连接mysql阻塞

    sudo vim /etc/my.cnf# 在[mysqld]下面加一行max_allowed_packet=1024M[mysqld]
    max_allowed_packet=1024M
    
  6. 重启mysql

    sudo systemctl restart mysqld
    

1.3 配置Executor Server

Azkaban Executor Server处理工作流和作业的实际执行。

  1. 编辑azkaban.properties

    vim /opt/software/azkaban/azkaban-exec-server-3.84.4/conf/azkaban.properties
    

    修改如下属性:

    # 修改如下内容
    default.timezone.id=Asia/Shanghai
    azkaban.webserver.url=http://node001:8081
    executor.port=12321database.type=mysql
    mysql.port=3306
    mysql.host=node001
    mysql.database=azkaban
    mysql.user=azkaban
    mysql.password=azkaban
    mysql.numconnections=100# 添加如下内容
    executor.metric.reports=true
    executor.metric.milisecinterval.default=60000
    
  2. 进入.../azkaban-exec-server-3.84.4/lib 更新 mysql-connector-java-8.0.29.jar包,使其与mysql版本匹配

  3. 同步azkaban-exec-server-3.84.4到所有节点

  4. 在各节点的**.../azkaban-exec-server-3.84.4/ **目录分别执行

    bin/start-exec.sh
    

    如果出现executor.port文件,说明启动成功。

  5. 在各个节点激活executor

    curl -G "node001:$(<./executor.port)/executor?action=activate" && echocurl -G "node002:$(<./executor.port)/executor?action=activate" && echocurl -G "node003:$(<./executor.port)/executor?action=activate" && echo
    

    如果节点出现提示:{"status":"success"},表示激活成功。

1.4 配置Web Server

Azkaban Web Server处理项目管理,身份验证,计划和执行触发。

  1. 编辑azkaban.properties

    修改如下:
    default.timezone.id=Asia/Shanghaidatabase.type=mysql
    mysql.port=3306
    mysql.host=node001
    mysql.database=azkaban
    mysql.user=root
    mysql.password=root
    mysql.numconnections=100azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
    

    说明:

    • StaticRemainingFlowSize:正在排队的任务数

    • CpuStatus:CPU占用情况

    • MinimumFreeMemory:内存占用情况。测试环境,必须将MinimumFreeMemory删除掉,否则它会认为集群资源不够,不执行

  2. 修改azkaban-users.xml文件,添加新用户

    <azkaban-users><user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/><user password="metrics" roles="metrics" username="metrics"/><user password="azkaban" roles="metrics,admin" username="nuochengze"/><role name="admin" permissions="ADMIN"/><role name="metrics" permissions="METRICS"/>
    </azkaban-users>
    
  3. 进入.../azkaban-web-server-3.84.4/lib 更新 mysql-connector-java-8.0.29.jar包,使其与mysql版本匹配

  4. 进入...//azkaban-web-server-3.84.4/目录,启动web Server

    ./bin/start-web.sh
    
  5. 访问http://node001:8081/,并用配置的账号登录

2、使用

2.1 HelloWorld案例

  1. 新建azkaban.project文件,编辑内容如下:

    azkaban-flow-version: 2.0
    

    该文件的表明,采用新的Flow-API方式解析flow文件

  2. 新建hello_world.flow文件,编辑内容如下:

    nodes:- name: jobA  # job的名称type: command  # job的类型,command表示要执行作业的方式为命令config:  # job的配置信息command: echo "hello world"
    
  3. 将azkaban.project、hello_world.flow文件压缩到一个zip文件

    说明:文件名称必须是英文

  4. 在WebServer新建一个项目:http://node001:8081/index

    1. 给项目名称命名和添加项目描述
    2. 将zip包文件上传
    3. 执行Execute Flow
    4. Job List中查看运行结果

2.2 作业依赖案例

需求:JobA和JobB执行完了,才能执行JobC

步骤:

  1. 创建basic.flow文件,添加如下内容

    nodes:- name: JobCtype: commanddependsOn:- JobA- JobBconfig: command: echo "I'm JobC"- name: JobAtype: commandconfig:command: echo "I'm JobA"- name: JobBtype: commandconfig:command: echo "I'm JobB"
    

    dependsOn后面表示当前Job依赖的其他Job

  2. 创建azkaban.project文件,编辑内容如下:

    azkaban-flow-version: 2.0
    
  3. basic.flowazkaban.project文件压缩成dependson_example.zip文件

  4. 在WebServer新建一个项目:http://node001:8081/index

    1. 给项目名称命名和添加项目描述
    2. 将zip包文件上传
    3. 执行Execute Flow
    4. Job List中查看运行结果

2.3 自动失败重试案例

需求:如果执行任务失败,需要重试3次,重试的时间间隔10000ms

修改basic.flow文件:

nodes:	- name: JobAtype: commandconfig: command: sh /not_exists.shretries: 3retry.backoff: 10000

参数说明:

  • retries:重试次数
  • retry.backoff: 重试的时间间隔

执行的次数= 一次失败+三次重试

全局配置的方式:

# 在Flow全局配置中添加任务失败配置,此时重试配置会应用到所有Jobconfig:retires: 3retry.backoff: 10000
nodes:- name: JobAtype: commandconfig:command: sh /not_exists.sh

2.4 手动失败重试案例

Enable 和 Disable 下面都分别有如下参数:

  • Parents:该作业的上一个任务

  • Ancestors:该作业前的所有任务

  • Children:该作业后的一个任务

  • Descendents:该作业后的所有任务

  • Enable All:所有的任务

2.5 JavaProcess作业类型案例

JavaProcess 类型可以运行一个自定义主类方法,

type 类型为 javaprocess,

可用的配置为:

  • Xms:最小堆
  • Xmx:最大堆
  • classpath:类路径
  • java.class:要运行的 Java 对象,其中必须包含 Main 方法
  • main.args:main 方法的参数

步骤:

  1. 新建一个azkaban的maven工程

  2. 创建包名:com.nuochengze

  3. 创建AzTest类:

    package com.nuochengzepublic class AzTest {public static void main(String[] args){System.out.println("This is a test.");}
    }
    
  4. 打包成jar包

  5. 修改basic.flow文件

    nodes: - name: test_javatype: javaprocessconfig:Xms: 96MXmx: 200Mjava.class: com.nuochengze.AzTest
    
  6. 将jar包和basic.flow文件及azkaban.project文件打包成zip包

2.6 条件工作流案例

条件工作流功能允许用户自定义执行条件来决定是否运行某些Job。条件可以由当前Job 的父 Job 输出的运行时参数构成,也可以使用预定义宏。在这些条件下,用户可以在确定 Job 执行逻辑时获得更大的灵活性,例如,只要父 Job 之一成功,就可以运行当前 Job。

运行时参数案例:

  1. 基本原理

    • 父 Job 将参数写入 JOB_OUTPUT_PROP_FILE 环境变量所指向的文件

    • 子 Job 使用 ${jobName:param}来获取父 Job 输出的参数并定义执行条件

  2. 支持的条件运算符

    • == 等于
    • != 不等于
    • > 大于
    • >= 大于等于
    • < 小于
    • <= 小于等于
    • && 与
    • || 或
    • ! 非

案例:

  • 需求:JobA执行一个shell脚本,JobB执行一个shell脚本,但JobB不需要每天都执行,而只需要每个周一执行

  • 步骤:

    1. 新建jobA.sh

      #! /bin/bashecho "do JobA"
      wk=`date +%w`
      echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE
      
    2. 新建JobB.sh

      #!/bin/bash
      echo "do JobB"
      
    3. 新建basic.flow

      nodes:- name: JobAtype: commandconfig:command: sh JobA.sh- name: JobBtype: commanddependsOn:- JobAconfig:command: sh JobB.shcondition: ${JobA:wk} == 1
      

      按照设定条件,JobB会根据当日日期决定是否执行

2.7 预定义宏案例

Azkaban 中预置了几个特殊的判断条件,称为预定义宏。 预定义宏会根据所有父 Job 的完成情况进行判断,再决定是否执行。

可用的预定义宏如 下:

  • all_success: 表示父 Job 全部成功才执行(默认)
  • all_done:表示父 Job 全部完成才执行
  • all_failed:表示父 Job 全部失败才执行
  • one_success:表示父 Job 至少一个成功才执行
  • one_failed:表示父 Job 至少一个失败才执行

案例:

  • 需求

    JobA 执行一个 shell 脚本 ,JobB 执行一个 shell 脚本,JobC 执行一个 shell 脚本,要求 JobA、JobB 中有一个成功即可执行

  • 步骤

    1. 新建JobA.sh

      #!/bin/bash
      echo "do JobA"
      
    2. 新建JobC.sh

      #!/bin/bash
      echo "do JobC
      
    3. 新建basic.flow

      nodes:- name: JobAtype: commandconfig:command: sh JobA.sh- name: JobBtype: commandconfig:command: sh JobB.sh- name: JobCtype: commanddepondsOn:- JobA- JobBconfig: command: sh JobC.shcondition: one_success
      

      注意:没有JobB.sh

2.8 定时执行

  • Azkaban 可以定时执行工作流。在执行工作流时候,选择左下角 Schedule
  • 右上角注意时区是上海,然后在左面填写具体执行事件,填写的方法和 crontab 配置定时 任务规则一致
  • 点击 remove Schedule 即可删除当前任务的调度规则

2.9 邮箱报警案例

  1. 注册邮箱并开启smtp,获取第三方客户端授权码

  2. Azkaban 默认支持通过邮件对失败的任务进行报警,配置方法如下:

    1. 在 azkaban-web 节 点 node001上,编辑.../azkaban-web-server-3.84.4/conf/azkaban.properties,并修改如下内容:

      #这里设置邮件发送服务器
      mail.sender=xxxx@126.com
      mail.host=smtp.126.com
      mail.user=xxxx@126.com
      mail.password=用邮箱的授权码
      
    2. 保存并重启web-server

    3. 页面配置




















2.10 Azkaban多Executor模式注意事项

Azkaban 多 Executor 模式是指,在集群中多个节点部署 Executor。在这种模式下, Azkaban web Server 会根据策略,选取其中一个 Executor 去执行任务。

为确保所选的 Executor 能够准确的执行任务,我们须在以下两种方案任选其一,推荐使 用方案二。

  • 方案一:指定特定的 Executor(hadoop102)去执行任务。

    1. 在 MySQL 中 azkaban 数据库 executors 表中,查询 node001上的 Executor 的 id。

    2. 在执行工作流程时加入 useExecutor 属性,如下















  • 方案二:在 Executor 所在所有节点部署任务所需脚本和应用。

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

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

相关文章

实体店主最爱的中秋活动方案,直接照搬就能轻松爆单!

中秋将至&#xff0c;传统佳节和营销好时机一起到了&#xff01;利用氛围浓厚的节日进行营销活动&#xff0c;是吸引客户、增粉卖货的最佳手段之一&#xff0c;商户老板们可千万不能错过&#xff01; 但是&#xff0c;活动人人都能做&#xff0c;如何在一片节日促销中脱颖而出&…

JVM详解

1. 源文件 源文件就是我们编写Java代码的文件。文件扩展名为.java 2. 字节码文件 字节码文件是源文件编译后的文件。字节码文件是二进制文件&#xff0c;需要通过特定的工具才能查看。里面存放了源文件编译后的字节码指令。 3. 类加载器 Class Loader Java 程序运行时会由…

USB转GPIO应用方案

概述 沁恒提供的多款USB转接系列芯片均提供GPIO引脚功能&#xff0c;各引脚支持独立的输出输入&#xff0c;GPIO功能的使用需要与计算机端厂商驱动程序和应用软件配合使用。各芯片的默认GPIO引脚状态有所区别&#xff0c;可查阅芯片技术手册或参考方案中附表。 型号 CH344Q …

基于神经网络的图像识别,人工神经网络图像识别

如何通过人工神经网络实现图像识别 。 人工神经网络&#xff08;ArtificialNeuralNetworks&#xff09;&#xff08;简称ANN&#xff09;系统从20世纪40年代末诞生至今仅短短半个多世纪&#xff0c;但由于他具有信息的分布存储、并行处理以及自学习能力等优点&#xff0c;已经…

Jmeter(五) - 从入门到精通 - 测试计划(Test Plan)的元件(详解教程)

一.测试计划&#xff08;Test Plan&#xff09;要素 1.JMeter中一个脚本就是一个测试计划&#xff08;Test Plan&#xff09;&#xff0c;也是一个管理单元。JMeter 的请求模拟与并发数(设置线程数&#xff0c;一个线程代表一个虚拟用户)设置都在脚本文件中一起设置。JMeter 不…

雨夜赶长路,房企必经的三场“价值战事”

今年上半年&#xff0c;地产行业一直在高压下运行。市场周期震荡叠加疫情等因素&#xff0c;为房企的销售、土拍、融资带来不确定性。 下半年以来&#xff0c;虽然不确定性和高压仍在&#xff0c;但市场有望恢复&#xff0c;下行趋势似乎已到拐点。 面对高压&#xff0c;不同…

安装 ZooKeeper 并配置服务

官网 访问官方下载页面安装 # 注意替换一下新的链接 curl -sSLO https://dlcdn.apache.org/zookeeper/zookeeper-3.8.0/apache-zookeeper-3.8.0-bin.tar.gz tar -zxvf apache-zookeeper-3.8.0-bin.tar.gz -C /opt/ cd /opt ln -s zookeeper-3.4.10 ./zookeepercd zookeeper m…

微服务项目:尚融宝(8)(后端接口:积分等级CRUD)

认清现实&#xff0c;放弃幻想&#xff0c;准备斗争 一、积分等级列表接口 1、编写积分等级管理接口 在controller中添加admin包&#xff0c;添加AdminIntegralGradeController类CrossOrigin RestController RequestMapping("/admin/core/integralGrade") public cl…

Mac中无法运行旧版本印象笔记:版本太旧 你的本地印象笔记数据是由新版印象笔记管理

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

算法设计与分析作业——递归循环

用循环实现&#xff1a; 1、 求级数 求&#xff1a;1/1!-1/3!1/5!-1/7!…(-1)n1/(2n-1)! #include <bits/stdc.h> using namespace std; int main( ) {int i,n,j,sign1; float s,t1; cin>>n; s1; for(i2;i<n;ii1){t1; /*求阶乘*/for(j1;j<2*i-1;…

(11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】

&#xff08;1&#xff09;工业界推荐系统-小红书推荐场景及内部实践【业务指标、链路、ItemCF】 &#xff08;2&#xff09;工业界推荐系统-小红书推荐场景及内部实践【UserCF、离线特征处理】 &#xff08;3&#xff09;工业界推荐系统-小红书推荐场景及内部实践【矩阵补充、…

推荐10款好用的数据可视化工具,赶紧收藏

写在前面的话&#xff1a;没有十全十美的工具&#xff0c;但是如果确立&#xff08;可视化&#xff09;目标&#xff0c;就能找到合适的工具去实现。 数据分析过程可以分为&#xff1a;确定目标数据、数据采集、数据清洗、数据存储、数据分析、结果可视化及结果支持和决策等步骤…

文字转音频软件哪个好用?这几个方法你值得拥有

不知道你有没有发现一个现象&#xff0c;现在越来越多的人会把自己制作好的视频发布到各个社交平台上&#xff0c;分享自己的日常。有的人还会用自己的声音来做配音旁白&#xff0c;而有的人因为自己声音和视频不搭&#xff0c;会使用配音软件&#xff0c;把文字转换成语音。可…

FRED应用:真实玻片设置

简介 FRED具备通过光学系统模拟光线偏振的能力。光源可以是随机偏振、圆偏振或线偏振。过滤或控制偏振的光学元件&#xff0c;如双折射波片和偏振片&#xff0c;可以准确的模拟。FRED偏振模型中一些简单例子包括吸收二向色性和线栅偏振片&#xff0c;方解石半波片&#xff0…

最近在学日语

对比了一些B站的日语教学视频,觉得这个挺不错: 视频在这里昨天开始学的,50音图平假名全记住了,片假名还有点磕巴。 现在开始学语法了。 【动力这种东西,真是来得莫名奇妙。】手打一遍50音图,练习~ (键盘手打刻意练习了一下,熟练多了。) a i u e o あ ア い イ う…

Magisk如何针对性隐藏Root避免被检测

如果这篇文章对你有帮助,欢迎点赞关注收藏三联,这对我有帮助,谢谢小伙伴们,你们的支持是我认真分享的动力。 关于Magisk有一个有趣的故事,Magisk的作者老吴,国内人,妥妥的大牛,主攻Root领域,目前在Google里卖弄当工程师,在去Google之前,老吴还去苹果公司实习过,就在…

HTML5新特性 day_05(8.11)上传头像、webSocket

一、文件上传经典业务流程 -- 上传头像 在注册业务&#xff0c;填写表单的过程中&#xff0c;需要选择头像&#xff0c;上传头像&#xff0c;填写基本信息&#xff08;用户名、密码等&#xff09;后&#xff0c;点击注册按钮&#xff0c;完成用户注册。当下次登录时需要看到以…

janus videoroom之媒体录制

janus videoroom为音视频会议&#xff0c;内部自创建一个房间号为1234的会议&#xff0c;读者可以配置会议召开时&#xff0c;录制会议的视频和语音&#xff0c;录制文件的后缀名为mjr&#xff0c;此为janus自定义的一种媒体封装格式&#xff0c;个人理解全称是meetecho janus …

我换了一圈儿,又回来了!

C语言 C语言应该很多人都学过&#xff0c;因为计算机、电子通信、自动化一类的专业基本上都要学习它。 然而&#xff0c;学习的人多&#xff0c;但用它来实际开发项目的人却少之又少。 这是为什么呢&#xff1f; 在我看来&#xff0c;主要有两个原因。 第一&#xff0c;难度…

配置dns服务的正反向解析

服务端 安装包 dnf install bind bind-utils -y systemctl stop firewalld.service 关闭防火墙 setenforce 0 关闭selinux vim /etc/named.conf 配置内容 options { listen-on port 53 { 192.168.182.129; }; directory “/var/named”; allow-query { any; }; }; zone …