1.Azkaban介绍
1. Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系,这个依赖关系必须是无环的,否则会被视为无效的工作流。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
2. Azkaban由三个关键组件构成:
- MySQL关系型数据库:Azkaban使用数据库存储大部分状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库。
- AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它负责project管理、用户登录认证、定时执行工作流、跟踪工作流执行进度等一系列任务。
- AzkabanExecutorServer:早期版本的Azkaban在单个服务中具有AzkabanWebServer和AzkabanExecutorServer功能,目前Azkaban已将AzkabanExecutorServer分离成独立的服务器。其好处是某个任务流失败后,可以更方便的将其重新执行,便于Azkaban升级。
3. 在版本3.0中,Azkaban的两种运行模式:
- solo server mode:最简单的模式,数据库内置的H2数据库,AzkabanWebServer和AzkabanExecutorServer都在一个进程中运行,任务量不大项目可以采用此模式(特别适合初学者学习使用,功能齐全)。
- multiple executor mode: 适用于更多的生产环境,其使用MySQL 来进行元数据管理并且支持主从结构。在这种模式下web server和executor server 独立运行在不同的主机中。这种模式带来的好处是可以让Azkaban更加健壮和可扩展
2.安装前准备工作
#yum install git
#yum install gcc-c++
(我先前配置了java,还有maven)
[root@xq01 packages]# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
[root@xq01 packages]# mvn -v
Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:14+08:00)
Maven home: /opt/modules/maven
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /opt/modules/jdk1.8.0_191/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-693.el7.x86_64", arch: "amd64", family: "unix"
3.下载安装azkaban
1. 下载azkaban的tar.gz包。
然后解压
#tar -zxvf azkaban-3.79.0.tar.gz
#cd azkaban-3.79.0
2. 在编译源码之前,先要下载gradle的依赖包,至于要什么版本,查看如下:
./gradlew build installDist
如下地址是Gradle的官方下载地址:https://services.gradle.org/distributions
3. 然后进入到
把gradle-4.6-all.zip放入到该目录
4. 修改配置文件:
5. 返回到azkaban解压目录
[root@xq01 azkaban-3.79.0]# ./gradlew build installDist -x test
编译成功后,可以找到整个架构的每个部分都会多出一个build文件夹,这才是我们要安装的文件
4. Azkaban-solo-server安装
1.在解压目录新建packages文件,然后把
./azkaban-solo-server/build/distributions/*.tar.gz(zip)
./azkaban-web-server/build/distributions/*.tar.gz(zip)
./azkaban-executor-server/build/distributions/*.tar.gz(zip)
./azkaban-3.79.0/azkaban-db/build/sql/create-all-sql-0.1.0-SNAPSHOT.sql
这四个文件cp到packages目录下,然后解压那3个tar.gz包
2.进入mysql: #mysql -u root -p
mysql> create database azkaban;
mysql> use azkaban;
mysql> source /opt/software/azkaban-3.79.0/packages/create-all-sql-0.1.0-SNAPSHOT.sql;
mysql> show tables;
3.到pacakages/azkaban-web-server-0.1.0-SNAPSHOT 目录,生成密钥文件:
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
4.打开azkaban-solo-server-0.1.0-SNAPSHOT/conf/azkaban.properties文件(这里主要配置的是数据库驱动和证书认证)
default.timezone.id=Asia/Shanghai
#默认的h2改成我们自己的数据库
database.type=mysql
mysql.port=3306
## 这里最好配置IP地址
mysql.host=192.168.50.132
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
#jetty.use.ssl=false
#jetty.maxThreads=25
#jetty.port=8081
#======修改jetty=======
jetty.use.ssl=true
jetty.maxThreads=25
jetty.ssl.port=8666
jetty.port=8081
#注意这里要统一配置好keystore文件存储的路径
jetty.keystore=keystore
jetty.password=123456
jetty.keypassword=123456
#注意这里要统一配置好keystore文件存储的路径
jetty.truststore=keystore
jetty.trustpassword=123456
5.从azkaban.properties文件内容可以看出还有一个文件是用来管理登录的用户的,那就是azkaban-users.xml,我们可以在这个文件中配置密码:
6.返回azkaban-solo-server-0.1.0-SNAPSHOT目录,在这个目录下启动solo
[root@xq01 azkaban-solo-server-0.1.0-SNAPSHOT]# bin/start-solo.sh
[root@xq01 azkaban-solo-server-0.1.0-SNAPSHOT]# jps
2057 AzkabanSingleServer
2076 Jps
#如果进程没有启动 可以在当前目录下会自动创建启动脚本的日志:
[root@xq01 azkaban-solo-server-0.1.0-SNAPSHOT]# ll
total 36
drwxr-xr-x 3 root root 67 Dec 3 17:22 bin
drwxr-xr-x 2 root root 82 Dec 4 11:56 conf
-rw-r--r-- 1 root root 5 Dec 4 11:57 currentpid
drwxr-sr-x 2 root root 6 Dec 4 11:57 executions
-rw-r--r-- 1 root root 5 Dec 4 11:57 executor.port
drwxr-xr-x 2 root root 4096 Dec 3 17:22 lib
drwxr-xr-x 2 root root 35 Dec 4 11:57 local
drwxr-xr-x 3 root root 22 Dec 3 17:22 plugins
drwxr-xr-x 2 root root 6 Dec 4 11:57 projects
-rw-r--r-- 1 root root 16797 Dec 4 11:57 soloServerLog__2019-12-04+11:57:11.out #日志文件
drwxr-xr-x 2 root root 4096 Dec 3 17:22 sql
drwxr-xr-x 2 root root 6 Dec 4 11:57 temp
drwxr-xr-x 6 root root 73 Dec 3 17:22 web
注意:上面的solo-server会创建一个叫AzkabanSingleServer的进程,并在启动一会之后主动退出,这个操作可以用来检查我们的配置文件是否正确。而我们真正要启动的是一个Executor 进程和 Web进程
5.web/executor-server安装
将solo-server下的azkaban.properties文件和azkaban-users.xml文件拷贝到web/conf 文件夹下
#先启动executor,再启动web
[root@xq01 azkaban-exec-server-0.1.0-SNAPSHOT]# ./bin/start-exec.sh
4774 AzkabanExecutorServer
4790 Jps
[root@azkabanvm azkaban-web-server-0.1.0-SNAPSHOT]# bin/start-web.sh
[root@azkabanvm azkaban-web-server-0.1.0-SNAPSHOT]# jps
3744 Jps
3336 AzkabanWebServer
注:我在启动的时候报各种错误
但是,我看到数据库里面有,看到,最后一个items,大小写不一样,没办法,自己就又创建了一个表,
mysql> CREATE TABLE ramp_exceptional_flow_Items (
-> rampId VARCHAR(45) NOT NULL,
-> flowId VARCHAR(128) NOT NULL,
-> treatment VARCHAR(1) NOT NULL,
-> timestamp BIGINT NULL,
-> PRIMARY KEY (rampId, flowId)
-> );
Query OK, 0 rows affected (0.21 sec)
mysql> CREATE INDEX idx_ramp_exceptional_flow_Items ON ramp_exceptional_flow_Items (rampId, flowId);
Query OK, 0 rows affected (0.31 sec)
Records: 0 Duplicates: 0 Warnings: 0
然后,启动了executor,但是查看数据库状态是0,
,这个时候不能启动web,然后就手动更改为1,update azkaban.executors set active=1;
然后再访问浏览器,发现还是不行,看错误日志
,然后再访问地址的时候要加 https://xq01:8666, 然后就近登陆页面了。