Azkaban其二,具体使用以及告警设置

目录

Azkaban的使用

1、使用Flow1.0(比较老旧)

2、Flow2.0的用法

1、小试牛刀

2、YAML格式的数据

3、多任务依赖

4、内嵌流(嵌套流)案例

5、动态传参

3、Azkaban的报警机制

1)邮箱通知

2)电话报警机制

4、关于azkaban脚本优化的问题


Azkaban的使用

1、使用Flow1.0(比较老旧)

需要注意的点:

1. azkaban的job流文件,后缀是.job1)  type属性 必须赋值值有:command,java,pig
2. azkaban执行的job必须要提前打包,打包的格式必须是zip格式不能打包文件夹,打包文件
3. 流文件里的书写格式:1)一定要注意行末不要有空格2)编码集的问题,如果在window上实在不行,可以上传到linux进行zip压缩,然后下载到windows上,再上传到azkaban上

先在我们的azkaban上创建一个项目:

Name 不能是中文的

Description 不能为空,可以是中文

编写一个job任务:

type=command
command=echo "hello world"

使用windows编辑这个文件的时候,一般要注意,格式,需要是unix:

对这个hello.job 进行打包,不要打包文件夹,格式必须是zip格式

打成zip 包

上传至项目中:

执行的时候报了错:

进行如下修复:

在exec-server中,修改配置文件 azkaban.proerties 添加如下代码,注意安装路径

azkaban.jobtype.plugin.dir=/opt/installs/azkaban/exec-server/plugins/jobtypes

重启exec-server即可。

从这个里面是不是可以看到一个任务,被调用了。

通过案例可以看到:我们可以将编写好的shell,以及mr任务,以及定时任务以及hive脚本都可以写成job任务,让azkaban帮助我们调度。

2、Flow2.0的用法

1、小试牛刀

需要创建两个文件 JobA.flow JobA.project

在JobA.project中编写一句话:

azkaban-flow-version: 2.0

在JobA.flow中,编写任务,需要注意YAML语句:

nodes:- name: jobAtype: commandconfig:command: echo "this is a simple test"

打包两个文件到一个zip中

2、YAML格式的数据

听说过JSON、XML,后来出现YAML,作用跟json和xml是一样的都是一种文件,可以传递信息。

JSON  和  XML 都是用来存储和传输数据的。
JSON  存储数据,比如 datax中大量使用了json"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","age"],"splitPk": "id","connection": [{"table": ["user"],"jdbcUrl": ["jdbc:mysql://192.168.52.12:3306/sqoop"]}]}}
编写好了一个json ,里面含有大量的信息,肯定是有人用了。用的人肯定解析了这个文件。
JSON 传输数据:   html --> Java(SSM SSH SpringBoot)
xml 也可以做到。但是慢慢的淘汰了。
这三类文件格式都可以充当配置文件(存储数据)
JSON:  core.json
XML : hdfs-site.xml
YAML : 即将开始

比如SpringBoot 里面支持两种配置文件:application.properties 和 application.yaml

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

语法格式:

# value 与 : 符号之间必须要有一个空格
key: value
# 写法一 同一缩进的所有键值对属于一个map
key: key1: value1key2: value2# 写法二
{key1: value1, key2: value2}
# 写法一 使用一个短横线加一个空格代表一个数组项
- a
- b
- c# 写法二
[a,b,c]
s1: '内容\n 字符串'
s2: "内容\n 字符串"转换后:
{ s1: '内容\\n 字符串', s2: "内容\n 字符串" }如果你想表示一个换行:
s1: "内容\n 字符串"
Flow 2.0 建议将公共参数定义在 `config` 下,并通过 `${}` 进行引用。

yaml 是这两年非常流行的数据格式,书写格式要求很严格,层级关系纯靠缩进进行表示。

3、多任务依赖

nodes:- name: jobEtype: commandconfig:command: echo "This is job E"# jobE depends on jobDdependsOn:- jobD- name: jobDtype: commandconfig:command: echo "This is job D"# jobD depends on jobA、jobB、jobCdependsOn:- jobA- jobB- jobC- name: jobAtype: commandconfig:command: echo "This is job A"- name: jobBtype: commandconfig:command: echo "This is job B"- name: jobCtype: commandconfig:command: echo "This is job C"
azkaban-flow-version: 2.0

复习一下昨天的安装:

可以一次执行多个任务,也可以单独执行某个任务:

总结:多任务编排,靠dependsOn 这个属性。

定时任务:

实战:将我们刚才的多任务的job,定时执行:

4、内嵌流(嵌套流)案例

Azkaban中一个流可以包含其他的流,方便分组和排序,也方便协作
因为在工作过程中不一定azkaban是你一个人在用,假如你的同事已经写好了好几个流,你需要放入到你的流文件中,可以直接copy,不需要修改其他的。

不带参数传递的内嵌流的使用:

nodes:- name: jobCtype: commandconfig:command: echo "This is job C"dependsOn:- embedded_flow- name: embedded_flowtype: flownodes:- name: jobBtype: commandconfig:command: echo "This is job B"dependsOn:- jobA- name: jobAtype: commandconfig:command: echo "This is job A"

带有参数的内嵌流:

nodes:- name: jobCtype: commandconfig:command: echo "This is job C"dependsOn:- embedded_flow- name: embedded_flowtype: flowconfig:name: zhangsannodes:- name: jobBtype: commandconfig:command: echo "This is job B ${name}"dependsOn:- jobA- name: jobAtype: commandconfig:command: echo "This is job A"
azkaban-flow-version: 2.0

5、动态传参

代码演示:

nodes:- name: jobCtype: commandconfig:command: echo "This is job C"dependsOn:- test_flow- name: test_flow#此处是type=flowtype: flowconfig:prop: ${canshu}#此处有nodesnodes:- name: jobBtype: commandconfig:command: echo "This is job B ${prop}"dependsOn:- jobA- name: jobAtype: commandconfig:command: echo "This is job A"

打包,上传

3、Azkaban的报警机制

1)邮箱通知

必须有一个邮箱服务器,你想接受一个邮件,肯定是另一个邮箱给你发送的。

Gmail 邮箱 谷歌的 注册一个邮箱吧

163 126 yeah 都是 163 的

名片上印上你的邮箱

接着进行配置:在azkaban的 web-server 端,进行邮箱的配置:

mail.sender=
mail.host=
mail.user=
mail.password=

重启web-server服务。

执行一个任务的时候,就可以设置要接受的邮箱地址了。

2)电话报警机制

睿象云-智能运维管理平台-智能运维系统-自动化运维性能监控平台

会生成一个appKey:

最后一个Azkaban的重试机制:

# 重试次数
retries: 3
# 每次重试时间间隔
retry.backoff: 10000案例:
nodes:- name: jobAtype: commandconfig:command: echo "this is a simple test"retries: 3retry.backoff: 10000

4、关于azkaban脚本优化的问题

目前遇到的问题:
1、启动azkaban的时候,需要启动两个甚至多个脚本,比较麻烦start-web.sh  start-exec.sh
2、日志查看没有放在一块,需要切换目录比较麻烦优化方案:
编写一个脚本  azkaban.sh

源码如下:

#!/bin/bash
# 参数个数一个或者两个 not equal to --> ne
if  [ $# -lt 1 ] && [ $# -gt 2 ] 
then
echo -e  "\033[32mUsage1:\033[0m azkaban.sh 1 \033[32mor\033[0m azkaban.sh 0"
echo -e  "\033[32mUsage2:\033[0m azkaban.sh 1 w \033[32mor\033[0m azkaban.sh 0 w"
exit;
fi# 输入 1 为启动, 输入 0 为关闭
v1="web"
v2="exec"if [ $1 -eq 1 ]
then
stat="start-"
elif [ $1 -eq 0 ]
then
stat="shutdown-"
else
echo -e "\033[32mUsage:\033[0m azkaban.sh 1 \033[32mor\033[0m azkaban.sh 0"
exit;
ficd /opt/installs/azkaban/logs
# 传入第二个参数 w 代表 web-server , e 代表 exec-server 不传第二个默认全部启动/停止
if [ "$2" = 'w' ]
then
path1=/opt/installs/azkaban/${v1}-server/bin/${stat}${v1}.sh
echo -e "\033[32m${stat}${v1}.sh\033[0m"
sh  ${path1}
elif [ "$2" = 'e' ]
then
path2=/opt/installs/azkaban/${v2}-server/bin/${stat}${v2}.sh
echo -e "\033[32m${stat}${v2}.sh\033[0m"
sh  ${path2}
elif [ 'a'"$2"'a' = 'aa' ]
then
path1=/opt/installs/azkaban/${v1}-server/bin/${stat}${v1}.sh
echo -e "\033[32m${stat}${v1}.sh\033[0m"
sh  ${path1}
sleep 2
path2=/opt/installs/azkaban/${v2}-server/bin/${stat}${v2}.sh
echo -e "\033[32m${stat}${v2}.sh\033[0m"
sh  ${path2}
else
echo -e "\033[32mUsage1:\033[0m azkaban.sh 1 w \033[32mor\033[0m azkaban.sh 0 w"
echo -e "\033[32mUsage2:\033[0m azkaban.sh 1 e \033[32mor\033[0m azkaban.sh 0 e"
exit;
fisleep 2
echo -e "\033[32m-------------------jps--------------------\033[0m"
jps

配置脚本:

cd /usr/local/bin
将脚本放入进去chmod 777 azkaban.sh

创建logs目录:

cd /opt/installs/azkaban/
用于存储两个服务的日志
mkdir logs 

使用:

# 使用方法
# 1.启动azkaban
[root@hadoop10 ~]# azkaban.sh 1
# 单独启动Web
[root@hadoop10 ~]# azkaban.sh 1 w
# 单独启动exec
[root@hadoop10 ~]# azkaban.sh 1 e# 2.关闭azkaban
[root@hadoop10 ~]# azkaban.sh 0
# 单独关闭Web
[root@hadoop10 ~]# azkaban.sh 0 w
# 单独关闭exec
[root@hadoop10 ~]# azkaban.sh 0 e

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

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

相关文章

文档 | Rstudio下的轻量级单页面markdown阅读器 markdownReader

需求:在写R数据分析项目的时候,代码及结果的关键变化怎么记录下来?最好git能很容易的跟踪版本变化。 markdown 是最理想的选择,本文给出一种Rstuidio下的轻量级md阅读器实现:markdownReader。书写md还是在Rstudio。更…

SonarQube相关的maven配置及使用

一、maven 全局配置 <settings><pluginGroups><pluginGroup>org.sonarsource.scanner.maven</pluginGroup></pluginGroups><profiles><profile><id>sonar</id><activation><activeByDefault>true</acti…

Arduino Uno简介与使用方法

目录 一、Arduino Uno概述 1. 硬件特性 2. 开发环境 二、Arduino Uno的基本使用方法 1. 硬件连接 2. 软件编程 三、Arduino Uno编程基础 1. 基本语法 2. 常用函数 四、Arduino Uno应用举例 1. LED闪烁 2. 温度检测 3. 超声波测距 五、Arduino Uno的扩展与应用 1…

UniApp | 从入门到精通:开启全平台开发的大门

UniApp | 从入门到精通:开启全平台开发的大门 一、前言二、Uniapp 基础入门2.1 什么是 Uniapp2.2 开发环境搭建三、Uniapp 核心语法与组件3.1 模板语法3.2 组件使用四、页面路由与导航4.1 路由配置4.2 导航方法五、数据请求与处理5.1 发起请求5.2 数据缓存六、样式与布局6.1 样…

【人工智能】Python实现时序数据预测:ARIMA与LSTM的对比

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 时序数据预测是数据科学中的一个重要任务,广泛应用于金融市场预测、天气预报、销售预测等领域。常见的时序数据预测方法包括传统统计学模型…

滑动窗口。

1456 定长子串中元音的最大数目 采用滑动窗口。每次移动一个位置&#xff0c;判断当前窗口内的子串内目标元素的个数&#xff0c;若比之前更大就更新结果。 如何判断是否更新结果&#xff1f;也即&#xff0c;如何判断当前窗口内所含目标元素个数&#xff0c;是否为遍历到这个…

公共数据授权运营系统建设手册(附下载)

在全球范围内&#xff0c;许多国家和地区已经开始探索公共数据授权运营的路径和模式。通过建立公共数据平台&#xff0c;推动数据的开放共享&#xff0c;促进数据的创新应用&#xff0c;不仅能够提高政府决策的科学性和公共服务的效率&#xff0c;还能够激发市场活力&#xff0…

java 常量池详解

目录 java 常量池详解一 静态常量池&#xff08;Static Constant Pool&#xff09;1.1 概述1.2 存储内容1.3 特点1.4 示例 二 运行时常量池&#xff08;Runtime Constant Pool&#xff09;2.1 概述2.2 存储内容2.3 特点2.4 示例 三 基础类型常量池&#xff08;Primitive Type C…

电脑主机后置音频插孔无声?还得Realtek高清晰音频管理器调教

0 缘起 一台联想电脑&#xff0c;使用Windows 10 专业版32位&#xff0c;电脑主机后置音频插孔一直没有声音&#xff0c;所以音箱是接在机箱前面版的前置音频插孔上的。 一天不小心捱到了音箱的音频线&#xff0c;音频线头断在音频插孔里面了&#xff0c;前置音频插孔因此用不…

【微服务】1、引入;注册中心;OpenFeign

微服务技术学习引入 - 微服务自2016年起搜索指数持续增长&#xff0c;已成为企业开发大型项目的必备技术&#xff0c;中高级java工程师招聘多要求熟悉微服务相关技术。微服务架构介绍 概念&#xff1a;微服务是一种软件架构风格&#xff0c;以专注于单一职责的多个响应项目为基…

UDP_TCP

目录 1. 回顾端口号2. UDP协议2.1 理解报头2.2 UDP的特点2.3 UDP的缓冲区及注意事项 3. TCP协议3.1 报头3.2 流量控制2.3 数据发送模式3.4 捎带应答3.5 URG && 紧急指针3.6 PSH3.7 RES 1. 回顾端口号 在 TCP/IP 协议中&#xff0c;用 “源IP”&#xff0c; “源端口号”…

《Spring Framework实战》2:Spring快速入门

欢迎观看《Spring Framework实战》视频教程 Spring快速入门 目录 1. Java™开发套件&#xff08;JDK&#xff09; 2. 集成开发人员环境&#xff08;IDE&#xff09; 3. 安装Maven 4. Spring快速入门 4.1. 开始一个新的Spring Boot项目 4.2. 添加您的代码 4.3. 尝…

Kafka集群部署与安装

一、什么是Kafka Kafka是一个Pub-Sub的消息系统&#xff0c;无论是发布还是订阅&#xff0c;都须指定Topic。 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者大规模的网站中的所有动作流数据 二、JMS&#xff1a;Java Message Service Java消息服…

利用Deeplearning4j进行 图像识别

目录 图像识别简介 神经网络 感知器 前馈神经网络 自动编码器 受限玻尔兹曼机 深度卷积网络 理解图像内容以及图像含义方面&#xff0c;计算机遇到了很大困难。本章先介绍计算机理解图像教育方面 遇到的难题&#xff0c;接着重点讲解一个基于深度学习的解决方法。我们会…

PTA DS 基础实验3-2.1 一元多项式求导

基础实验3-2.1 一元多项式求导 分数 20 全屏浏览 切换布局 作者 DS课程组 单位 浙江大学 设计函数求一元多项式的导数。 输入格式: 以指数递降方式输入多项式非零项系数和指数&#xff08;绝对值均为不超过1000的整数&#xff09;。数字间以空格分隔。 注意&#xff1a…

redis源码系列--(四)--redis cluster

本文主要记录redis cluster相关流程 2024/11/11 10:19 redis cluster命令文档&#xff1a;https://redis.io/docs/latest/commands/cluster-failover/ redis集群模式和哨兵模式是不同的模式&#xff0c;别搞混了 --chatgpt https://blog.csdn.net/zzti_erlie/article/detail…

vue elementUI Plus实现拖拽流程图,不引入插件,纯手写实现。

vue elementUI Plus实现拖拽流程图&#xff0c;不引入插件&#xff0c;纯手写实现。 1.设计思路&#xff1a;2.设计细节3.详细代码实现 1.设计思路&#xff1a; 左侧button列表是要拖拽的组件。中间是拖拽后的流程图。右侧是拖拽后的数据列表。 我们拖动左侧组件放入中间的流…

java基础学习(接口和抽象类的区别)

1.接口和抽象类的区别 它们都无法直接实例化 接口&#xff1a;使用 interface 关键字定义&#xff0c;接口中的所有方法默认是 public abstract&#xff0c;即使不写修饰符。接口不包含任何实现代码。抽象类&#xff1a;使用 abstract 关键字定义&#xff0c;可以包含抽象方法…

DC系列之DC-8渗透测试

DC-8 靶机渗透测试实战 靶机下载地址&#xff1a; https://download.vulnhub.com/dc/DC-8.zip&#xff08;下载速度慢可以用迅雷下载&#xff09; 一、实验环境 实验环境&#xff1a; kali2024&#xff1a;192.168.234.145&#xff08;nat模式&#xff09; 靶机环境DC-7&#…

自定义有序Map

package cn.ziqirj.common.utils;import lombok.Getter; import lombok.Setter;import java.util.ArrayList; import java.util.List;/*** 模拟Map集合&#xff0c;key不可重复&#xff0c;按插入顺序排序* author zhangji** param <T>*/ public class CustomOrderlyMap&…