一.Azkaban基础
国内翻译成了阿兹卡班
1.为什么使用azkaban
hadoop大数据处理一般具有延迟性,适合定时调度。而azkaban,就是一个定时调度工具
那为什么不用crontab?
简单的定时你是可以用crontab,那复杂的呢?比如我任务a依赖于任务b,任务b又依赖于任务c,你怎么执行?
所以,azkaban就是一个适用于执行工作流的定时调度系统
2.azkaban执行流程
3.azkaban可以兼容所有版本的hadoop
(反正都是命令执行)type一共就两种,command和javaprocess
二.安装azkaban
前提是,你已经安装了mysql
1.配置webserver
1.1.运行建表sql
在mysql中新建azkaban数据库,运行建表sql
source create-all-sql-2.5.0.sql;
1.2.生成密钥
用于在浏览器上通过https访问
1.3.配置azkaban.properties,修改mysql连接信息,时区,密钥信息
1.4.在xml中配置用户
2.关于executor的配置
与配置webserver相似,配置azkaban.properties,修改mysql连接信息,时区
3.分别启动executor和webserver
踩坑记录 之前版本与视频不一致,我的高版本中没有ssl属性,就算我自己添加进去,启动时候也不读,所以不能ssl访问
4.web访问路径
https://ip:8443/
这个8443端口你是可以在webserver启动日志上最后一行看到的
三.azkaban发送邮件
1.25端口的坑
这是一个坑,我找到了方法但是不想去解决了
2021/02/25 15:02:44.380 +0800 ERROR [Emailer] [Azkaban] Email message send failed
javax.mail.MessagingException: Could not connect to SMTP host: imap.qiye.163.com, port: 25;
日志打印了这个错,我在服务器上telnet确实不通,但是在我电脑本地确实是通的,所以不是邮件服务器的问题。
原因:
我租的阿里云服务器,然后阿里云服务器是禁用25端口的,你想要使用需要提交申请,七个工作日有结果。
我看网上好多说基本上申请了也不会给开通,然后我也不是必须用到他,可能以后都用不到这个,我就没有再去研究。
说一下配置需要注意的地方
扩展:
想让telent命令生效也是需要yum安装依赖包的
457 telnet smtp.qiye.163.com 25 #开始告诉我telnet命令不生效,我还以为linux不支持telent命令
458 yum install telnet.*
459 telnet smtp.qiye.163.com 25#
2.在webserver的配置文件中配置邮件发送方
mail.sender=123@qq.com
mail.host=smtp.qq.com
mail.user=123@qq.com
mail.password=Fmb4chLkfvnB25wP#注意这个不是邮箱密码,而是授权码,至于怎么获得授权码,qq和网易不同,自己百度去
3.在页面上配置邮件的接收方
就是点击执行之后出来那个弹框
四.azkaban与多种类型交互
你想在azkaban上运行,那就必须要有.job文件
.job文件的一个属性是type。type又分为两种,command和javaprocess。以下分别举例说明
1.最简单的command型
1.1我创建了一个文件叫1.job 内容如下
type=command
command=echo "xy 1"
1.2将1.job打zip压缩包
打zip包方式需要注意,直接在当前路径下选中压缩,不要外边再套一层文件夹
1.3通过webserver页面新建project
1.4在project中上传zip压缩包
在上传zip包时,azkaban会校验语法是否有错,如果语法有错,那上传失败
1.5执行
可以选择定时执行也可以选择立即执行
1.6日志查看
2.有依赖关系的工作流
2.1.目标
2.2.编写job文件,增加依赖关系
增加依赖关系是重点
在job文件中增加属性 dependencies=job文件名称
如上图,2和3需要在1执行完在执行,那么2和3就依赖于1.然后4要在2和3执行完再执行,那么4就依赖于2和3.但是最开始的1,谁都不依赖
以下是我的4个job文件
1.job
type=command
command=echo 'xy first'
2.job
type=command
command=echo "xy second"
dependencies=1
3.job
type=command
command=echo "xy third"
dependencies=1
4.job
依赖多个时候用逗号,隔开
type=command
command=echo "xy four"
dependencies=2,3
2.3打zip压缩包
2.4执行结果
这就是前边想实现的效果
2.5查看日志
3. azkaban执行java代码
3.1.需要一个有main方法的类,并且package打成jar包
这是一个现成的特别简单的java程序
https://download.csdn.net/download/qq_35653822/15482966
3.2编写.job文件
.job文件不管什么时候都是必须存在的
type=javaprocess
java.class=com.atguigu.AzkabanTest#类全路径名
classpath=azkabanJob-1.0-SNAPSHOT.jar#可以写绝对路径如/root/java/azkabanJob-1.0-SNAPSHOT.jar
#也可以这样写相对路径,我这是把.job文件和jar包放在同一个路径下了
3.3打zip压缩包
3.4执行
正常执行就行 我这没截图
4.azkaban执行shell脚本
4.1编写shell脚本
由于文化水平不高,我就编写了一个贼简单的
shell.sh
date >> /root/xy/xy.txt
4.2编写.job文件
type=command
command=sh shell.sh#注意需要通过bash或者sh执行这个脚本
4.3打zip压缩包
5.azkaban操作hdfs系统
这个首先要保证hdfs是启动着的
5.1.编写.job文件
type=command
command=hdfs dfs -mkdir azkaban#就直接写hdfs命令就行
5.2打包运行
5.3去hdfs控制台或者通过hdfs命令查看命令是否执行
我这是建立文件夹,我就上控制台上翻一翻就行了
6.azkaban操作mapreduce
这个需要保证hadoop是启动着的
6.1编写.job文件
type=command
command=hadoop jar /root/soft/hadoop/hadoop-3.1.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.1.3.jar pi 2 3
踩坑记录,不要写环境变量${}这种,他不识别
失败日志
6.2上传打包运行
感谢这个死慢的mapreduce,我终于能看到运行中是什么样子了
7.azkaban 操作hive
首先要保证你azkaban的executor所在节点,是可以操作hive命令的
比如我当时的本来hive和azkaban不在一台机器上,然后就把hive文件夹整个scp过来就好了,直接就能运行命令行
7.1hive.sql
我想通过hive -f xxx.sql的方式进行测试,所以写了个hive.sql
drop table if exists test.employeeT;
CREATE TABLE `test.employeeT`(
`dept_no` int,
`addr` string,
`tel` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
load data local inpath '/root/soft/azkaban/test.txt' into table test.employeeT;
7.2.job文件
type=command
command=/root/soft/hive/apache-hive-3.1.2-bin/bin/hive -f hive.sql
7.3打包运行
题外:
这个时候我去yarn控制台上,是看不到运行记录的,后来查到,简单的查询不会涉及的mapreduce 比如我写了一个建表语句 就不会在yarn控制台上看到
7.4运行计算类型的hive sql
将hive.job修改如下
type=command
command=/root/soft/hive/apache-hive-3.1.2-bin/bin/hive -e "select count(*) from test.employeeT"
7.5打包上传运行
查看yarn控制台,这次能看到任务了
五.azkaban参数上传
1.azkaban可以直接在web界面修改文件
2.通过${}传参
我使用的时${paramtest},其中paramtest就是需要上传的参数
3.上传参数
执行时通过key:value形式上传参数
4.输出结果