一、前述

Azkaban是一个工作流调度工具,因为需要各个任务之间有依赖关系,传统的Crontab 任务已经不能满足。

所以需要建立一套工作流引擎。相比Ooize来说,Azkaban的优势是作为一个客户端来提供任务的提交。而Ooize是将任务随机分配到我们的集群环境中。

考虑到常用架构,所以我们选择Azkaban进行工作流引擎。但是网上的搭建教程总会有各种各样的问题,实在令人烦心。折腾了好几天,终于把Azkaban搭建成功,特将详细步骤描述如下。

这里给出一个建议,Azkaban千万不要用最新的搭建,因为你会有意想不到的坑。。

二、具体步骤

1、下载Azkaban的3.25.0的软件包 地址如下:

https://github.com/azkaban/azkaban/releases/tag/3.25.0

2、下载后上传到对应服务器 目录上面。本文地址目录为/mnt/data8/ire/

3、解压目录并重命名

tar - xf azkaban-3.25.0.tar.gz

mv azkaban-3.25.0 azkaban

4、对源码编译

./gradlew build 编译
./gradlew build -x test 忽略测试 (当上一个命令执行不成功再执行这个命令,上个执行成功后就不需要了,因为有的时候总卡在编译测试上面,没办法进行了)

./gradlew installDist 打包

5、新建azkaban编译后的运行目录

我在根目录/mnt/data8/ire/下新建目录azkaban-ire

mkdir azkaban-ire

6、将build后的tar包cp到azkaban-ire目录下

cp azkaban/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
cp azkaban/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
cp azkaban/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz azkaban-ire/
解压对应jar 包 并重命名(强力建议) 因为后面会有一堆绝对路径的引入,名字太长,太麻烦。效果如下

tar -xf azkaban-db-0.1.0-SNAPSHOT.tar.gz

tar -xf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

tar -xf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

mv azkaban-db-0.1.0-SNAPSHOT azkaban-db

mv azkaban-exec-server-0.1.0-SNAPSHOT azkaban-exec-server

mv azkaban-web-server-0.1.0-SNAPSHOT azkaban-web-server

7、导入Azkaban-sql

选择一个数据库,或者新建一个数据库为Azkaban 命令如下:

CREATE DATABASE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
GRANT ALL ON azkaban.* to 'azkaban'@'localhost' IDENTIFIED BY 'azkaban';
flush privileges;

use azkaban;
source azkaban-ire/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql

这里建议手动执行吧 执行之前最好删除之前因为其他版本创建的表,如下:

drop table active_executing_flows;
drop table active_sla;
drop table execution_flows;
drop table execution_jobs;
drop table execution_logs;
drop table executor_events;
drop table executors;
drop table project_events;
drop table project_files;
drop table project_flows;
drop table project_permissions;
drop table project_properties;
drop table properties_index ;
drop table projects;
drop table properties;
drop table triggers;
drop table project_flow_files;
drop table project_versions;
drop table qrtz_blob_triggers,qrtz_calendars,qrtz_cron_triggers,qrtz_fired_triggers,qrtz_job_details,qrtz_locks,qrtz_paused_trigger_grps,qrtz_scheduler_state,qrtz_simple_triggers,qrtz_simprop_triggers,qrtz_triggers;

在create-all-sql-0.1.0-SNAPSHOT.sql里面最后一行可以去掉 ,因为已经有这个字段了。

 8、配置azkaban-web-server

 8.1、在azkaban-web-server中新建conf目录,结构如下

mkdir conf

├── conf
│ ├── azkaban-users.xml
│ ├── azkaban.properties
│ ├── global.properties
│ └── log4j.properties

azkaban-users.xml

<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
<user username="metrics" password="metrics" roles="metrics"/>
<user username="admin" password="admin" roles="admin,metrics" />
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>

azkaban.properties

# Azkaban Personalization Settings
#设置项目名称
azkaban.name=Test
#设置项目副标题
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#这里一定写成绝对路径 否则页面会找不到对应地址
web.resource.dir=/mnt/data8/ire/azkaban-ire/azkaban-web-server/web/
#一定要设置为上海,否则按美国时间执行
default.timezone.id=Asia/Shanghai # Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#这里一定写成绝对路径
user.manager.xml.file=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/azkaban-users.xml # Loader for projects
#这里一定写成绝对路径 否则页面会找不到对应地址
executor.global.properties=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/global.properties
azkaban.project.dir=projects database.type=mysql
mysql.port=3306
mysql.host=127.0.0.1
mysql.database=azkaban
mysql.user=root
mysql.password=root
mysql.numconnections=100 # Velocity dev mode
velocity.dev.mode=false # Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.use.ssl=false
jetty.port=8081
jetty.keystore=keystore
jetty.password=password
jetty.keypassword=keypassword
jetty.truststore=keystore
jetty.trustpassword=password
jetty.excludeCipherSuites=SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA # Azkaban Executor settings
executor.port=12321 # mail settings
#mail.sender=email账号
#mail.host=email服务器
#mail.user=email账号
#mail.password=email密码
mail.sender=
mail.host=
job.failure.email=
job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats
jetty.connector.stats=true
executor.connector.stats=true

global.properties (置空即可)

log4j.properties

log4j.rootLogger=INFO,C
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.err
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

8.2、生成keystore文件。

在conf目录下执行
keytool -keystore keystore -alias azkaban -genkey -keyalg RSA
具体执行效果如下:
Enter keystore password:    
    Re-enter new password:   
    What is your first and last name?  
      [Unknown]:  azkaban.test.com  
    What is the name of your organizational unit?  
      [Unknown]:  azkaban  
    What is the name of your organization?  
      [Unknown]:  test  
    What is the name of your City or Locality?  
      [Unknown]:  beijing  
    What is the name of your State or Province?  
      [Unknown]:  beijing  
    What is the two-letter country code for this unit?  
      [Unknown]:  CN  
    Is CN=azkaban.test.com, OU=azkaban, O=test, L=beijing, ST=beijing, C=CN correct?  
      [no]:  yes

Enter key password for <azkaban>  
            (RETURN if same as keystore password)

8.3、在azkaban-web-server中新建logs目录,用于记录azkaban运行日志结构如下:

currentpid是在启动的时候生成的,不用管。

9、配置azkaban-exec-server

9.1在azkaban-exec-server中的conf目录下配置 没有conf目录则创建,同时创建对应下面文件

├── conf
│ ├── azkaban.properties
│ ├── log4j.properties

azkaban.properties

# Azkaban
default.timezone.id=Asia/Shanghai # Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes # Loader for projects 绝对路径
executor.global.properties=/mnt/data8/ire/azkaban-ire/azkaban-web-server/conf/global.properties
azkaban.project.dir=projects database.type=mysql
mysql.port=3306
mysql.host=127.0.0.1
mysql.database=azkaban
mysql.user=root
mysql.password=root
mysql.numconnections=100 # Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30 # JMX stats
jetty.connector.stats=true
executor.connector.stats=true # uncomment to enable inmemory stats for azkaban
#executor.metric.reports=true
#executor.metric.milisecinterval.default=60000

log4j.properties

log4j.rootLogger=INFO,C
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.err
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

9.2 在azkaban-exec-server创建plugins/jobtypes 文件夹

mkdir -p plugins/jobtypes

在/jobtypes中生成commonprivate.properties文件 写入

execute.as.user=false

9.3 在azkaban-exec-server创建logs目录

9.4 最终azkaban-exec-server目录层级如下:

上图中圈出的即为创建相应文件夹后的格式,而 executors projects temp目录会在执行任务时创建 不用管。

 10、启动azkaban-web-server

一定要在bin层启动  不在bin目录里面启动  如下:

cd azkaban-web-server/

bin/start-web.sh

11、启动azkaban-exec-server

cd azkaban-exec-server/

bin/start-exec.sh

12、验证效果如下:

13、前端启动host:8081即可

 14、注意千万不要用firefox浏览器打开,用google,否则会出现如下界面。不兼容,导致Job不能查看。

【Azkaban搭建】---Azkaban 3.25.0搭建细则 超实用的更多相关文章

  1. Azkaban 2.5.0 搭建

    一.前言 最近试着参照官方文档搭建 Azkaban,发现文档很多地方有坑,所以在此记录一下. 二.环境及软件 安装环境: 系统环境: ubuntu-12.04.2-server-amd64 安装目录: ...

  2. Azkaban 2.5.0 搭建和一些小问题

    安装环境: 系统环境: ubuntu-12.04.2-server-amd64 安装目录: /usr/local/ae/ankaban JDK 安装目录: export JAVA_HOME=/usr/ ...

  3. Azkaban 3.73.1 集群搭建(Multiple Executor)

    一.简介 Azkaban是LinkedIn开源的任务调度框架,采用java编写 Azkaban功能和特点: 任务的依赖处理 任务监控,失败告警 任务流的可视化 任务权限管理 Azkaban具有轻量可插 ...

  4. 第九章 搭建Hadoop 2.2.0版本HDFS的HA配置

    Hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在hadoop1时代,只有一个NameNode.如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了.这是 ...

  5. varnish搭建cdn网络-------3.0.5版本

    CDN分发网络CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在 ...

  6. 用开源软件TrinityCore在Debian 10上搭建魔兽世界8.3.0.34220的服务器

    用开源软件TrinityCore在Debian 10上搭建魔兽世界8.3.0.34220的服务器 TrinityCore是魔兽世界(World of Warcraft)的开源的服务端.目前支持魔兽的3 ...

  7. AI识万物:从0搭建和部署手语识别系统 ⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 计算机视觉实战系列: https://www.showmeai.tech ...

  8. 深度学习环境搭建:Tensorflow1.4.0+Ubuntu16.04+Python3.5+Cuda8.0+Cudnn6.0

    目录 深度学习环境搭建:Tensorflow1.4.0+Ubuntu16.04+Python3.5+Cuda8.0+Cudnn6.0 Reference 硬件说明: 软件准备: 1. 安装Ubuntu ...

  9. Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

随机推荐

  1. codeforces——961B. Lecture Sleep

    本文为博主原创文章,未经允许不得转载. 我在csdn也同步发布了此文,链接 https://blog.csdn.net/umbrellalalalala/article/details/7989196 ...

  2. jsonp跨域获取数据小解

    jsonp跨域获取数据小解 由于浏览器有同源策略,所以要想获取非同源(协议,域名,端口三者有一不同都算非同源)的页面的数据,就得进行跨域 (1) jsonp原理 由于script标签的src属性可以访 ...

  3. oracle 触发器,当一个表更新或插入时将数据同步至另个库中的某个表中

    有两个表分别是 A用户下的 T_SRC_WEATHER_TSPG字段如图, B用户下的t_src_weather 表,如图: 要求,当A用户下的T_SRC_WEATHER_TSPG表有插入或者更新数据 ...

  4. HTML学习笔记6:列表标签

    列表标签     什么是列表标签呢? 以平台区分有什么游戏? 手游 pc游戏 家用机游戏 掌机游戏 以游戏类型区分有什么游戏? RPG ARPG MMORPG ACT FPS 以上两种就是一种列表标签 ...

  5. Robot framework之元素定位实战

    1.1  id 和name 定位 Web页面都是由许多标签和元素组成的,每个标签或元素都是很多属性,好比一个人   id 和name 可以看作一个人的身份证号和姓名.下面看下教育局招生系统的用户名输入 ...

  6. JavaScript的数组知识案例之随机点名器

    本次分享JavaScript主要知识点涉及到for循环.if选择结构判断语句.数组的定义.定时器.清除定时器.日期对象的使用. 执行后效果图: 思路: 1.网页结构搭建: HTML 2.网页布局美化: ...

  7. Python_驻留机制

    #coding=utf-8 #coding:utf-8 #- * -coding:utf-8 - * - '''以上为注明字符串的编码格式''' #驻留机制 '''Python支持短字符串驻留机制,对 ...

  8. C# Ioc、DI、Unity、TDD的一点想法和实践

    面向对象设计(OOD)有助于我们开发出高性能.易扩展以及易复用的程序.其中,OOD有一个重要的思想那就是依赖倒置原则(DIP). 依赖倒置原则(DIP):一种软件架构设计的原则(抽象概念) 控制反转( ...

  9. ES的基本用法

    ES的基本概念 1> 集群和节点 一个es集群是由一个或多和es节点组成的集合 每一个集群都有一个名字, 如之前的wali 每个节点都有自己的名字, 如之前的master, slave1, sl ...

  10. MySQL复制进阶

    Ⅰ.背景 搭建MySQL复制环境非常简单 你的系统是否也是像我之前那么搭建的呢? 那么,你的复制系统是否出现过以下的情况呢? 复制报错,例如:1062,1032 主从数据不一致 Ⅱ.真正高可靠复制环境 ...