任务调度器之Azkaban的使用

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 任务调度器之Azkaban的使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Azkaban概述

Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。

Azkaban定义了一种KV文件(properties)格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

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

安装Azkaban

下载

wget https://github.com/azkaban/azkaban/archive/refs/tags/3.73.0.tar.gz

tar -zxvf 3.73.0.tar.gz 

mv azkaban-3.73.0  azkaban-src

安装Git

yum ‐y install git
yum ‐y install gcc‐c++

[root@administrator program]# git version
git version 1.8.3.1

修改azkaban-src目录下的build.gradle文件,修改allprojects节点配置,指定仓库地址为阿里云仓库


allprojects {
    apply plugin: 'jacoco'
    repositories {
       maven {
    	  	url 'https://maven.aliyun.com/repository/public/'
   	 }
    mavenLocal()
    mavenCentral()
    }
}

开始编译、安装并跳过测试阶段

 cd azkaban/
 
./gradlew  build installDist -x test

最后编译成功

BUILD SUCCESSFUL in 4m 52s
82 actionable tasks: 76 executed, 6 from cache

编译后得到以下文件

# azkaban-web-server页面显示服务
[root@administrator azkaban-src]# ls azkaban-web-server/build/distributions/
azkaban-web-server-0.1.0-SNAPSHOT.tar.gz  azkaban-web-server-0.1.0-SNAPSHOT.zip

# azkaban-solo-server
[root@administrator azkaban-src]# ls azkaban-solo-server/build/distributions/
azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz  azkaban-solo-server-0.1.0-SNAPSHOT.zip

#  azkaban-exec-server任务执行服务
[root@administrator azkaban-src]# ls azkaban-exec-server/build/distributions/
azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz  azkaban-exec-server-0.1.0-SNAPSHOT.zip

# two server模式需要的C程序
[root@administrator azkaban-src]# ls az-exec-util/src/main/c
execute-as-user.c

# 数据库脚本
[root@administrator azkaban-src]# ll azkaban-db/build/install/azkaban-db/
总用量 112
-rw-r--r-- 1 root root 12022 312 13:33 create-all-sql-0.1.0-SNAPSHOT.sql

单服务模式

Azkaban的单服务模式使用的是一个单节点模式来进行启动服务,只需要启动安装包即可,所有数据保存在H2内存中。

准备

azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz

解压

解压azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz

tar -zxvf  azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C ../azkaban

[root@administrator azkaban]# ls
azkaban-solo-server-0.1.0-SNAPSHOT

安装

修改vim azkaban-solo-server-0.1.0-SNAPSHOT/conf/azkaban.properties文件,保证与Linxu服务器时区一致

#default.timezone.id=America/Los_Angeles 

default.timezone.id=Asia/Shanghai

修改vim azkaban-solo-server-0.1.0-SNAPSHOT/plugins/jobtypes/commonprivate.properties文件

# set execute-as-user
execute.as.user=false

# Azkaban对内存要求高,关闭内存检查
memCheck.enabled=false

启动solo-server

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

[root@administrator azkaban-solo-server-0.1.0-SNAPSHOT]# jps
22563 AzkabanSingleServer

访问Web

浏览器访问:IP:8081在这里插入图片描述
登陆,用户名与密码:azkaban在这里插入图片描述

使用

创建 Job 描述文件 vim test.job

type=command
command=echo "hello world"

创建一个项目
在这里插入图片描述
test.jobjob资源文件打包成test.zipzip文件,并上传
在这里插入图片描述
启动执行job
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

两个服务器模式

准备

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

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

create-all-sql-0.1.0-SNAPSHOT.sql

execute-as-user.c

初始化数据库

CREATE DATABASE azkaban;


CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';

GRANT all privileges ON azkaban.* to 'azkaban'@'%' identified by 'azkaban' WITH GRANT OPTION;

flush privileges;

use azkaban;

source /usr/local/program/azkaban-src/azkaban-db/build/install/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql

解压

tar -zxvf  azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz   -C ../azkaban


tar -zxvf  azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz  -C ../azkaban

[root@administrator azkaban]# ls
azkaban-exec-server-0.1.0-SNAPSHOT  azkaban-solo-server-0.1.0-SNAPSHOT  azkaban-web-server-0.1.0-SNAPSHOT

安装SSL安全认证

安装SSL安全认证,允许使用https的方式访问azkaban的web服务

[root@administrator azkaban]# keytool -keystore keystore -alias keyalias -genkey -keyalg RSA
输入密钥库口令:  
再次输入新口令: 
您的名字与姓氏是什么?
  [Unknown]:  
您的组织单位名称是什么?
  [Unknown]:  
您的组织名称是什么?
  [Unknown]:  
您所在的城市或区域名称是什么?
  [Unknown]:  
您所在的省/市/自治区名称是什么?
  [Unknown]:  
该单位的双字母国家/地区代码是什么?
  [Unknown]:  
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
  []:  y

输入 <keyalias> 的密钥口令
        (如果和密钥库口令相同, 按回车):  

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
[root@administrator azkaban]# ls
azkaban-exec-server-0.1.0-SNAPSHOT  azkaban-solo-server-0.1.0-SNAPSHOT  azkaban-web-server-0.1.0-SNAPSHOT  keystore

安装Azkaban Web Server

安装azkaban web server,进入cd azkaban-web-server-0.1.0-SNAPSHOT/conf编辑 vim azkaban.properties

#default.timezone.id=America/Los_Angeles 
default.timezone.id=Asia/Shanghai

#jetty.use.ssl=false
jetty.use.ssl=true

# ssl配置
jetty.ssl.port=8443
jetty.keystore=/usr/local/program/azkaban/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/usr/local/program/azkaban/keystore
jetty.trustpassword=azkaban

# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus

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

安装Azkaban Executor Server

安装azkaban executor server,进入cd azkaban-exec-server-0.1.0-SNAPSHOT/conf编辑vim azkaban.properties

#default.timezone.id=America/Los_Angeles 
default.timezone.id=Asia/Shanghai

#jetty.use.ssl=false
jetty.use.ssl=true

# ssl配置
jetty.ssl.port=8443
jetty.keystore=/usr/local/program/azkaban/keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=/usr/local/program/azkaban/keystore
jetty.trustpassword=azkaban

# Where the Azkaban web server is located
#azkaban.webserver.url=http://localhost:8081
azkaban.webserver.url=http://localhost:8443

# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

添加插件

将编译后的C文件execute-as-user.c拷贝到azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes目录

cp az-exec-util/src/main/c/execute-as-user.c /usr/local/program/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes

生成execute-as-user

cd azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes

[root@administrator jobtypes]# yum -y install gcc-c++

[root@administrator jobtypes]# gcc execute-as-user.c  -o execute-as-user
[root@administrator jobtypes]# ls
commonprivate.properties  execute-as-user  execute-as-user.c

[root@administrator jobtypes]# chown root execute‐as‐user

[root@administrator jobtypes]# chmod 6050 execute-as-user

[root@administrator jobtypes]# ll
总用量 24
-rw-rw-r-- 1 root root    44 531 2019 commonprivate.properties
---Sr-s--- 1 root root 13536 312 15:33 execute-as-user
-rw-r--r-- 1 root root  3976 312 15:30 execute-as-user.c

修改配置文件

vim commonprivate.properties 

# set execute-as-user
execute.as.user=false
# 关闭内存检测
memCheck.enabled=false
# 指定插件存放目录
azkaban.native.lib=/usr/local/program/azkaban/azkaban-exec-server-0.1.0-SNAPSHOT/plugins/jobtypes

启动服务

启动azkaban exec server

cd azkaban-exec-server-0.1.0-SNAPSHOT

bin/start-exec.sh 


[root@administrator azkaban-src]# jps
24655 AzkabanExecutorServer


# 当azkaban-exec-server-0.1.0-SNAPSHOT目录下出现executor.port文件,说明启动成功
[root@administrator azkaban-exec-server-0.1.0-SNAPSHOT]# ls
bin  conf  currentpid  executions  executor.port  executorServerLog__2022-03-12+15:57:50.out  lib  logs  plugins  projects  temp

激活exec-server

[root@administrator azkaban-exec-server-0.1.0-SNAPSHOT]# curl -G "node01:$(<./executor.port)/executor?action=activate" && echo
{"status":"success"}

启动azkaban-web-server

cd azkaban-web-server-0.1.0-SNAPSHOT/

bin/start-web.sh 

[root@administrator azkaban-src]# jps
11146 AzkabanWebServer

访问Web

浏览器访问IP:8443
在这里插入图片描述

注意:放行端口or关闭防火墙

systemctl stop firewalld.service

使用测试

单服务模式下的Job资源上传进行测试
在这里插入图片描述

任务提交与执行

Command类型

1.单一Job的使用

1.创建 Job 描述文件

2.将job资源文件打包成zip文件

3.创建工程并上传zip压缩包

4.启动工作流flow,执行job

创建 Job 描述文件 vim test.job

type=command
command=echo "hello world"

2.多Job的使用

1.创建有依赖关系的多个job描述

2.将所有job资源文件打到一个zip包中

3.创建工程并上传zip压缩包

4.启动工作流flow,执行job

创建 Job 描述文件 vim test1.job

type=command
command=echo "test1 hello world"

创建 Job 描述文件 vim test2.job

type=command
command=echo "test2 hello world"
dependencies=test1

上传后执行时显示依赖关系
在这里插入图片描述
执行过程与结果
在这里插入图片描述

定时任务

Azkaban的scheduler功能可以实现对作业任务进行定时调度功能
在这里插入图片描述
在这里插入图片描述

HDFS操作任务

1.创建job描述文件

2.将job资源文件打包成zip文件

3.创建project并上传job压缩包

4.启动执行该job

vim hdfs.job

type=command
command=/usr/local/program/hadoop/bin/hdfs dfs -mkdir /azkaban

在这里插入图片描述

执行后查看HDFS

[root@administrator hadoop]# hdfs dfs -ls /
Found 6 items
drwxr-xr-x   - root supergroup          0 2022-03-12 18:37 /azkaban

MapReduce任务

1.下载/usr/local/program/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.2.jar文件

2.创建job描述文件 vim mr.job

type=command
command=/usr/local/program/hadoop/bin/hadoop jar hadoop-mapreduce-examples-3.3.2.jar pi 3 5

3.将所有job资源文件( vim mr.jobhadoop-mapreduce-examples-3.3.2.jar)打到一个zip压缩包中

4.创建工程并上传zip包,启动job
在这里插入图片描述

Hive 脚本任务

1.准备Hive脚本: hive.sql

create database if not exists dbazkaban;
use dbazkaban;
create table if not exists tbazkaban(id string,name string) row format
delimited fields terminated by '\t';

2.创建job描述文件 hive.job

type=command
command=/usr/local/program/hive/bin/hive -f 'hive.sql'

3.将所有job资源文件打到一个zip包中

4.创建工程并上传zip包,启动job
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/136932.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!