hadoop离线阶段(第十六节—2)azkaban的简介和安装

azkaban的简介

azkaban官网:
https://azkaban.github.io/

Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

作者:FantJ
链接:https://www.jianshu.com/p/c7d6bf6191e7
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

为什么需要工作流调度系统

  • 一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序、hive脚本等。
  • 各任务单元之间存在时间先后及前后依赖关系。
  • 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行。

工作流调度实现方式

简单的任务调度:直接使用linux的crontab来定义;
复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如ooize、azkaban、airflow等

各种调度工具特性对比

hadoop离线阶段(第十六节—2)azkaban的简介和安装_第1张图片

Azkaban与Oozie对比

对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。
详情如下:

  • 功能
    两者均可以调度mapreduce,pig,java,脚本工作流任务
    两者均可以定时执行工作流任务

  • 工作流定义
    Azkaban使用Properties文件定义工作流
    Oozie使用XML文件定义工作流

  • 工作流传参
    Azkaban支持直接传参,例如 i n p u t O o z i e 支 持 参 数 和 E L 表 达 式 , 例 如 {input} Oozie支持参数和EL表达式,例如 inputOozieEL{fs:dirSize(myInputDir)}

  • 定时执行
    Azkaban的定时执行任务是基于时间的
    Oozie的定时执行任务基于时间和输入数据

  • 资源管理
    Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作
    Oozie暂无严格的权限控制

  • 工作流执行
    Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点)
    Oozie作为工作流服务器运行,支持多用户和多工作流

  • 工作流管理
    Azkaban支持浏览器以及ajax方式操作工作流
    Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流

azkaban的编译

1、下载源码包,选择版本是3.15.0

cd /export/softwares/
wget https://github.com/azkaban/azkaban/archive/3.51.0.tar.gz

2、解压源码包

tar -zxvf 3.51.0.tar.gz -C ../servers/

3、进行编译

cd /export/servers/azkaban-3.51.0/
yum -y install git
yum -y install gcc-c++
./gradlew build installDist -x test

4、编译之后安装包的存放位置

  • azkaban-exec-server
    /export/servers/azkaban-3.51.0/azkaban-exec-server/build/distributions
  • azkaban-web-server
    /export/servers/azkaban-3.51.0/azkaban-web-server/build/distributions
  • azkaban-solo-server
    /export/servers/azkaban-3.51.0/azkaban-solo-server/build/distributions
  • execute-as-user.c
    /export/servers/azkaban-3.51.0/az-exec-util/src/main/c
  • 数据库脚本文件
    /export/servers/azkaban-3.51.0/azkaban-db/build/install/azkaban-db,其中需要的文件是create-all-sql-0.1.0-SNAPSHOT.sql

azkaban单服务模式安装

1、解压azkaban-solo-server
将编译后得到的azkaban-solo-server复制到/export/softwares

cd /export/softwares
tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../servers/

2、修改两个配置文件
(1)修改azkaban.properties

cd /export/servers/azkaban-solo-server-0.1.0-SNAPSHOT/conf
vim azkaban.properties

修改内容:

default.timezone.id=Asia/Shanghai

(2)修改commonprivate.properties

cd /export/servers/azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes
vim commonprivate.properties

修改内容:

execute.as.user=false #修改
memCheck.enabled=false #添加

3、启动solo-server

cd  /export/servers/azkaban-solo-server-0.1.0-SNAPSHOT
bin/start-solo.sh

注意,不要cd到azkaban-solo-server-0.1.0-SNAPSHOT的bin目录库下直接运行start-solo.sh

azkaban两个服务模式安装

以下是一台机器进行azkaban多服务模式安装的操作,其余机器的安装与一台机器的安装相同

1、从编译后的文件中将以下复制到/export/softwares/

  • Azkaban Web服务安装包,azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
  • Azkaban执行服务安装包,azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
  • 编译之后的sql脚本,create-all-sql-0.1.0-SNAPSHOT.sql
  • C程序文件脚本,execute-as-user.c

2、在MySQL中创建azkaban数据库,并运行sql脚本生成表

mysql  -uroot -p #登录数据库


# 创建azkaban数据库,并授权
CREATE DATABASE azkaban;
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';    
GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION; 
flush privileges;


# 运行sql脚本生成表
use azkaban; 
source /export/softwares/create-all-sql-0.1.0-SNAPSHOT.sql;

3、解压软件安装包

# 解压azkaban-web-server
cd /export/softwares
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C ../servers/
cd /export/servers
mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web-server-3.51.0

# 解压azkaban-exec-server
cd /export/softwares
tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C ../servers/
cd /export/servers
mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec-server-3.51.0

4、安装SSL安全认证

cd /export/servers/azkaban-web-server-3.51.0
keytool -keystore keystore -alias jetty -genkey -keyalg RSA

密码可自己定义,但是要记住自己定义的密码,推荐使用’azkaban’即可。遇到询问name的直接回车跳过即可。
hadoop离线阶段(第十六节—2)azkaban的简介和安装_第2张图片

5、azkaban web server配置文件修改

修改azkaban.properties

cd /export/servers/azkaban-web-server-3.51.0/conf
vim azkaban.properties

修改内容:

# Azkaban Personalization Settings
azkaban.name=Azkaban #修改
azkaban.label=My Azkaban #修改
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=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
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=true #修改
jetty.maxThreads=25
jetty.port=8081

jetty.ssl.port=8443 #添加
jetty.keystore=/export/servers/azkaban-web-server-3.51.0/keystore #添加
jetty.password=azkaban #添加
jetty.keypassword=azkaban #添加
jetty.truststore=/export/servers/azkaban-web-server-3.51.0/keystore #添加
jetty.trustpassword=azkaban  #添加


# 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=node03 #添加
mysql.database=azkaban #添加
mysql.user=azkaban #添加
mysql.password=azkaban #添加
mysql.numconnections=100 #添加
#Multiple Executor
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

azkaban.activeexecutor.refresh.milisecinterval=10000 #添加
azkaban.queueprocessing.enabled=true #添加
azkaban.activeexecutor.refresh.flowinterval=10 #添加
azkaban.executorinfo.refresh.maxThreads=10 #添加

6、修改azkaban executor server的配置文件
修改azkaban.propertie

cd /export/servers/azkaban-exec-server-3.51.0/conf
vim azkaban.properties

修改内容:

# Azkaban Personalization Settings
azkaban.name=Azkaban #修改
azkaban.label=My Azkaban #修改
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=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
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=true #修改
jetty.maxThreads=25
jetty.port=8081


jetty.keystore=/export/servers/azkaban-web-server-3.51.0/keystore #添加
jetty.password=azkaban #添加
jetty.keypassword=azkaban #添加
jetty.truststore=/export/servers/azkaban-web-server-3.51.0/keystore #添加
jetty.trustpassword=azkaban #添加


# Where the Azkaban web server is located
azkaban.webserver.url=https://node03:8443 #修改
# 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=plugins/jobtypes
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql #添加
mysql.port=3306 #添加
mysql.host=node03 #添加
mysql.database=azkaban #添加
mysql.user=azkaban #添加
mysql.password=azkaban #添加
mysql.numconnections=100 #添加
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30

(2)添加插件
将编译后的C文件execute-as-user.c复制到来/export/servers/azkaban-exec-server-3.51.0/plugins/jobtypes

cp /export/softwares/execute-as-user.c /export/servers/azkaban-exec-server-3.51.0/plugins/jobtypes/

执行以下命令生成execute-as-user

yum -y install gcc-c++
cd /export/servers/azkaban-exec-server-3.51.0/plugins/jobtypes
gcc execute-as-user.c -o execute-as-user
chown root execute-as-user
chmod 6050 execute-as-user

(3)修改commonprivate.properties

cd  /export/servers/azkaban-exec-server-3.47.0/plugins/jobtypes
vim commonprivate.properties
execute.as.user=false
memCheck.enabled=false
azkaban.native.lib=/export/servers/azkaban-exec-server-3.51.0/plugins/jobtypes

7、启动服务
(1)启动azkaban exec server

cd /export/servers/azkaban-exec-server-3.51.0
bin/start-exec.sh

(2) 激活exec-server

curl -G "node03:$(<./executor.port)/executor?action=activate" && echo

(3)启动azkaban-web-server

cd /export/servers/azkaban-web-server-3.51.0/
bin/start-web.sh

你可能感兴趣的:(hadoop)