Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
1. 安装
准备工作
azkaban-web-server-2.5.0.tar.gz
azkaban-executor-server-2.5.0.tar.gz
azkaban-sql-script-2.5.0.tar.gz
其中,azkaban-web-server-2.5.0.tar.gz
是服务器,azkaban-executor-server-2.5.0.tar.gz
是执行服务器,azkaban-sql-script-2.5.0.tar.gz
是执行的sql脚本。
2. mysql创建表
分别把他们解压安装后。我们还需要在mysql中创建数据库,然后运行azkaban提供的sql脚本来创建azkaban所需要的表。
mysql -uroot -p mysql> create database azkaban; mysql> use azkaban; Database changed mysql> source /home/fantj/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql; mysql> show tables; +------------------------+| Tables_in_azkaban |+------------------------+| active_executing_flows || active_sla || execution_flows || execution_jobs || execution_logs || project_events || project_files || project_flows || project_permissions || project_properties || project_versions || projects || properties || schedules || triggers |+------------------------+15 rows in set (0.00 sec)
3. 创建SSL配置
1. 执行命令keytool -keystore keystore -alias jetty -genkey -keyalg RSA
会在当前目录生成一个keystore
证书文件,当然执行该命令需要你填写一些信息,比如你的姓名+工作单位等。按照提示填写即可。
2. 然后把 keystore 考贝到 azkaban web服务器bin目录中
4. 配置时区
[root@s166 azkaban]# tzselectPlease identify a location so that time zone rules can be set correctly. Please select a continent or ocean. 1) Africa 2) Americas 3) Antarctica 4) Arctic Ocean 5) Asia 6) Atlantic Ocean 7) Australia 8) Europe 9) Indian Ocean 10) Pacific Ocean 11) none - I want to specify the time zone using the Posix TZ format.#? 5Please select a country. 1) Afghanistan 18) Israel 35) Palestine 2) Armenia 19) Japan 36) Philippines 3) Azerbaijan 20) Jordan 37) Qatar 4) Bahrain 21) Kazakhstan 38) Russia 5) Bangladesh 22) Korea (North) 39) Saudi Arabia 6) Bhutan 23) Korea (South) 40) Singapore 7) Brunei 24) Kuwait 41) Sri Lanka 8) Cambodia 25) Kyrgyzstan 42) Syria 9) China 26) Laos 43) Taiwan 10) Cyprus 27) Lebanon 44) Tajikistan 11) East Timor 28) Macau 45) Thailand 12) Georgia 29) Malaysia 46) Turkmenistan 13) Hong Kong 30) Mongolia 47) United Arab Emirates 14) India 31) Myanmar (Burma) 48) Uzbekistan 15) Indonesia 32) Nepal 49) Vietnam 16) Iran 33) Oman 50) Yemen 17) Iraq 34) Pakistan#? 9Please select one of the following time zone regions. 1) Beijing Time 2) Xinjiang Time#? 1The following information has been given: China Beijing Time Therefore TZ='Asia/Shanghai' will be used. Local time is now: Sat Jul 28 18:29:58 CST 2018. Universal Time is now: Sat Jul 28 10:29:58 UTC 2018. Is the above information OK? 1) Yes 2) No#? 1You can make this change permanent for yourself by appending the line TZ='Asia/Shanghai'; export TZ to the file '.profile' in your home directory; then log out and log in again. Here is that TZ value again, this time on standard output so that you can use the /usr/bin/tzselect command in shell scripts: Asia/Shanghai
这个配置需要给集群的每个主机设置,因为任务调度离不开准确的时间。我们也可以直接把相关文件拷贝到别的主机作覆盖。
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@s166 azkaban]# scp /usr/share/zoneinfo/Asia/Shanghai root@s168:/etc/localtimeShanghai 100% 388 500.8KB/s 00:00 [root@s166 azkaban]# scp /usr/share/zoneinfo/Asia/Shanghai root@s169:/etc/localtimeShanghai
5. 修改配置
5.1 修改服务端配置
5.1.1 /webserver/conf
目录下的azkaban.properties
(我之前将服务端的解压文件改名为webserver)
#Azkaban Personalization Settingsazkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601azkaban.default.servlet.path=/index web.resource.dir=web/default.timezone.id=Asia/Shanghai#Azkaban UserManager classuser.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=conf/azkaban-users.xml#Loader for projectsexecutor.global.properties=conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306mysql.host=localhost mysql.database=azkaban mysql.user=root mysql.password=root mysql.numconnections=100# Velocity dev modevelocity.dev.mode=false# Azkaban Jetty server properties.jetty.maxThreads=25jetty.ssl.port=8443jetty.port=8081jetty.keystore=keystore jetty.password=jiaoroot jetty.keypassword=jiaoroot jetty.truststore=keystore jetty.trustpassword=jiaoroot# Azkaban Executor settingsexecutor.port=12321# mail settingsmail.sender=844072586@qq.com mail.host=smtp.qq.com job.failure.email= job.success.email= lockdown.create.projects=falsecache.directory=cache
主要修改时区+mysql配置+SSL密码和文件路径+邮箱配置。不贴注释了,一看就懂。
5.1.2. 修改/conf/
目录下的azkaban-users.xml
<azkaban-users> <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" /> <user username="metrics" password="metrics" roles="metrics"/> <user username="admin" password="admin" roles="admin"> <role name="admin" permissions="ADMIN" /> <role name="metrics" permissions="METRICS"/></azkaban-users>
5.2 执行服务器配置
修改/executor/conf
目录下的azkaban.properties
#Azkabandefault.timezone.id=Asia/Shanghai# Azkaban JobTypes Pluginsazkaban.jobtype.plugin.dir=plugins/jobtypes#Loader for projectsexecutor.global.properties=conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306mysql.host=localhost mysql.database=azkaban mysql.user=root mysql.password=root mysql.numconnections=100# Azkaban Executor settingsexecutor.maxThreads=50executor.port=12321executor.flow.threads=30
6. 执行
6.1 启动web服务器
在webserver/bin
目录下,执行[root@s166 webserver]# nohup bin/azkaban-web-start.sh 1>/tmp/azstd.out 2>/tmp/azerr.out &
启动服务。
小技巧:先别记着用nohup执行,不然报错不能够及时的反馈,应该在尝试执行通过后再去尝试用nohup来执行。[root@s166 executor]# bin/azkaban-executor-start.sh
我大概见到的一些报错是:
/bin/目录下没有keystore文件------需要把它复制到bin下
找不到各种配置文件----- 我在配置文件中将这些文件配置成绝对路径。
6.2 启动执行服务器
在/executor/bin/
目录下执行[root@s166 webserver]# bin/azkaban-web-start.sh
6.3 浏览器访问https://s166:8443/
如果你看到这样的画面,证明你错了,没有在根目录下执行,而是习惯性的在bin目录下执行启动文件,所以它的很多css都加载不到。
这才是正确的打开方式
用设置的账号密码登录。
7. Azkaban实战
7.1 单一job示例
创建job描述文件
vim command.job#command.jobtype=command command=echo fantj666
将job资源文件打包成zip文件
zip command.job通过azkaban的web管理平台创建project并上传job压缩包
首先创建project创建工程
上传文件
执行日志
7.2 多job工作流flow
创建有依赖关系的多个job描述
第一个job:foo.job
# foo.jobtype=commandcommand=echo foo
第二个job:bar.job依赖foo.job
# bar.jobtype=commanddependencies=foocommand=echo bar
将所有job资源文件打到一个zip包中
上传zip包并启动
查看job log
job list
foo job log
bar job log
7.3 操作hadoop
vim fs.job
# fs.jobtype=commandcommand=/home/fantj/hadoop/bin/hadoop fs -lsr /
打包成zip上传
启动job并查看lob
7.4 操作hive
hive脚本test.sql
use default; drop table aztest;create table aztest(id int,name string,age int) row format delimited fields terminated by ',' ; load data inpath '/aztest/hiveinput' into table aztest; create table azres as select * from aztest; insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest;
job文件hivef.job
# hivef.jobtype=commandcommand=/home/fantj/hive/bin/hive -f 'test.sql'
打zip包-上传-执行-查log
作者:FantJ
链接:https://www.jianshu.com/p/c7d6bf6191e7