Azkaban3.x集群部署(multiple executor mode)
介绍
Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。 它有三个重要组件:
- 关系数据库(目前仅支持mysql)
- web管理服务器-AzkabanWebServer
- 执行服务器-AzkabanExecutorServer
Azkaban使用MySQL来存储它的状态信息,Azkaban Executor Server和Azkaban Web Server均使用到了MySQL数据库。
AzkabanExecutorServer在如下几个方面使用到了数据库:
- 获取project的信息
- 执行工作流
- 存储工作流运行日志
- 如果一个工作流在不同的执行器上运行,它将从DB中获取状态。
AzkabanWebServer在如下几个方面使用到了数据库:
- Project管理
- 跟踪工作流执行进度
- 访问历史工作流的运行信息
- 定时执行工作流任务
- 记录所有sla规则
AzkabanWebServer
AzkabanWebserver是整个Azkaban工作流系统的主要管理者,它负责project管理、用户登录认证、定时执行工作流、跟踪工作流执 行进度等一系列任务。同时,它还提供Web服务操作的接口,利用该接口,用户可以使用curl或其他ajax的方式,来执行azkaban的相关操作。操作包括:用户登录、创建project、上传workflow、执行workflow、查询workflow的执行进度、杀掉workflow等一系列操作,且这些操作的返回结果均是json的格式。
AzkabanExecutorServer
之所以将AzkabanWebServer和AzkabanExecutorServer分开,主要是因为在某个任务流失败后,可以更方便的将重新执行。而且也更有利于Azkaban系统的升级。
编译安装
1、下载源码
从github上下载azkaban官方源码,目前最新release为3.30.1
git clone git@github.com:azkaban/azkaban.git
2、编译
进入到下载的azkaban目录中进行编译:
# Build Azkaban
./gradlew build(这一步需要等待的时间略久,需要提前安装git、gcc等软件,否则会报错)
# Clean the build
./gradlew clean
# Build and install distributions
./gradlew installDist
# Run tests
./gradlew test
# Build without running tests
./gradlew build -x test
相关目录介绍如下:
azkaban-common : 常用工具类
azkaban-db : 对应的sql脚本
azkaban-Hadoop-secutity-plugin : hadoop有关kerberos插件
azkaban-solo-server: web和executor运行在同一进程的项目
azkaban-web-server:azkaban的web-server单独模块
azkaban-executor-server: azkaban的executor-server单独模块
azkaban-spi: azkaban存储接口以及exception类
将编译好的文件拷贝出来:
# mkdir Azkaban_3.30
# cp azkaban-master/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
# cp azkaban-master/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
# cp azkaban-master/azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
# cp azkaban-master/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz azkaban_3.30/
解压:
# cd azkaban_3.30
# tar xvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
# tar xvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
# tar xvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
# tar xvf azkaban-db-0.1.0-SNAPSHOT.tar.gz
配置mysql数据库
1、安装mysql数据库
这里省略安装步骤,使用版本的为5.7
2、创建数据库
创建一个azkaban的数据库:
mysql -uroot -p
> CREATE DATABASE azkaban;
授权:
> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'password';
> GRANT ALL ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
> flush privileges;
> FLUSH PRIVILEGES;
> EXIT
3、导入建表语句
mysql -uazkaban -p
> SOURCE azkaban_3.30/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;
配置Azkaban
这里将安装三个exec-server和一个web-server,相关组件分配如下:
本文将采用multiple executor mode安装模式,组件分配如下:
bd-dev-ops-170 172.31.217.170 azkaban-exec-server
bd-dev-ops-171 172.31.217.171 azkaban-exec-server
bd-dev-ops-172 172.31.217.172 azkaban-web-server azkaban-exec-server
bd-dev-ops-173 172.31.217.173 mysql-server
在172上创建/opt/Azkaban-web-server目录,把编译好的软件拷贝到该目录,包含以下目录:
bin 启动脚本存放目录
conf 配置文件存放目录(没有的话从solo-server的目录中拷贝过来)
lib 依赖jar包存放目录
extlib 附加jar包存放目录(没有的话手动创建)
plugins 插件安装目录
web web资源文件
在170,171,172上创建目录/opt/Azkaban-exec-server目录,把编译好的软件拷贝到该目录,包含以下目录:
bin 启动脚本存放目录
conf 配置文件存放目录(没有的话从solo-server的目录中拷贝过来)
lib 依赖jar包存放目录
extlib 附加jar包存放目录(没有的话手动创建)
plugins 插件安装目录
配置Azkaban Web Server
1、配置jetty ssl
# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: YY
What is the name of your organizational unit?
[Unknown]: YY
What is the name of your organization?
[Unknown]: YY
What is the name of your City or Locality?
[Unknown]: shanghai
What is the name of your State or Province?
[Unknown]: shanghai
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=YY, OU=YY, O=YY, L=shanghai, ST=shanghai, C=CN correct?
[no]: yes
将生成的keystone文件拷贝到web-server的安装目录下,和conf等目录同级
2、修改conf/azkaban.properties配置文件
#cat azkaban.properties
# Azkaban Personalization Settings
azkaban.name=Test #服务器UI名称,用于服务器上方显示的名字
azkaban.label=My Local Azkaban #描述
azkaban.color=#FF3601 #UI颜色
azkaban.default.servlet.path=/index
web.resource.dir=web/ #默认根web目录
default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类
user.manager.xml.file=conf/azkaban-users.xml #用户配置,具体配置参见下文
# Loader for projects
executor.global.properties=conf/global.properties #globa配置文件所在位置
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties. #jetty服务器属性
jetty.maxThreads=25 #最大线程数
jetty.ssl.port=8443 #jetty ssl端口号
jetty.port=8081 #jetty端口
jetty.keystore=keystore #SSL文件名
jetty.password=bigdata@123 #SSL文件密码
jetty.keypassword=bigdata@123 #jetty主密码与keystore文件相同
jetty.truststore=keystore #SSL文件名
jetty.trustpassword=bigdata@123 #SSL文件密码
# Azkaban Executor settings
executor.port=12321 #执行服务器端口
# mail settings #邮件配置(暂没有配置)
mail.sender= #发送邮箱
mail.host= #发送邮箱smtp地址
mail.password= #邮箱密码
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=plugins/jobtypes
database.type=mysql #数据库类型
mysql.port=3306 #数据库端口号
mysql.host=172.31.217.173 #数据库连接地址
mysql.database=azkaban #数据库实例名
mysql.user=azkaban #数据库用户名
mysql.password=bigdata@123 #数据库密码
mysql.numconnections=100 #数据库最大连接数
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1
3、上传log4j文件
在azkaban目录下创建logs文件夹,位置跟conf在同一级,在conf目录中上传log4j文件。简单示例如下:
log4j.rootLogger=DEBUG,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
如果没有log4j文件,将会以下错误:
Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHan
4、用户配置
添加管理员用户及密码:
<azkaban-users>
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
<user password="metrics" roles="metrics" username="metrics"/>
<user username="admin" password="admin" roles="admin,metrics"/>#新增管理员
<role name="admin" permissions="ADMIN"/>
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
5、启动web-server
进入到web-server的目录,执行如下脚本,需要在bin级目录执行,否则汇报找不到配置文件的错误。
# bin/azkaban-web-start.sh
打开浏览器,访问https://172.31.217.172:8443,用刚刚添加的管理员账户密码登录。
配置 Azkaban Executor Server
1、修改conf/azkaban.properties
# cat azkaban.properties
# Azkaban Personalization Settings
default.timezone.id=Asia/Shanghai
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes
database.type=mysql
mysql.port=3306
mysql.host=172.31.217.173
mysql.database=azkaban
mysql.user=azkaban
mysql.password=bigdata@123
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
2、上传log4j文件
在azkaban目录下创建logs文件夹,位置跟conf在同一级,在conf目录中上传log4j文件。简单示例如下:
log4j.rootLogger=DEBUG,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
如果没有log4j文件,将会以下错误:
Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHan
3、启动exec-server
进入到exec-server的目录,执行如下脚本,需要在bin级目录执行,否则汇报找不到配置文件的错误。(一共三台机器)
# bin/azkaban-executor-start.sh
# 在这种模式下,先要启动exec-server,再启动web-server
Azkaban3.x集群部署(multiple executor mode)的更多相关文章
- OpenStack Swift集群部署流程与简单使用
之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...
- Flink集群部署
部署方式 一般来讲有三种方式: Local Standalone Flink On Yarn/Mesos/K8s… 单机模式 参考上一篇Flink从入门到放弃(入门篇2)-本地环境搭建&构建第 ...
- Scala进阶之路-Spark独立模式(Standalone)集群部署
Scala进阶之路-Spark独立模式(Standalone)集群部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道Hadoop解决了大数据的存储和计算,存储使用HDFS ...
- Docker Swarm集群部署
一.系统环境 1)服务器环境 节点名称 IP 操作系统 内核版本 manager 172.16.60.95 CentOs7 4.16.1-1.el7.elrepo.x86_64 node-01 172 ...
- Docker(二十一)-Docker Swarm集群部署
介绍 Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm ...
- Spark概述及集群部署
Spark概述 什么是Spark (官网:http://spark.apache.org) Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010 ...
- JBoss DataGrid的集群部署与訪问
集群部署 JDG的缓存模式包含本地(Local)模式和集群(Clustered)模式.本项目採用多节点的Clustered模式部署.数据在多个节点的子集间进行复制.而不是同步拷贝到全部的节点. 使用子 ...
- Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目
在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...
- Hadoop记录-Apache hadoop+spark集群部署
Hadoop+Spark集群部署指南 (多节点文件分发.集群操作建议salt/ansible) 1.集群规划节点名称 主机名 IP地址 操作系统Master centos1 192.168.0.1 C ...
随机推荐
- 搭建ES6运行环境
当ES5还没有完全普及时,ES6就接踵而来了,2015年6月17日,ECMAScript 6发布正式版本,即ECMAScript 2015,我们也简称它为ES6或ES2015.在发布之后的将近一年内, ...
- Python运维开发基础-概述-hello world
Hello World 任何一门计算机语言几乎都是从hello world开始的,为了遵从这一优秀的传统习惯,我们也从打印hello world开始. linux系统进入Python环境,直接打Pyt ...
- Phpcms 前台页面实现分页
phpcms开发就是模仿里面原有的方法进行扩展,前台要实现分页,就去找后台页面的分页实现. 如后台 扩展->后台操作日志,就有分页展示. 1.先去添加自己的分页方法(千万不要在原来的方法上修改, ...
- 基于腾讯Centos7云服务器搭建SVN版本控制库
基于腾讯Centos7云服务器搭建SVN版本控制库 最近在和小伙伴组队参加一个关于人工智能的比赛,无奈不知道怎么处理好每个人的代码托管问题,于是找到了晚上免费svn托管服务器的服务,但是所给的免费空间 ...
- zoj 3963 heap partion
https://vjudge.net/problem/ZOJ-3963 题意: 给出一个数列,可以用这个数列构造一种二叉树,这个二叉树满足数的下标 i <= j,并且 si <= sj,s ...
- MS MDS系列之MDS层次结构(Hierarchy)
在Master Data Services中,Hierarchy的作用主要用于: 对同属性成员进行分组 聚合成员用于分析和报告输出 写在开始:显示层次结构(Explicit Hierarchy)即将在 ...
- ES6解构赋值
前面的话 我们经常定义许多对象和数组,然后有组织地从中提取相关的信息片段.在ES6中添加了可以简化这种任务的新特性:解构.解构是一种打破数据结构,将其拆分为更小部分的过程.本文将详细介绍ES6解构赋值 ...
- (转)Maven项目标准目录结构
场景:工作中的项目都是使用Maven的目录结构,虽然能够如期的完成开发工作,但是对于一个Maven工程的配置却并不熟悉,这里主要介绍下Maven工程的而目录结构. 1 标准目录结构 src -main ...
- 【SignalR学习系列】6. SignalR Hubs Api 详解(C# Server 端)
如何注册 SignalR 中间件 为了让客户端能够连接到 Hub ,当程序启动的时候你需要调用 MapSignalR 方法. 下面代码显示了如何在 OWIN startup 类里面定义 SignalR ...
- Intellij IDEA 2017 详细图文教程之概述
天天编码 , 版权所有丨本文标题:Intellij IDEA 2017 详细图文教程之概述 转载请保留页面地址:http://www.tiantianbianma.com/intellij-idea- ...