一、前述

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. 二叉树,AVL树和红黑树

    为了接下来能更好的学习TreeMap和TreeSet,讲解一下二叉树,AVL树和红黑树. 1. 二叉查找树 2. AVL树 2.1. 树旋转 2.1.1. 左旋和右旋 2.1.2. 左左,右右,左右, ...

  2. js中几种实用的跨域方法原理详解【转】

    源地址:http://www.cnblogs.com/2050/p/3191744.html 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通 ...

  3. php 阿里云短信服务及阿里大鱼实现短信验证码的发送

    一:使用阿里云的短信服务 ① 申请短信签名 ②申请短信模板 ③创建Access Key,获取AccessKeyId 与 AccessKeySecret.(为了安全起见,这里建议使用子用户的Access ...

  4. shell脚本头,#!/bin/sh与#!/bin/bash的区别.

    因为今天写了个小脚本,死活不成功,总是报文件或者目录不存在,问了一下我们马同学的正常写法,发现只有脚本头的区别,也就是今天本文要讲的#!/bin/sh与#!/bin/bash. 本文参考:https: ...

  5. java(一、概念和开发工具)

    Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式 ...

  6. 影响 MySQL Server 性能的相关因素

    MySQL 最多的使用场景是WEB 应用,那么我们就以一个WEB 应用系统为例,逐个分析其系统构成,进行经验总结,分析出数据库应用系统中各个环境对性能的影响. 商业需求对性能的影响 这里我们就拿一个看 ...

  7. Oracle-05:伪表dual

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 此乃这张表里的全部字段信息,此表无法做修改操作 为什么有伪表这个概念?????????? 因为sql92的一个 ...

  8. 对混合数值,字符,null的字段进行排序

    今天有个需求是进行排序.  这一列值是字符串类型的, 但是里面有数值型 比如"1" 和null类型的.  实现效果是需要 数值型的先按照数值的方式先排,然后字符串按照字符传排,最后 ...

  9. CentOS-7修改主机名

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=589 方法一(修改静态主机名): vi /etc/hostname 注:由于静态主机名是系统初始化时从/etc/ho ...

  10. MySQL中group_concat函数深入理解

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 一.MySQL中group_concat函数 完整的语法如下: gr ...