目录
一、azkaban的简介
二、azkaban的系统架构
三、azkaban的安装方式
3.1 Solo Server安装
3.1.1 Solo Server简介
3.1.2 安装步骤
3.2 Multi exec Server安装方式
3.2.1 节点布局
3.2.2 配置mysql
3.2.3 配置web server
3.2.4 配置exec server
四、azkaban的应用
4.1、Flow1.0版本的job流
4.1.1 说明
4.1.2 案例演示1:打印hello world
4.1.3 案例演示2之调用shell指令
4.1.4 案例演示2之执行mr程序
4.1.5 案例演示4之工作流演示
4.1.6 azkaban调度hive脚本
4.1.7 azkaban定时调度任务
4.2、 Flow2.0版本的flow流
五、 azkaban的邮箱警报
六、azkaban的电话报警
一、azkaban的简介
1)官网
https://azkaban.github.io/
Azkaban是linkedIn创建的批处理工作流任务调度程序,用于运行Hadoop任务。阿兹卡班通过工作依赖关系来解决排序问题,并提供一个易于使用的web用户界面来维护和跟踪您的工作流程。
2)产生背景
1. 一个完整的大数据分析系统通常都是由大量任务单元组成:shell脚本程序,mapreduce程序、hive脚本、spark程序等。 2. 各任务单元之间存在时间先后及前后依赖关系:先后关系、依赖关系、定时执行。 3. 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。
3)azkaban的特点
兼容Hadoop的任何版本 易于使用的web UI 简单的web和http工作流上传 项目工作区 调度的工作流 模块化和pluginable 身份验证和授权 跟踪用户 *** 作 邮件提醒失败和成功 SLA警报和自动杀死 重新尝试失败的作业
4)azkaban有oozie的比较
两者在功能方面大致相同,只是Oozie底层在提交Hadoop Spark作业是通过org.apache.hadoop的封装好的接口进行提交,而Azkaban可以直接 *** 作shell语句。在安全性上可能Oozie会比较好。 工作流定义:Oozie是通过xml定义的而Azkaban为properties来定义。 部署过程:Oozie的部署相对困难些,同时它是从Yarn上拉任务日志。 Azkaban中如果有任务出现失败,只要进程有效执行,那么任务就算执行成功,这是BUG,但是Oozie能有效的检测任务的成功与失败。 *** 作工作流:Azkaban使用Web *** 作。Oozie支持Web,RestApi,Java API *** 作。 权限控制:Oozie基本无权限控制,Azkaban有较完善的权限控制,供用户对工作流读写执行 *** 作。 Oozie的action主要运行在hadoop中而Azkaban的actions运行在Azkaban的服务器中。 记录workflow的状态:Azkaban将正在执行的workflow状态保存在内存中,Oozie将其保存在Mysql中。 出现失败的情况:Azkaban会丢失所有的工作流,但是Oozie可以在继续失败的工作流运行
5)常见的调度系统
简单的任务调度:直接使用linux的crontab来定义、shell和python脚本实现 现成开源任务调度: oozie、azkaban和airflow等 复杂的任务调度:自研调度平台二、azkaban的系统架构
azkaban由三个组件构成 1. web server: 提供了webui接口,用于接收客户端传入的job作业,以及向exec server分发作业 2. exec server : 接收web server分发的作业,并执行。 3. mysql :用于管理Web 和 Exec之间的数据共享和部分状态的同步。三、azkaban的安装方式
三种方式,分别是源码安装方式、solo模式、multi exec server模式 1.源码安装模式,参考文档。 2.solo模式: 单机模式,指的是azkaban的所有的进程都在一台机器上,而且只有一个exec server 3.multi exec server模式 :指的是exec server有多个,分布在不同的机器节点上3.1 Solo Server安装 3.1.1 Solo Server简介
这种Solo Server服务是azkaban的单机版,即是单实例,它安装简单,便于学习。他的优点如下:
- 安装简单:不需要mysql实例,它内置h2来做存储。 - 启动简单:web server和executor server都运行在相同进程中。 - 功能齐全:它包含所有azkaban的特征。你可以使用azkaban用这种通用方法并为其安装插件。3.1.2 安装步骤
1)上传、解压、并更名
[root@xxx01 ~]# tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C /usr/local/ [root@xxx01 ~]# cd /usr/local/ [root@xxx01 local]# mv azkaban-solo-server-0.1.0-SNAPSHOT/ azkaban-solo
2)配置环境变量
[root@xxx01 ~]# vim /etc/profile #azkaban environment export AZKABAN_HOME=/usr/local/azkaban-solo export PATH=$AZKABAN_HOME/bin:$PATH [root@xxx01 ~]# source /etc/profile
3)添加用户
[root@xxx01 ~]# vim $AZKABAN_HOME/conf/azkaban-users.xml 在第四行上添加如下内容:
到此为止,solo模式安装成功
4)启动azkaban : 注意 必须在azkaban的家里运行启动脚本
[root@xxx01 azkaban-solo]# ./bin/start-solo.sh
5)打开浏览器
输入ip:8081 如果能打开,就表示安装成功3.2 Multi exec Server安装方式 3.2.1 节点布局
xxx01 webserver xxx02 execserver xxx03 execserver3.2.2 配置mysql
步骤1)找到create-all-sql-0.1.0-SNAPSHOT.sql脚本
方式1: 上传安装包里的azkaban-db-0.1.0-SNAPSHOT.tar.gz,在linux上解压,进入里面去找 方式2: 在windows上解压,然后进入里面找到脚本
步骤2)进入mysql,创建一个azkaban库
create database azkaban;
步骤3)执行脚本
use azkaban; source /root/create-all-sql-0.1.0-SNAPSHOT.sql
步骤4)保证azkaban这个库是远程授权的
grant all privileges on *.* to root@'%' identified by '@Mmforu45';
步骤5) 修改mysql的配置
(建议修改,如果在重启服务时,报错,就不要修改了)
[root@xxx03 azkaban]# vi /etc/my.cnf 在[mysqld]下添加 max_allowed_packet=1024M [root@xxx03 ~]# systemctl restart mysqld3.2.3 配置web server
步骤1)上传、解压、更名
[root@xxx01 ~]# tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /usr/local/ [root@xxx01 ~]# cd /usr/local/ [root@xxx01 local]# mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web
步骤2)配置环境变量(配不配无所谓)
步骤3)导入mysql的驱动包
进入azkaban-web目录下,创建extlib目录,并上传mysql的驱动jar包到extlib目录下 [root@xxx01 local]# cd azkaban-web [root@xxx01 azkaban-web]# mkdir extlib
步骤4)生成秘钥
[root@qphone01 azkaban-web]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA 需要指定秘钥库指令,以及再次确认秘钥库指令,都是123456 一路回车,直到出现“是否正确”,回答y即可
步骤5) 配置azkaban.properties
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/usr/local/azkaban-web/web default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/usr/local/azkaban-web/conf/azkaban-users.xml # Loader for projects executor.global.properties=/usr/local/azkaban-exec/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.ssl.port=8443 jetty.port=8081 jetty.keystore=keystore jetty.password=123456 jetty.keypassword=123456 jetty.truststore=keystore jetty.trustpassword=123456 # Azkaban Executor settings # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=xxx03 mysql.database=azkaban mysql.user=root mysql.password=@Mmforu45 mysql.numconnections=100 #Multiple Executor azkaban.use.multiple.executors=true #azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1 azkaban.executorselector.comparator.Memory=1 azkaban.executorselector.comparator.LastDispatched=1 azkaban.executorselector.comparator.CpuUsage=1
步骤6) 配置azkaban-users.xml
添加admin用户
3.2.4 配置exec server
步骤1)上传、解压、更名
[root@xxx02 ~]# tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /usr/local/ [root@xxx02 ~]# cd /usr/local/ [root@xxx02 local]# mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec
步骤2)进入azkaban-exec目录下,创建extlib目录,将mysql的驱动包导入到此目录下
[root@xxx02 local]# cd azkaban-exec [root@xxx02 azkaban-exec]# mkdir extlib
步骤3) 修改azkaban.properties
[root@xxx02 azkaban-exec]# vi conf/azkaban.properties
修改为下面的内容(注意和你的机器的路径,密码要匹配)
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=/usr/local/azkaban-web/web default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=/usr/local/azkaban-web/conf/azkaban-users.xml # Loader for projects executor.global.properties=/usr/local/azkaban-exec/conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=false jetty.maxThreads=25 jetty.port=8081 # Where the Azkaban web server is located azkaban.webserver.url=http://xxx01:8081 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban plugin settings azkaban.jobtype.plugin.dir=/usr/local/azkaban-exec/plugins/jobtypes/ # Azkaban mysql settings by default. Users should configure their own username and password. #azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus database.type=mysql mysql.port=3306 mysql.host=xxx03 mysql.database=azkaban mysql.user=root mysql.password=@Mmforu45 mysql.numconnections=100 # Azkaban Executor settings executor.port=12321 executor.maxThreads=50 executor.flow.threads=30
5)修改插件文件
[root@xxx02 azkaban-exec]# vi ./plugins/jobtypes/commonprivate.properties set execute-as-user execute.as.user=false memCheck.enabled=false #添加内存检查关闭 ,否则报错不足3G
到此为止,azkaban-exec配置好了,就差xxx03了,我们可以scp到另一台机器上
[root@xxx02 azkaban-exec]# cd .. [root@xxx02 local]# scp -r azkaban-exec xxx03:/usr/local/
6)启动测试(建议先重启虚拟机)
zkaban启动的顺序为,先启动executor,再启动web。否则web工程会因为找不到executor而启动失败。
先启动两个exec
[root@xxx02 ~]# cd /usr/local/azkaban-exec [root@xxx02 azkaban-exec]# ./bin/start-exec.sh [root@xxx03 ~]# cd /usr/local/azkaban-exec [root@xxx03 azkaban-exec]# ./bin/start-exec.sh
然后查看元数据表executors
登录你的mysql 查看executors表里的两个active是不是1,如果不是,请修改为1
然后再启动web-server
[root@xxx01 ~]# cd /usr/local/azkaban-web [root@xxx01 azkaban-web]# ./bin/start-web.sh
然后开心的启动webui吧,xxxxx:8081
四、azkaban的应用到目前为止,azkaban的工作flow机制分为两种flow机制,一个是比较旧的job流,一个是比较新的flow流。
job流,称之为flow1.0版本,flow流,称之为flow2.0版本
4.1、Flow1.0版本的job流 4.1.1 说明1. azkaban的job流文件,后缀是.job 里面必须要有一个type属性 必须赋值 值可以是:command,java,pig中的一个 2. azkaban执行的job必须要提前打包,打包的格式必须是zip格式 3. 流文件里的书写格式: 1)一定要注意行末不要有空格 2)utf-8编码集,如果在window上实在不行,可以上传到linux进行zip压缩,然后下载到windows上,再上传到azkaban上4.1.2 案例演示1:打印hello world
1)创建一个后缀为.job的文件helloworld,输入内容如下:
type=command command=echo "hello world"
注意:编码集的问题,最终一定要保证是utf-8编码格式
2) 压缩成zip包
3)上传到azkaban上
1. 首先创建项目 2. 上传到项目下 3. 执行run job 4. 进入就绪界面后,点击execute,运行
注意:
灰色:表示未运行 绿色:运行通过 红色:运行失败 蓝色:正在运行中4.1.3 案例演示2之调用shell指令
1)编写一个shell脚本calculate.sh
#!/usr/bin/bash sum=0 for i in $(seq 1 100) do sum=$(( $sum + $i )) done echo $sum >> /root/sum.log
2)编写job文件a2.job,调用shell脚本
type=command command=/usr/bin/bash calculate.sh
3)打包,上传,测试
4.1.4 案例演示2之执行mr程序1)编写job文件a3.job
type=command command=/usr/local/hadoop/bin/hadoop jar hadoop-mapreduce-examples-2.6.0-cdh5.13.2.jar wordcount /input /output
2)将hadoop-mapreduce-examples-2.6.0-cdh5.13.2.jar找到,并下载到和a3.job相同的位置
3)打包,上传,测试
注意:hdfs、yarn要启动、input目录是否存在,上传要统计的文件
4.1.5 案例演示4之工作流演示1)创建b.sh
#!/bin/bash echo hello_bbb >/root/b.log sleep 30s
2)创建jobB.job
type=command command=/bin/bash b.sh
3) 创建a.sh
#!/bin/bash echo hello_aaa >/root/a.log
4) 创建jobA.job
type=command dependencies=jobB command=/bin/bash a.sh
5) 打包,上传,测试
4.1.6 azkaban调度hive脚本1)创建一个hql脚本:create_table.hql
create database mydb3; use mydb3; create table if not exists test1( sid int, sname string ) row format delimited fields terminated by ',';
2)创建一个job文件:create_table.job
type=command command=/usr/local/hive/bin/beeline -u jdbc:hive2://qianfeng02:10000 -n root -f create_table.hql
注意:需要在qianfeng02上开启hiveserver2服务项。
3)打包,上传执行,然后查看吧
4.1.7 azkaban定时调度任务1)创建一个sh脚本:testcrond.sh
#!/bin/bash echo "aaaaa" >>/root/crond.log
2)创建一个job文件:testcrond.job
type=command command=/usr/bin/bash testcrond.sh
3) 打包,上传到azkaban上
4)点击run job或者是execute flow 进入界面,不要立即点击execute,而是点击schedule, 设置定时任务
5)设置完之后,要点击定时任务下面的schedule按钮,继续点击execute
6)来到新界面后,需要点击FLOW列里的job名称,进入执行计划界面
7)再点击Schedule/execute Flow,进入最后界面,点击execute
4.2、 Flow2.0版本的flow流Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用 Flow 2.0,因为 Flow 1.0 会在将来的版本被移除。Flow 2.0 的主要设计思想是提供 1.0 所没有的流级定义。用户可以将属于给定流的所有 job / properties 文件合并到单个流定义文件中,其内容采用 YAML 语法进行定义,同时还支持在流中再定义流,称为为嵌入流或子流。4.2.1 基本结构
项目 zip 将包含多个流 YAML 文件,一个项目 YAML 文件以及可选库和源代码。Flow YAML 文件的基本结构如下:
1. 所有的workflow都是在一个文件里写的 2. 文件以流名称为后缀的,如:my-flow-name.flow; 3. 包含 DAG 中的所有节点; 4. 每个节点可以是不同的类型,比如可以是flow,hive,hadoopjava,pig,noop,command 5. 每个节点可以拥有 name, type, config, dependsOn 和 nodes sections 等属性; 6. 通过列出 dependsOn 指定依赖关系 7. 包含与流相关的其他配置 8. flow1.0里的属性都移植到config下,config下是以键值对的形式书写的。 注意:还需要单独写一个xxxx.project文件指定azkaban使用的是workflow2.0版本 azkaban-flow-version: 2.04.3 YAML语法
想要使用 Flow 2.0 进行工作流的配置,首先需要了解 YAML 。YAML 是一种简洁的非标记语言,有着严格的格式要求的,如果你的格式配置失败,上传到 Azkaban 的时候就会抛出解析异常。
4.3.1 基本规则1. 大小写敏感2. 使用缩进表示层级关系 ;3. 缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级;4. 使用#表示注释 ;5. 字符串默认不用加单双引号,但单引号和双引号都可以使用,双引号表示不需要对特殊字符进行转义;6. YAML 中提供了多种常量结构,包括:整数,浮点数,字符串,NULL,日期,布尔,时间。4.3.2 对象的写法
# value 与 : 符号之间必须要有一个空格 key: value4.3.3 map的写法:
# 写法一 同一缩进的所有键值对属于一个map key: key1: value1 key2: value2 # 写法二 {key1: value1, key2: value2}4.3.4 数组的写法
# 写法一 使用一个短横线加一个空格代表一个数组项 - a - b - c # 写法二 [a,b,c]4.3.5 单双引号
s1: '内容n 字符串' s2: "内容n 字符串" 转换后: { s1: '内容\n 字符串', s2: "内容n 字符串" }4.3.6 特殊符号
一个 YAML 文件中可以包括多个文档,使用 `---` 进行分割。4.3.7 配置引用
Flow 2.0 建议将公共参数定义在 `config` 下,并通过 `${}` 进行引用。4.4 案例介绍 4.4.1 简单案例调度
1)编写一个xxxx.flow文件,比如simple.flow (注意字符集,TAB键等问题)
nodes: - name: jobA type: command config: command: echo "this is a simple test"
2)编写版本文件:xxx.project ,比如叫same.project
azkaban-flow-version: 2.0
3)打包成xxx.zip文件,上传,测试
4.4.2 多任务调度1)编写一个xxxx.flow文件,比如multi.flow (注意字符集,TAB键等问题)
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"
2)编写版本文件:xxx.project ,比如叫same.project
azkaban-flow-version: 2.0
3)打包成xxx.zip文件,上传,测试
4.4.3 内嵌流调度1)编写一个xxxx.flow文件,比如embedded.flow (注意字符集,TAB键等问题)
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 ${prop}" dependsOn: - jobA - name: jobA type: command config: command: echo "This is job A"
2)编写版本文件:xxx.project ,比如叫same.project
azkaban-flow-version: 2.0
3)打包成xxx.zip文件,上传,测试
五、 azkaban的邮箱警报1)注册一个邮箱
建议是新浪、网易等
2)开启邮箱的第三方客户端协议pop3/smtp/imap
需要手机发送短信进行开启,有一个密码,需要记住。可以备份到电脑,防止忘记。
3)azkaban作为客户端的配置:conf/azkaban.properties
mail.sender=你的邮箱 mail.host=smtp.sina.cn mail.user=你的邮箱 mail.password=开启pop3/smtp/imap时的密码 下面两个属性,可配可不赔,在azkaban3.0版本以后失效 job.failure.email=mmforu@sina.cn job.success.email=mmforu@sina.cn
4)重启azkaban的服务
5)案例测试
1. 上传一个案例 2. 进入执行界面,点击Notification 3. 配置失败和成功时通知的邮箱 4. 执行六、azkaban的电话报警
1)注册瑞祥云账户,最好是邮箱认证
2)进入CA导航里的集成界面,选择email
3)添加相应信息,比如应用名称、邮箱(睿象云的邮箱),然后点击获取AppKey按钮
4)点击配置中的通知策略,配置相应的状态信息,点击保存
5)然后查看一下生成的睿象云的邮箱,复制
6)测试azkaban
1. 上传一个案例 2. 进入执行界面,点击Notification 3. 配置失败和成功时通知的邮箱:睿象云的邮箱 4. 执行
(>...<,距离元旦三天假还剩一天哦~,冲冲冲~)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)