为了实现定时调用代码方法而又不想使用while循环然后sleep定时长的这么low的方法。显然azkaban是个不错的选择
步骤
0.安装要求
1.你的jdk版本至少在1.8(含)以上
2.你电脑已经安装MySQL,azkaban目前只认MySQL。
为了方便我们用root用户来装
1.下载
网站为https://github.com/azkaban/azkaban/releases下载。如下图选择你喜欢版本。选择tar.gz

2.生成安装包
安装azkaban必须先装有git
,如果没有请自行安装git
yum install -y git
为了方便我们可以先在/下创建一个soft文件夹来存放这些东西,我们先cd到上传azkaban-3.xx.x.tar.gz所在文件夹然后执行以下命令,因为我下的是azkaban-3.9.tar.gz,故本篇都以此版本书写,读者只需把版本换成自己的其他不变即可。
-
-
mkdir /soft/ -
tar -xzvf azkaban-3.9.tar.gz -C /soft
-
接下来开始测试build
-
-
#运行其自带打包工具但需要先cd到文件夹内 -
cd /soft/azkaban-3.9/ -
#运行自带方法 Build Azkaban -
./gradlew build
-
注意!
这步骤会耗费一些时间,如果你没装git此时赶紧回去装好否则会一直报错。不过有些rp不好的人虽然装了依旧会遇到报错,

这原因是你的jdk缺少Unlimited Strength Jurisdiction Policy 的问题就是无限强度管辖政策。可以去Oracle里下载
https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
下载解压后把文件夹UnlimitedJCEPolicyJDK8里的local_policy.jar和US_export_policy.jar放到 你的JAVA_HOME下/jre/lib/security里。(为了安全起见我们可以先把security文件夹里原来的local_policy.jar和US_export_policy.jar先mv成local_policy.jar.old和US_export_policy.jar.old然后上传)
最后重启java,我忘了怎么重启java,直接reboot重启整个机器
reboot
然后再次重复上面buid的步骤 。接下来稍待片刻你就可以看到成功的画面

然后卸载。请确保你现在依旧在 /soft/azkaban-3.9/
./gradlew clean
终于可以开始正式安装“安装包" 运行以下命令
-
-
./gradlew installDist -
./gradlew test -
./gradlew build -x test
-
结果如下

接下来是时候看看这这个文件夹里的东西了

当我们运行完上述命令时安装包就已经整好了,我们只需要取出上面4个框内tar.gz文件即可,这4个压缩包为在各自文件夹下/build/distributions里的tar.gz拿azkaban-exec-server举例:

为了便于操作接下分别把这4个压缩包移到/soft/下新创建的azkaban文件夹里
-
-
mkdir /soft/azkaban -
mv /soft/azkaban-3.9/azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz /soft/azkaban/ -
mv /soft/azkaban-3.9/azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz /soft/azkaban/ -
mv /soft/azkaban-3.9/azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz /soft/azkaban/ -
mv /soft/azkaban-3.9/azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz /soft/azkaban/
-
接下来在azkaban文件夹把这4个压缩包解压到当前文件并取个好听的名字
-
cd /soft/azkaban -
tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz -
tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -
tar -zxvf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -
tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -
rm azkaban-db-0.1.0-SNAPSHOT.tar.gz -rf -
rm azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -rf -
rm azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -rf -
rm azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -rf -
mv azkaban-db-0.1.0-SNAPSHOT/ azkaban-db -
mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec-server -
mv azkaban-solo-server-0.1.0-SNAPSHOT/ azkaban-solo-server -
mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web-server
效果如下

3.设置数据库(MySQL)
以root等级我们的mysql~~~
建立一个azkaban库,然后导入建表sql命令source db文件夹里的 create-all 的sql文件
数据库初始化 mysql
- 创建数据库并赋权
- 注意要修改成Latin1 不然会报错
-
CREATE DATABASE IF NOT EXISTS azkaban95; -
##%代表所有的ip,也可以指定ip -
create user 'user'@'%' identified by 'password'; -
grant all on azkaban95.* to 'user'@'%' with grant option; -
alter database azkaban95 character set Latin1;
grant select on databases.* to 'user'@'%' identified by 'pwd' with grant option;
- 如果 MySQL 使用库表字符集使用 UTF-8,在初始化 Azkaban 的 MySQL 库时报错如下:
-
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes -
ERROR 1146 (42S02): Table 'azkaban3.execution_jobs' doesn't exist -
ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes -
ERROR 1146 (42S02): Table 'azkaban3.execution_logs' doesn't exist -
ERROR 1146 (42S02): Table 'azkaban3.execution_logs' doesn't exist -
ERROR 1146 (42S02): Table 'azkaban3.execution_logs' doesn't exist
这个是因为表 execution_logs 的主键总的长度字符超过 767 个字节导致的。解决方法是将该表的编码改为 Latin1。
-
-
create database azkaban; -
use azkaban ; -
source /soft/azkaban/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql ;
-
结果如下

4.设置conf参数
注:记得我们生成的文件夹有个azkaban-solo-server吗?他为单机模式的,而本篇配置的是分布式,故不会用到该文件夹。顺带解压只是为方便广大读者根据自己需求进行选择。另外即使是分布式的azkaban 也支持只在一台服务器上启动
配置好数据后,我们只需要把azkaban-exec-server和azkaban-web-server的azkaban.properties内参数调好即可完成配置
他们azkaban.properties都在各自文件夹的/conf 里
exec-server的如下:只需把下面host和user和password修改即可
-
# Azkaban Personalization Settings -
azkaban.name=Test -
azkaban.label=My Local Azkaban -
azkaban.color=#FF3601 -
azkaban.default.servlet.path=/index -
#web的路径变为绝对路径 -
web.resource.dir=/soft/azkaban/azkaban-web-server/web/ -
#时间改为亚洲上海 -
default.timezone.id=Asia/Shanghai -
# Azkaban UserManager class -
user.manager.class=azkaban.user.XmlUserManager -
#user.manager.xml改为绝对路径 -
user.manager.xml.file=/soft/azkaban/azkaban-web-server/conf/azkaban-users.xml -
# Loader for projects改为绝对路径 -
executor.global.properties=/soft/azkaban/azkaban-exec-server/conf/global.properties -
azkaban.project.dir=projects -
# Velocity dev mode -
velocity.dev.mode=false -
# Azkaban Jetty server properties. -
jetty.use.ssl=false -
jetty.maxThreads=25 -
jetty.port=8081 -
# Where the Azkaban web server is located -
azkaban.webserver.url=http://localhost:8081 -
# 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=/soft/azkaban/azkaban-exec-server/plugins/jobtypes -
# Azkaban mysql settings by default. Users should configure their own username and password. -
database.type=mysql -
mysql.port=3306 -
mysql.host=mysql的的主机host -
mysql.database=azkaban -
mysql.user=账号名称 -
mysql.password=账号密码 -
mysql.numconnections=100 -
# Azkaban Executor settings -
executor.maxThreads=50 -
executor.flow.threads=30
web-server的如下:同样只需把下面host和user和password修改即可
-
-
# Azkaban Personalization Settings -
azkaban.name=Test -
azkaban.label=My Local Azkaban -
azkaban.color=#FF3601 -
azkaban.default.servlet.path=/index -
#web的路径变为绝对路径 -
web.resource.dir=/soft/azkaban/azkaban-web-server/web/ -
#时间改为亚洲上海 -
default.timezone.id=Asia/Shanghai -
# Azkaban UserManager class -
user.manager.class=azkaban.user.XmlUserManager -
#填写的是user.manager.xml的绝对路径 -
user.manager.xml.file=/soft/azkaban/azkaban-web-server/conf/azkaban-users.xml -
# Loader for projects添的是exec的global的绝对路径哦 -
executor.global.properties=/soft/azkaban/azkaban-exec-server/conf/global.properties -
azkaban.project.dir=projects -
# Velocity dev mode -
velocity.dev.mode=false -
# Azkaban Jetty server properties. -
jetty.use.ssl=false -
jetty.maxThreads=25 -
jetty.port=8081 -
# 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=mysql的host -
mysql.database=azkaban -
mysql.user=用户账号 -
mysql.password=用户密码 -
mysql.numconnections=100 -
#Multiple Executor -
azkaban.use.multiple.executors=true -
#注意如果你的剩余内存不足6g必须把下面的 MinimumFreeMemory, 删除。不然会出错 -
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
-
该web是可以用ssl,但是对于我们初学者没必要,
5.添加账号
我们只需要在/azkaban-web-server/conf/ azkaban-users.xml文件里添加即可。假设我添加了一个yasina账号密码为yasina并有admin权限。只需如下修改即可
-
-
<azkaban-users> -
<user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/> -
<user password="metrics" roles="metrics" username="metrics"/> -
<user password="yasina" roles="metrics,admin" username="yasina"/> -
<role name="admin" permissions="ADMIN"/> -
<role name="metrics" permissions="METRICS"/> -
</azkaban-users>
-
6.启动Azkaban!!!
1.启动顺序:
首先启动exec的再启动web的。一定要按这样的顺序,不然一定无法运行
2.启动exec-server
-
-
cd /soft/azkaban/azkaban-exec-server/ -
./bin/start-exec.sh
-
3.手动修改exec-srver状态为激活。
这步很重要,不然后面web端会一直起不来,他会报错说execute没有available的,然后就停了。很蛋疼但是没办法。端口号在executor下的executor.port文件中可查 具体命令为curl http://${executorHost}:${executorPort}/executor?action=activate
4.启动web-server
-
cd /soft/azkaban/azkaban-web-server/ -
./bin/start-web.sh
5.打开WebUI
web地址默认为http://localhost:8081你可以在azkaban.properties里修改。

然后点登录成功进入。界面如下

空空如也,毕竟都没创建project。那么我们接下来的工作就是创建一个project来体验一下azkaban的魅力
7.体验Azkaban
1.点击右上角的Create Project 创建project

点create Project结果如下
项目下也是一片空白,这需要我们把任务打包上去。看到了上图右上角的Upload了吗?别急点。我们都还没写东西呢
2.编辑任务
对于我们这些初学者而就echo " Hello" 吧
我们在Windows桌面新建一个记事本取名叫test
在记事本里添加以下两行内容即可
-
type=command -
command= echo "hello"
然后把该文件名后缀txt格式改写成job因为azkaban只认job格式。然后把该job再压缩成zip格式才能上传到azkaban里。如下

3.上传文件
点击页面上的Upload按钮并添加要上传的test.zip文件。点击Upload上传

结果如下,然后点击Execute Flow

3.设置执行文件参数
此时我们可以选择左下角的Schedule来控制该事件的重复执行的时间间隔长度。然后再Execute

其内部界面如下

这次我们只是进行测试azkaban是否能正常工作故不设置时间间隔。直接Execute。会出现下面信息框。我这是运行第四次了所以id是4.故此处与我不同的同学~莫慌,问题不大

直接点Continue你会跳转到下面这
这绿色说明你的上传的job已经运行成功了!不是绿色则是失败。有些不是绿色的同学莫慌。很有可能是你的内存不够6G导致的请回去看看我们步骤4里web-server的azkaban.properties你是否已经把MinimumFreeMemory, 字段删除?如果没删这话又没有6G内存的话~~这自检永远过不去,你的job就一直只能是准备状态。

4.查看结果
由于我们运行的是打印一个hello那么我们应该去哪看呢?如果你选择我上图红色框的Flowlog,很遗憾你猜错了。应该去绿色框里的Job list里看

点击Log。找到hello了!!!

8.退出Azkaban
退出的话是反过来的,先关web,再exec
web的
-
cd /soft/azkaban/azkaban-web-server/ -
./bin/shutdown-web.sh
exec的
-
cd /soft/azkaban/azkaban-exec-server/ -
./bin/shutdown-exec.sh
至此,azkaban的安装到测试运行全部结束!!!当然了job文件内的type远不止一个command。但这其他的东西大家都可以百度到了。所以我就不一一赘述了。
本文详细介绍了如何在Linux环境下安装和配置Azkaban分布式任务调度系统,包括下载安装包、配置数据库、设置参数、创建用户、启动服务以及测试运行流程。Azkaban提供了一种高效且不依赖于while循环和sleep的定时任务调度解决方案。
2218

被折叠的 条评论
为什么被折叠?



