本文共 8807 字,大约阅读时间需要 29 分钟。
背景
这两天实在无聊...只能靠读论文、做笔记、学框架、打游戏消磨时间,想找个人说话都费劲,没想到在家比在学校还憋闷..
闲言少叙书归正传,整理一下前几天学习Azkaban的笔记,操作环境依旧是CentOS7,前提环境是装了jdk8,如果配了Hadoop、hive、HBase更好。
Azkaban和oozie一样都是任务调度工具,但它的webui界面比oozie可好多了,操作基本都在界面上完成
安装、配置与启动
安装
需要三个文件,自行下载
把其中的executor和web-server上传到centos中,sql脚本在本地解压
配置
1、打开MySQL,创建数据库azkaban,执行sql-script压缩包中的create-all.sql,创建一些表,执行完的结果如下所示
2、进入CentOS,创建azkaban目录,把那两个压缩包解压到里面,并进入azkaban目录,把解压得到的web目录改名为server,executor目录改名为executor
3、用java的keytool生成密钥,给出keystore名称、密钥别名、加密算法
# keytool -keystore keystore -alias jetty -genkey -keyalg RSAEnter keystore password: Re-enter new password:What is your first and last name? [Unknown]: szcWhat is the name of your organizational unit? [Unknown]: uestcWhat is the name of your organization? [Unknown]: uestcWhat is the name of your City or Locality? [Unknown]: anyangWhat is the name of your State or Province? [Unknown]: henanWhat is the two-letter country code for this unit? [Unknown]: ayIs CN=szc, OU=uestc, O=uestc, L=anyang, ST=henan, C=ay correct? [no]: yEnter key password for(RETURN if same as keystore password): Warning:The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".
记得输入的密码即可,别的随便输。完成后,可以在当前目录下看到keystore文件
# lltotal 4drwxr-xr-x. 7 root root 92 May 4 17:19 executor-rw-r--r--. 1 root root 2209 May 4 17:33 keystoredrwxr-xr-x. 8 root root 103 May 4 17:19 server
亦可以通过keytool命令查看文件内容
# keytool -keystore keystore -listEnter keystore password: Keystore type: JKSKeystore provider: SUNYour keystore contains 1 entryjetty, May 4, 2020, PrivateKeyEntry,Certificate fingerprint (SHA1): B6:29:89:89:11:D1:45:BA:5E:3E:B0:B0:BC:E7:F0:12:29:D0:05:C0Warning:The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".
可以看到,公钥签名已经生成了
4、进入server目录下的conf目录,修改配置文件server.properties
#Azkaban Personalization Settingsazkaban.name=Testazkaban.label=My Local Azkabanazkaban.color=#FF3601azkaban.default.servlet.path=/indexweb.resource.dir=/home/szc/azkaban/server/web # web根目录,改为绝对路径default.timezone.id=Asia/Shanghai # 时区改为上海#Azkaban UserManager classuser.manager.class=azkaban.user.XmlUserManageruser.manager.xml.file=/home/szc/azkaban/server/conf/azkaban-users.xml # 用户文件,改为绝对路径#Loader for projectsexecutor.global.properties=/home/szc/azkaban/executor/conf/global.properties # executor配置文件,改为绝对路径azkaban.project.dir=projectsdatabase.type=mysqlmysql.port=3306mysql.host=192.168.0.102 # 数据库ipmysql.database=azkabanmysql.user=root # 数据库用户名密码mysql.password=rootmysql.numconnections=100# Velocity dev modevelocity.dev.mode=false# Azkaban Jetty server properties.jetty.maxThreads=25jetty.ssl.port=8443jetty.port=8081jetty.keystore=/home/szc/azkaban/keystore # 密钥库绝对路径jetty.password=szcszc # 密钥库密码jetty.keypassword=szcszc # 密钥密码jetty.truststore=/home/szc/azkaban/keystore # 信任密钥库绝对路径jetty.trustpassword=szcszc # 信任密钥库密码# Azkaban Executor settingsexecutor.port=12321# mail settingsmail.sender=mail.host=job.failure.email=job.success.email=lockdown.create.projects=falsecache.directory=/home/szc/azkaban/server/cache # 缓存绝对路径
以上路径不存在(主要是缓存路径)就创建,然后再修改user.xml,加一个用户,给定用户名密码和角色
5、进入executor目录的conf目录,修改配置文件azkaban.properties
#Azkabandefault.timezone.id=Asia/Shanghai # 时区为上海# Azkaban JobTypes Pluginsazkaban.jobtype.plugin.dir=/home/szc/azkaban/executor/plugins/jobtypes # 绝对路径#Loader for projectsexecutor.global.properties=/home/szc/azkaban/executor/conf/global.properties # 绝对路径azkaban.project.dir=projectsdatabase.type=mysqlmysql.port=3306mysql.host=192.168.0.102 # 数据库ipmysql.database=azkabanmysql.user=root # 数据库用户名密码mysql.password=rootmysql.numconnections=100# Azkaban Executor settingsexecutor.maxThreads=50executor.port=12321executor.flow.threads=30
绝对路径不存在就创建,然后开启8443端口号
启动
1、启动server
[root@localhost server]# bin/azkaban-web-start.sh
2、启动executor
[root@localhost executor]# bin/azkaban-executor-start.sh
3、到windows浏览器中,访问(ip换成自己的),输入用户名密码,即可看到以下页面
基本使用
以下操作都在windows下执行
1、创建first.job文件,编写作业指令
type=commandcommand=echo "First job of szc"
2、把first.job压缩到zip文件中
3、在azkaban的web界面里,新建项目,给出项目名和描述
4、进入项目界面,点击上传
然后选择刚创建的压缩文件,点击上传
5、这时会生成作业流,如果Execute Now为绿色,说明作业文件编写格式正确。
点击立即执行后,进入作业流概况界面,选择立即执行
作业流会上传,然后我们点击继续
就会看到执行结果为成功
点击Job List,选择刚执行完的作业,点击细节,会显示执行的细节,包括我们要输出的那句话
6、如果要预约,就可以在作业流概况界面里,点击左下角的预约,选择时间、时区、日期、重复频率
点击预约后,会在预约结果界面里看到我们预约
到了指定时间,作业流就会执行
执行shell脚本
以下操作都在windows中进行
1、编写p1.sh,把当前时间追加到azkaban服务器的指定文件下
date >> /home/szc/az1.txt
2、编写作业文件,执行p1.sh
type=commandcommand=sh p1.sh
3、把作业文件和p1.sh打包到一个zip包的同级目录下
4、在azkaban的web界面里,新建项目,上传zip包,定时执行工作流
5、过几分钟后,在azkaban服务器的/home/szc/az1.txt里,可以看到如下内容
# cat /home/szc/az1.txtMon May 4 18:49:53 CST 2020Mon May 4 18:50:53 CST 2020Mon May 4 18:51:53 CST 2020Mon May 4 18:52:53 CST 2020
执行Java作业
1、编写java类,实现run()方法
package azk;public class AzkabanDemo0 { public void run() { FileOutputStream fileOutputStream = null; try { File file = new File("/home/szc/out.txt"); if (!file.exists()) { file.createNewFile(); } fileOutputStream = new FileOutputStream(file); fileOutputStream.write("First java job".getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fileOutputStream != null) { fileOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } public static void main(String[] args) { new AzkabanDemo0().run(); }}
2、把此项目打成jar包,上传到azkaban服务器下azkaban安装目录中的lib目录下(/home/szc/azkaban/lib)
3、编写job文件,指定jar文件路径和主类全类名
type=javaprocessjava.class=azk.AzkabanDemo0classpath=/home/szc/azkaban/lib/*
4、把job文件打包上传到web ui,执行,结果如下图所示
查看/home/szc/output.txt的内容如下
# cat out.txtFirst java job
执行hdfs任务
1、启动hadoop
2、编写job文件,执行hdfs命令
type=commandcommand=/home/szc/cdh/hadoop-2.5.0-cdh5.3.6/bin/hadoop fs -mkdir /azkaban_test
3、把job文件打包,上传到web界面,执行
4、执行完成后的截图如下所示
在hdfs的web界面中浏览文件系统,如下所示
执行MR作业
1、启动hadoop
2、编写job文件
type=commandcommand=/home/szc/cdh/hadoop-2.5.0-cdh5.3.6/bin/hadoop jar /home/szc/cdh/hadoop-2.5.0-cdh5.3.6/share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /user/root/wordcount.txt /user/root/output
要保证输入文件存在,输出目录不存在,路径都是hdfs上的路径
3、打包job作业,上传到web界面执行
4、执行完后,web界面结果如下图所示
查看/user/root/output中输出文件的内容
# ./cdh/hadoop-2.5.0-cdh5.3.6/bin/hadoop fs -cat /user/root/output/part-r-0000020/05/05 12:22:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicablegeorge 1henry 1jason 1mike 2
执行hive脚本
1、启动metastore和hive
# hive --service metastore &# hive
2、编写/home/szc/student.txt文件,内容如下
1 szc2 jason3 mike
3、编写hive.sql脚本如下,就是把student.txt文件输入到hive里,然后再输出..
use default;drop table student;create table student(id int, name string) row format delimited fields terminated by '\t';load data local inpath '/home/szc/student.txt' into table student;insert overwrite local directory '/home/szc/student' row format delimited fields terminated by '\t'select * from student;
4、编写job文件,执行hive.sql
type=commandcommand=/home/szc/apache-hive-2.3.7/bin/hive -f './hive.sql'
5、打包上传到页面,执行后,可以看到结果
并且在指定的/home/szc目录中也创建了student目录,由于我的hive指定输出压缩,所以得到的是deflate文件,不能查看内容。但是在hive中可以看到读取的数据
hive> show tables;OK...student...Time taken: 0.065 seconds, Fetched: 18 row(s)hive> select * from student;OK1 szc2 jason3 mike
多任务流调度
1、创建四个job文件:first_,second,third,forth,其中第二三个依赖第一个,第四个依赖第二三个,可以写出作业文件如下
first_.job
type=commandcommand=echo "first job"
second.job
type=commandcommand=echo "second job"dependencies=first_
third.job
type=commandcommand=echo "third job"dependencies=first_
forth.job
type=commandcommand=echo "forth job"dependencies=second,third
2、将这四个文件打包上传,执行工作流,在总览工作流界面,可以看到作业DAG如下所示
3、完成后,查看Job List中的时间线,如下所示
点击其中一项,可以看到输出结果
给作业流传参
1、在页面上打开first项目的first数据流
2、作业流打开后,点击右边的编辑
3、点击修改command的值,换成echo ${params},里面的$表示引用,params为要引用的参数。然后点击改变任务描述即可
4、这样,执行这个作业的时候,在概览作业流界面点击作业流参数,点击Add Row
给出参数名和参数值后,点击Execute即可
最后可以看到,作业执行成功
详情页里,参数也如期输出
邮箱通知设置(以QQ邮箱为例)
1、获取qq邮箱第三方授权码,方法见此链接
2、修改server的配置文件azkaban.properties
mail.sender=392004248@qq.com # 发送方mail.host=smtp.qq.com # 发送方的smtp地址mail.user=392004248@qq.com # 发送方用户名mail.password=bdlkjkwrhbvabigf # 发送方授权码
3、在web页面,执行工作流时,指定成功或失败时发送的邮箱即可
这样执行完成后,我们就能收到结果邮件了
4、查看邮件
内容如下
结语
像oozie、azkaban这样的任务调度器,都是调用别的命令程序执行具体任务(比如调用echo程序执行回显,调用hadoop jar执行MR作业等),他们只负责任务何时执行,以及结果的写入、出错的处理等。
不过azkaban的webui有点儿好用
转载地址:https://blog.csdn.net/qq_37475168/article/details/106020705 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!