Azkaban在CentOS7下安装和使用

背景

这两天实在无聊...只能靠读论文、做笔记、学框架、打游戏消磨时间,想找个人说话都费劲,没想到在家比在学校还憋闷..

闲言少叙书归正传,整理一下前几天学习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 RSA

Enter keystore password:  
Re-enter new password:
What is your first and last name?
  [Unknown]:  szc
What is the name of your organizational unit?
  [Unknown]:  uestc
What is the name of your organization?
  [Unknown]:  uestc
What is the name of your City or Locality?
  [Unknown]:  anyang
What is the name of your State or Province?
  [Unknown]:  henan
What is the two-letter country code for this unit?
  [Unknown]:  ay
Is CN=szc, OU=uestc, O=uestc, L=anyang, ST=henan, C=ay correct?
  [no]:  y


Enter key password for <jetty>
    (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文件

# ll
total 4
drwxr-xr-x. 7 root root   92 May  4 17:19 executor
-rw-r--r--. 1 root root 2209 May  4 17:33 keystore
drwxr-xr-x. 8 root root  103 May  4 17:19 server

亦可以通过keytool命令查看文件内容

# keytool -keystore keystore -list
Enter keystore password:  
Keystore type: JKS
Keystore provider: SUN


Your keystore contains 1 entry


jetty, 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:C0


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".

可以看到,公钥签名已经生成了

4、进入server目录下的conf目录,修改配置文件server.properties

#Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/home/szc/azkaban/server/web  # web根目录,改为绝对路径
default.timezone.id=Asia/Shanghai  # 时区改为上海


#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/home/szc/azkaban/server/conf/azkaban-users.xml # 用户文件,改为绝对路径


#Loader for projects
executor.global.properties=/home/szc/azkaban/executor/conf/global.properties # executor配置文件,改为绝对路径
azkaban.project.dir=projects


database.type=mysql
mysql.port=3306
mysql.host=192.168.0.102 # 数据库ip
mysql.database=azkaban
mysql.user=root # 数据库用户名密码
mysql.password=root
mysql.numconnections=100


# Velocity dev mode
velocity.dev.mode=false


# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=/home/szc/azkaban/keystore # 密钥库绝对路径
jetty.password=szcszc # 密钥库密码
jetty.keypassword=szcszc # 密钥密码
jetty.truststore=/home/szc/azkaban/keystore # 信任密钥库绝对路径
jetty.trustpassword=szcszc # 信任密钥库密码


# Azkaban Executor settings
executor.port=12321


# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=


lockdown.create.projects=false


cache.directory=/home/szc/azkaban/server/cache # 缓存绝对路径

以上路径不存在(主要是缓存路径)就创建,然后再修改user.xml,加一个用户,给定用户名密码和角色

<azkaban-users>
    <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
    <user username="metrics" password="metrics" roles="metrics"/>
    <user username="szc" password="szc" roles="admin"/>  <!-- 新添加的用户 -->


    <role name="admin" permissions="ADMIN" />
    <role name="metrics" permissions="METRICS"/>
</azkaban-users>

5、进入executor目录的conf目录,修改配置文件azkaban.properties

#Azkaban
default.timezone.id=Asia/Shanghai # 时区为上海


# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=/home/szc/azkaban/executor/plugins/jobtypes # 绝对路径


#Loader for projects
executor.global.properties=/home/szc/azkaban/executor/conf/global.properties # 绝对路径
azkaban.project.dir=projects


database.type=mysql
mysql.port=3306
mysql.host=192.168.0.102 # 数据库ip
mysql.database=azkaban
mysql.user=root # 数据库用户名密码
mysql.password=root
mysql.numconnections=100


# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.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换成自己的)https://192.168.57.141:8443/,输入用户名密码,即可看到以下页面

基本使用

以下操作都在windows下执行

1、创建first.job文件,编写作业指令

type=command
command=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=command
command=sh p1.sh

3、把作业文件和p1.sh打包到一个zip包的同级目录下

4、在azkaban的web界面里,新建项目,上传zip包,定时执行工作流

 5、过几分钟后,在azkaban服务器的/home/szc/az1.txt里,可以看到如下内容

# cat /home/szc/az1.txt

Mon May  4 18:49:53 CST 2020
Mon May  4 18:50:53 CST 2020
Mon May  4 18:51:53 CST 2020
Mon 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=javaprocess
java.class=azk.AzkabanDemo0
classpath=/home/szc/azkaban/lib/*

4、把job文件打包上传到web ui,执行,结果如下图所示

 查看/home/szc/output.txt的内容如下

# cat out.txt
First java job

执行hdfs任务

1、启动hadoop

2、编写job文件,执行hdfs命令

type=command
command=/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=command
command=/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-00000

20/05/05 12:22:39 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
george    1
henry    1
jason    1
mike    2

执行hive脚本

1、启动metastore和hive

# hive --service metastore &
# hive

2、编写/home/szc/student.txt文件,内容如下

1    szc
2    jason
3    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=command
command=/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;

OK
1    szc
2    jason
3    mike

多任务流调度

1、创建四个job文件:first_,second,third,forth,其中第二三个依赖第一个,第四个依赖第二三个,可以写出作业文件如下

first_.job

type=command
command=echo "first job"

second.job

type=command
command=echo "second job"
dependencies=first_

third.job

type=command
command=echo "third job"
dependencies=first_

forth.job

type=command
command=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邮箱第三方授权码,方法见此链接http://xinzhi.wenda.so.com/a/1523352273202716

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有点儿好用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在CentOS 7上安装Azkaban,请按照以下步骤进行操作: 1. 首先,在CentOS 7上安装Java Development Kit (JDK)。可以使用以下命令安装OpenJDK 8: ``` sudo yum install java-1.8.0-openjdk-devel ``` 2. 接下来,下载并安装Azkaban。可以使用以下命令克隆Azkaban的GitHub仓库: ``` git clone https://github.com/azkaban/azkaban.git ``` 3. 进入Azkaban的目录,并构建Azkaban的执行服务器和Web服务器。可以使用以下命令进入执行服务器目录并构建: ``` cd azkaban/azkaban-exec-server-3.91/ ./gradlew build installDist ``` 然后,使用以下命令进入Web服务器目录并构建: ``` cd ../azkaban-web-server-3.91/ ./gradlew build installDist ``` 4. 安装数据库。Azkaban使用MySQL作为其后端数据库。使用以下命令安装MySQL: ``` sudo yum install mysql-server ``` 安装完成后,启动MySQL服务并设置密码: ``` sudo systemctl start mysqld sudo mysql_secure_installation ``` 5. 创建Azkaban数据库和用户。使用以下命令登录到MySQL控制台: ``` mysql -u root -p ``` 创建一个新的数据库: ``` CREATE DATABASE azkaban; ``` 创建一个新的用户并授予数据库访问权限: ``` CREATE USER 'azkaban'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON azkaban.* TO 'azkaban'@'localhost'; FLUSH PRIVILEGES; ``` 6. 配置Azkaban。进入Azkaban的执行服务器目录并编辑`azkaban-web-server/conf/azkaban.properties`文件,将以下属性设置为正确的值: ``` database.type=mysql database.host=localhost database.port=3306 database.user=azkaban database.password=password azkaban.name=MyAzkabanServer azkaban.label=MyAzkabanServer ``` 7. 启动Azkaban执行服务器和Web服务器。分别使用以下命令启动它们: ``` cd ../azkaban-exec-server-3.91/build/install/azkaban-exec-server/ bin/start-exec.sh cd ../../azkaban-web-server-3.91/build/install/azkaban-web-server/ bin/start-web.sh ``` 现在,你应该能够通过浏览器访问Azkaban的Web界面,通过`http://localhost:8081`进行访问。默认用户名和密码是`admin`。 这些是在CentOS 7上安装Azkaban的基本步骤。请按照上述步骤进行操作,并根据需要进行必要的配置更改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Centos7环境下Azkaban 3安装教程(含源码编译)](https://blog.csdn.net/weixin_40983094/article/details/114368998)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值