Azkaban在CentOS7下安装和使用
发布日期:2021-06-22 10:31:02 浏览次数:3 分类:技术文章

本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JVM学习笔记之堆
下一篇:CentOS7下oozie调度任务案例

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月11日 20时50分35秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章