Azkaban
azkaban是一个任务调度软件,任务调度工具。
Azkaban的工作流的调度
因为最近在做一个利用sqoop进行mysql的数据导入到hdfs的工作。本来就是一个简简单单的导入工作。不知道为什么,就突然,聊着聊着突然就要做自动调度了
嗯,自动调度就自动调度吧。。。
一般linux都自带有crontab,这个东西可以做定时任务的,可以在里面直接运行shell脚本。这么一想,美滋滋啊!
所以首先就考虑到了使用crontab来进行对任务的自动调度。
嗯,做下前期工作,脚本大概长这样
脚本a
sqoop --import --xxxxxxxx
脚本b
hive -f xxx.sql
脚本c (脚本c就是将脚本a和脚本b拼接在一起)
脚本a(sqoop --import -xxxxxx)
脚本b(hive -f xxx.sql)
注:脚本b要使用脚本a的数据,要对脚本b的数据二次处理。
准备用crontab来调度我的脚本的时候
0 2 * * * sh 脚本c.sh
发现当到了指定的时间点,任务并不是想象当中先执行完了脚本a,然后再执行脚本b,脚本a和脚本b几乎是同时在执行,因为脚本a是一个mapreduce任务,脚本b也是一个mapreduce任务,所以当脚本执行的时候脚本a将任务提交到yarn之后。脚本b不会等待脚本a的mapreduce任务结束完毕,才执行。会在脚本a提交完任务的时候就执行了。
重点脚本b要依赖脚本a的处理完的mapreduce的数据啊!!!
所以crontab这个方案是行不通的。(主要是里面的shell脚本要能够实现工作流的调度,这个shell脚本精通的大佬应该可以实现。)
azkaban就可以实现这个工作流的调度了,别问我为什么,我就是知道,嗯,因为我以前用过。。。
不多bb,azkaban搭建走起来
开始搭建
- 准备工作
准备着三个包
下载地址
然后就是linux服务器上要安装mysql
(不会安装mysql的同学请参见我的另外一篇博客yum 安装mysql)
- linux创建一个目录
mkdir -p /opt/software/azkaban
- 将azkaban的压缩包上传到这个文件目录上
- 将这些压缩包解压
tar -zxvf azkaban-executor-server-2.5.0.tar.gz
tar -zxvf azkaban-sql-script-2.5.0.tar.gz
tar -zxvf azkaban-web-server-2.5.0.tar.gz
- 进入mysql中创建一个azkaban的数据库
注意,这里要用到azkaban的数据库文件,看好路径,是自己的路径,别抄我的路径。。。
mysql -uusername -ppassword
mysql > create database azkaban;
mysql > use azkaban;
Database changed
mysql > source /opt/software/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql
- 创建SSL配置
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
注意
如果jdk没有安装好,是不会有keytool的这个工具的。
输入完毕之后,可以在这个目录下面看到一个keystore的文件。
将这个keystore文件移到azkaban的web-server的根目录下面
mv keystore /opt/software/azkaban/azkaban-web-2.5.0
配置时区
将服务器节点上的时区配置成为Asia/Shanghai
tzselect
输入的顺序(按数字就好了)
5 选中Asia
9 选中China
1 选中Beijing Time
1 选中yes
选择完毕之后就是如下的界面了:
接下来拷贝时区文件,覆盖本地的时区配置
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
配置azkaban web服务器
进入到azkaban-web-server-2.5.0
cd /opt/software/azkaban/azkaban-web-2.5.0/conf
修改azkaban.properties
vim azkaban.properties
修改我下面标注
#Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=America/Los_Angeles 这个地方要修改成 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
database.type=mysql ----
mysql.port=3306 |
mysql.host=localhost |
mysql.database=azkaban | ------这个地方要根据自己的配置
mysql.user=azkaban |
mysql.password=azkaban |
mysql.numconnections=100 ---
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore ----
jetty.password=password |
jetty.keypassword=password |---这个地方的密码就是利用keytool工具设置的
jetty.truststore=keystore |
jetty.trustpassword=password ----
# Azkaban Executor settings
executor.port=12321
# mail settings 我没有配置...
mail.sender=
mail.host=
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
接着修改azkaban-user.xml
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
<user username="metrics" password="metrics" roles="metrics"/>
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
中间空白的地方加上一行
<user username= "admin" password="admin" roles="admin,metrics" />
到时候进入azkaban的任务web UI界面的时候就可以用账号是admin,和密码admin登录了
配置executor-executor的配置
vim /opt/software/azkaban/azkaban-executor-2.5.0/azkaban.properties
#Azkaban
default.timezone.id=America/Los_Angeles 修改时区
# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes
#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
database.type=mysql ----
mysql.port=3306 |
mysql.host=localhost |
mysql.database=azkaban2 |-----修改成自己的配置信息
mysql.user=azkaban |
mysql.password=azkaban |
mysql.numconnections=100 ----
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
启动azkaban
然后就是启动azkaban了
进入azkaban的目录
cd /opt/software/azkaban/azkaban-web-2.5.0 先到这个目录里面来
bin/azkaban-web-start.sh 启动azkaban web服务器
cd /opt/software/azkaban/azkaban-executor-2.5.0 启动azkaban executor
bin/azkaban-executor-start.sh
注意!!!
一定要在这两个目录下面执行azkaban的服务,不然会导致失败的,会报错的(你怕不怕?手动滑鸡)
然后打开浏览器,在浏览器里面输入
https://主机名称:8443
(http一定要加s,一定要加s,一定要加s )
https,不加要被打屁股
最后就可以看到azkaban的登录界面了
然后输入登录名admin,密码admin就可以成功进入azkaban了!!!(终于写到这里了,累死宝宝了)
最后,如果有什么建议或者是问题,我们可以一起好好交流鸭~