一、Azkaban概述 Azkaban是一个分布式工作流管理器,在LinkedIn上实现,以解决Hadoop作业依赖性问题。 我们有需要按顺序运行的工作,从ETL工作到数据分析产品。 特点: 1)给用户提供了一个非常友好的可视化界面->web界面 2)非常方便的上传工作流-》打成压缩包 3)设置任务间的关系 4)权限设置-》删库到跑路 5)模块化 6)随时停止和启动任务 7)可以查看日志记录 二、与Oozie对比 和Oozie相对比,azkaban是一个轻量级调度工具。 企业应用的功能并非小众的功能可以使用Azkaban。 1)功能 两个任务流调度器可以调度使用mr,java,脚本工作流任务 都可以进行定时调度... 2)使用 az直接传参 Oozie直接传参,支持EL表达式... 3)定时 az定时执行任务基于时间 Oozie任务基于时间和数据 4)资源 az有严格的权限控制 Oozie无严格权限控制 三、Azkaban安装部署 1、准备工作 1)快照 2)上传安装包 Azkaban Web 服务器:azkaban-web-server-2.5.0.tar.gz Azkaban Excutor 执行服务器:azkaban-executor-server-2.5.0.tar.gz Azkaban 初始化脚本文件:azkaban-sql-script-2.5.0.tar.gz cd /root/hd mkdir azkaban 上传安装包到/root/hd/azkaban目录下 3)解压重命名 cd /root/hd/azkaban/ 解压 tar -zxvf azkaban-web-server-2.5.0.tar.gz tar -zxvf azkaban-executor-server-2.5.0.tar.gz tar -zxvf azkaban-sql-script-2.5.0.tar.gz 删除安装包 rm -f azkaban-executor-server-2.5.0.tar.gz rm -f azkaban-web-server-2.5.0.tar.gz rm -f azkaban-sql-script-2.5.0.tar.gz 重命名 mv azkaban-executor-2.5.0/ executor mv azkaban-web-2.5.0/ server 4)mysql中azkaban脚本导入 create database azkaban; use azkaban; source /root/hd/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql 2、安装部署 1)创建SSL(安全连接)配置 服务器需要一个证书 cd /root/hd/azkaban/server keytool -keystore keystore -alias jetty -genkey -keyalg RSA [root@hd09-1 server]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA 输入密钥库口令: 123456(密码是看不见的) 再次输入新口令: 123456 您的名字与姓氏是什么? [Unknown]: 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的省/市/自治区名称是什么? [Unknown]: 该单位的双字母国家/地区代码是什么? [Unknown]: CN CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN是否正确? [否]: 是 输入 <jetty> 的密钥口令 123456 (如果和密钥库口令相同, 按回车): [root@hd09-1 server]# 2)时间同步设置 生成时区文件 tzselect生成 5->9->1->yes 拷贝时区文件 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 集群时间同步 crt中开启交互窗口 发送 sudo date -s '2018-11-29 20:22:39' 3)修改配置文件 azkaban.properties cd /root/hd/azkaban/server/conf vi azkaban.properties #Azkaban Personalization Settings azkaban.name=Test #服务器 UI 名称,用于服务器上方显示的名字 azkaban.label=My Local Azkaban #描述 azkaban.color=#FF3601 #UI 颜色 azkaban.default.servlet.path=/index web.resource.dir=/root/hd/azkaban/server/web/ #默认根 web 目录 default.timezone.id=Asia/Shanghai #默认时区,已改为亚洲/上海 默认为美国 #Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager #用户权限管理默认类 user.manager.xml.file=/root/hd/azkaban/server/conf/azkaban-users.xml #用户配置 #Loader for projects # global 配置文件所在位置 executor.global.properties=/root/hd/azkaban/executor/conf/global.properties azkaban.project.dir=projects database.type=mysql #数据库类型 mysql.port=3306 #端口号 mysql.host=hd09-1 #数据库连接 IP mysql.database=azkaban #数据库实例名 mysql.user=root #数据库用户名 mysql.password=root #数据库密码 mysql.numconnections=100 #最大连接数 # Velocity dev mode velocity.dev.mode=false # Jetty 服务器属性 # Azkaban Jetty server properties. jetty.maxThreads=25 #最大线程数 jetty.ssl.port=8443 #Jetty SSL 端口 jetty.port=8081 #Jetty 端口 jetty.keystore=/root/hd/azkaban/server/keystore #SSL 文件名 jetty.password=123456 #SSL 文件密码 jetty.keypassword=123456 #Jetty 主密码 与 keystore 文件相同 jetty.truststore=/root/hd/azkaban/server/keystore #SSL 文件名 jetty.trustpassword=123456 # SSL 文件密码 # Azkaban Executor settings # 执行服务器属性 executor.port=12321 #执行服务器端口 # mail settings mail.sender= #发送邮箱 mail.host= #发送邮箱 smtp 地址 job.failure.email= #任务失败时发送邮件的地址 job.success.email= #任务成功时发送邮件的地址 lockdown.create.projects=false cache.directory=cache #缓存目录 4)修改配置文件 azkaban-users.xml vi 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,metrics"/> <role name="admin" permissions="ADMIN" /> <role name="metrics" permissions="METRICS"/> </azkaban-users> 5)修改配置文件 azkaban.properties cd /root/hd/azkaban/executor/conf vi azkaban.properties #Azkaban default.timezone.id=Asia/Shanghai #时区 # Azkaban JobTypes Plugins #插件配置,插件所在位置 azkaban.jobtype.plugin.dir=/root/hd/azkaban/executor/plugins/jobtypes #Loader for projects executor.global.properties=/root/hd/azkaban/executor/conf/global.properties azkaban.project.dir=projects #数据库设置 database.type=mysql #数据库类型(目前只支持 mysql) mysql.port=3306 #数据库端口号 mysql.host=hd09-1 #数据库 IP 地址 mysql.database=azkaban #数据库实例名 mysql.user=root #数据库用户名 mysql.password=root #数据库密码 mysql.numconnections=100 #最大连接数 # Azkaban Executor settings # 执行服务器配置 executor.maxThreads=50 #最大线程数 executor.port=12321 #端口号(如修改,请与 web 服务中一致) executor.flow.threads=30 #线程数 6)启动web服务器 cd /root/hd/azkaban/server bin/azkaban-web-start.sh 7)启动执行器 cd /root/hd/azkaban/executor bin/azkaban-executor-start.sh 8)访问web https://hd09-1:8443 打开谷歌或是火狐浏览器输入https://IP:8443,此处测试的地址是https://hd09-1:8443,此时可能会打不开界面,点击高级 点击继续前往hd09-1(不安全) 此时会跳到登录界面,输入在配置文件azkaban-users.xml,中配置的用户名密码admin/admin,点击登录即可 9)配置环境变量 vi /etc/profile 在最后面加上 #Azkaban export AZKABAN_WEB_HOME=/root/hd/azkaban/server export AZKABAN_EXE_HOME=/root/hd/azkaban/executor export PATH=$PATH:$AZKABAN_WEB_HOME/bin:$AZKABAN_EXE_HOME/bin 执行 source /etc/profile 声明环境变量 此时就可以直接输入 azkaban-web-start.sh azkaban-executor-start.sh 启动azkaban了。 四、应用 下面的#后面的是文件名,把每个任务的文件打成zip压缩包后传到azkaban页面中的project中即可执行任务。 1、command类型单一任务案例 # command.job type=command command=echo 'hello world' 2、command类型多个任务案例 # f.job type=command command=echo 'hello' # b.job type=command dependencies=f command=echo 'world' 3、azkaban操作HDFS任务 # hdfs.job type=command command=/root/hd/hadoop-2.8.4/bin/hdfs dfs -mkdir /azkaban 4、azkaban启动集群任务 # start.job type=command command=/root/hd/hadoop-2.8.4/sbin/start-dfs.sh 5、azkaban启动MapReduce程序 # wc.job type=command command=/root/hd/hadoop-2.8.4/bin/hadoop jar hadoop-mapreduce-examples-2.8.4.jar wordcount /azwc/in /azwc/out 6、azkaban启动Hive程序 # hive.job type=command command=/root/hd/hive/bin/hive -f 'azhive.sql' # azhive.sql use default; drop table aztest; create table aztest(id int,name string) row format delimited fields terminated by ','; load data inpath '/azdata/user.txt' into table aztest; create table azres as select * from aztest; insert overwrite directory '/azdata/userout' select count(1) from aztest;