azkban的配置及实战

azkaban的配置
①将以下三个jar包上传到linux系统中 /root/software/

azkaban-executor-server-2.5.0.tar.gz
azkaban-sql-script-2.5.0.tar.gz
azkaban-web-server-2.5.0.tar.gz

②在/usr/local下创建azkaban目录

mkdir /usr/local/azkaban

③将三个jar包解压到/usr/local/azkaban

tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /usr/local/azkaban
tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /usr/local/azkaban
tar -zxvf azkaban-web-server-2.5.0.tar.gz -C /usr/local/azkaban

④更名

cd /usr/local/azkaban
mv azkaban-executor-2.5.0 executor
mv azkaban-web-2.5.0 server

⑤azkaban脚本导入

#获取需要执行的sql的脚本全路径
cd azkaban-2.5.0/
ll
#---->下面是查看到的sql脚本,后面需要执行的是create-all-sql-2.5.0.sql,这个主要是一些建表语句
-rwxr-xr-x 1 root root  129 4月  22 2014 create.active_executing_flows.sql
-rwxr-xr-x 1 root root  216 4月  22 2014 create.active_sla.sql
-rwxr-xr-x 1 root root 4694 4月  22 2014 create-all-sql-2.5.0.sql
-rwxr-xr-x 1 root root  610 4月  22 2014 create.execution_flows.sql
-rwxr-xr-x 1 root root  519 4月  22 2014 create.execution_jobs.sql
-rwxr-xr-x 1 root root  358 4月  22 2014 create.execution_logs.sql
-rwxr-xr-x 1 root root  224 4月  22 2014 create.project_events.sql
-rwxr-xr-x 1 root root  227 4月  22 2014 create.project_files.sql
-rwxr-xr-x 1 root root  280 4月  22 2014 create.project_flows.sql
-rwxr-xr-x 1 root root  285 4月  22 2014 create.project_permissions.sql
-rwxr-xr-x 1 root root  294 4月  22 2014 create.project_properties.sql
-rwxr-xr-x 1 root root  380 4月  22 2014 create.projects.sql
-rwxr-xr-x 1 root root  325 4月  22 2014 create.project_versions.sql
-rwxr-xr-x 1 root root  155 4月  22 2014 create.properties.sql
-rwxr-xr-x 1 root root  498 4月  22 2014 create.schedules.sql
-rwxr-xr-x 1 root root  189 4月  22 2014 create.triggers.sql
-rwxr-xr-x 1 root root   22 4月  22 2014 database.properties
-rwxr-xr-x 1 root root  671 4月  22 2014 update-all-sql-2.1.sql
-rwxr-xr-x 1 root root  156 4月  22 2014 update-all-sql-2.2.sql
-rwxr-xr-x 1 root root  395 4月  22 2014 update.execution_logs.2.1.sql
-rwxr-xr-x 1 root root   59 4月  22 2014 update.project_properties.2.1.sql
#获取当前路径
pwd
#---->路径为
/usr/local/azkaban/azkaban-2.5.0

#进入mysql
mysql -uroot -pRoot123*
#创建azkaban数据库
mysql> create database azkaban;
mysql> use azkaban;
#加载脚本create-all-sql-2.5.0.sql
source /usr/local/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql

#查看以下都有哪些表,可以看到建表成功了
mysql> show tables;
+------------------------+
| Tables_in_azkaban      |
+------------------------+
| active_executing_flows |
| active_sla             |
| execution_flows        |
| execution_jobs         |
| execution_logs         |
| project_events         |
| project_files          |
| project_flows          |
| project_permissions    |
| project_properties     |
| project_versions       |
| projects               |
| properties             |
| schedules              |
| triggers               |
+------------------------+

#退出mysql
exit;

⑥生成密钥对和证书

#在server根目录下执行以下命令
cd /usr/local/azkaban/server
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
输入密钥库口令:  #输入密码
再次输入新口令:  #再次输入密码
您的名字与姓氏是什么?  
  [Unknown]:	#直接回车
您的组织单位名称是什么?  
  [Unknown]:	#直接回车
您的组织名称是什么?  
  [Unknown]:	#直接回车
您所在的城市或区域名称是什么?  
  [Unknown]:	#直接回车
您所在的省/市/自治区名称是什么?  
  [Unknown]:	#直接回车
该单位的双字母国家/地区代码是什么?  
  [Unknown]:	#直接回车
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确?
  []:  #输入 y

输入 <jetty> 的密钥口令
        (如果和密钥库口令相同, 按回车):  #这里博主选择的是y

#到这里密钥对和证书就成功生成了,先在查看一下,公钥存在证书中,私钥存在jetty中
#在server的根路径下生成了keystore文件XXX
[root@hadoop01 server]#keytool -keystore keystore -list
输入密钥库口令:  #输入之前设置的密码
密钥库类型: XXX	#值做了脱敏处理
密钥库提供方: XXX	#值做了脱敏处理

您的密钥库包含 1 个条目

jetty, 2020-7-22, XXX,
证书指纹 (SHA1): XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX


⑦配置webServer

#
cd /usr/local/azkaban/server/conf
vi azkaban.properties

#---->下面是文件内容
#Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/     #<--- 修改为绝对路径 web是在 /usr/local/azkaban/server/web/
default.timezone.id=America/Los_Angeles   #<---修改时区为 Asia/Shanghai

#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml  #<---这里是设置用户名密码的配置文件,路径修改为全路径   /usr/local/azkaban/server/conf/azkaban-users.xml

#Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=localhost   #<---主机名改为配置azkaban服务端的节点的主机名 
mysql.database=azkaban
mysql.user=azkaban  #用户修改为	root
mysql.password=azkaban	#填写mysql的密码
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=keystore   #<---修改为全路径,/usr/local/azkaban/server/keystore	#<---
jetty.password=password	#<---修改为之前配置的密码 这里是123456
jetty.keypassword=password	#<---修改为之前配置的密码 这里是123456
jetty.truststore=keystore	#<---可设置为与jetty.keystore相同的路径,/usr/local/azkaban/server/keystore
jetty.trustpassword=password	#<---可设置为与jetty.password相同的密码

# Azkaban Executor settings
executor.port=12321

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

lockdown.create.projects=false

cache.directory=cache

#---->保存退出
#配置azkaban-users.xml文件,添加用户admin
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"/>  <!-- 此行为新增内容,添加用户admin,密码admin,角色为admin -->
	<role name="admin" permissions="ADMIN" />
	<role name="metrics" permissions="METRICS"/>
</azkaban-users>

-------------------------azkaban的webServer配置完成--------------------------
⑧配置executor的配置文件

cd /usr/local/azkaban/executor/conf
vi azkaban.properties
#--->下面是文件内容
#Azkaban
default.timezone.id=America/Los_Angeles  #<----修改时区  Asia/Shanghai

# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects
executor.global.properties=conf/global.properties  #<---更改为全路径 /usr/local/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=localhost  #<----修改为配置executor节点的主机名 
mysql.database=azkaban2   #这里修改为azkaban
mysql.user=azkaban   #<---用户修改为 root
mysql.password=azkaban  #<----密码修改为mysql密码 
mysql.numconnections=100

# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30

#保存退出

⑨时间同步(时间同步前有开启集群的需要先关闭集群,否则可能会导致节点异常,azkaban的时间就是服务所在节点的时间)
方法一:

#所有节点同时执行,拷贝Asia/Shanghai时区文件到/etc/下,并覆盖之前的localtime
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

方法二(自动同步网络时间,需要网络)
美国标准技术院时间服务器:time.nist.gov(192.43.244.18)
上海交通大学网络中心NTP服务器地址:ntp.sjtu.edu.cn(202.120.2.101)
中国国家授时中心服务器地址:cn.pool.ntp.org(210.72.145.44)

ntpdate cn.pool.ntp.org

方法三:搭建时间服务器

-------------------------azkaban的executor配置完成--------------------------

⑨启动azkaban web服务端

cd /usr/local/azkaban/
./server/bin/azkaban-web-start.sh

#启动起来后回车,继续下面的操作
jps
#---->能看到下面的进程启动了
AzkabanWebServer

⑩启动executor

./executor/bin/azkaban-executor-start.sh

#jps查看进程是否启动
jps
#---->可以看到有下面的进程
AzkabanExecutorServer

测试是否能够在浏览器打开azkaban的网页

在地址栏需要手动输入https://hostname:8443

azkban的配置及实战_第1张图片
选择高级
azkban的配置及实战_第2张图片
点击继续前往,会出现登录页面,输入配置azkaban时定义的用户名和密码,点击login,完成登录
azkban的配置及实战_第3张图片
成功登录azkaban
azkban的配置及实战_第4张图片
azkaban的停止命令
先停止executor

cd /usr/local/azkaban
executor/bin/azkaban-executor-shutdown.sh

#可以通过jps查看executor进程是否停止

在停止server

server/bin/azkaban-web-shutdown.sh
#可以通过jps查看executor进程是否停止

azkaban实战
azkaban内置的任务类型支持command,java
command任务类型即可支持很多类型的任务,例如hive,sqoop,mr等
任务要求

需要写一个.job结尾的文件,文件格式为
type=command
command=命令
文件最后打成zip压缩包,然后上传到azkaban网页上,然后可以选择调度执行(schedule)或立即执行(execute)

执行一个shell脚本
方法一,在job中指定脚本的绝对路径

在.job文件中定义脚本的绝对路径,使得最后只对.job文件打包即可

①定义脚本

cd /usr/local
vi test.sh

#脚本内容如下

#!/bin/bash
date >> /usr/local/date.txt

②创建job文件

在windows系统中创建test.job
内容为
type=command
#绝对路径
command=/usr/local/test.sh

③只将test.job打包成zip文件
④上传至azkaban,然后每一分钟执行一次,最后可以在linux系统中的date.txt文件中查看打印的时间信息

方法二,在job中指定脚本的相对路径

这种方式要求.job文件和脚本打成一个zip包,并且文件是在同级目录

①在windows系统中定义脚本test2.sh

#!/bin/bash
date >> /usr/local/date2.txt

②创建job文件

在windows系统中创建test2.job
内容为
type=command
#绝对路径
command=sh test2.sh

③对test2.job和test2.sh打成zip包,并上传,执行,查看date2.txt

多任务工作流

一共四个任务,任务的执行先后如下
首先执行first.job,然后second.job和third.job是并行执行的,这两个任务执行结束,最后执行fourth.job
在windows系统中创建四个job文件,内容如下

①first.job

type=command
command=echo 'this is the first job'

type=command
command=echo 'this is the second job'
dependencies=first

type=command
command=echo 'this is the third job'
dependencies=first

type=command
command=echo 'this is the fourth job'
dependencies=second,third

最后把四个.job文件打包成zip,上传azkaban,运行
azkban的配置及实战_第5张图片
可以看到azkaban页面自动识别出四个作业的先后关系并执行

调度java程序
①写个java程序

package com.baidu;

import java.io.FileOutputStream;
import java.io.IOException;

public class JavaJob {
    public static void main(String[] args) {
        FileOutputStream fo = null;
        try {
            fo = new FileOutputStream("/usr/local/java.txt");
            fo.write("hello world".getBytes());
            fo.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if(fo != null){
                    fo.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

②maven打包,生成一个jar包java_job-1.jar
③创建一个java.job文件

type=javaprocess
java.class=com.baidu.JavaJob
classpath=java_job-1.jar

④将jar包和.job文件打包,上传到azkaban,执行后查看/usr/local/java.txt是否打印出"hello world"

调度HDFS操作任务
①准备一个文件word.txt并上传到hdfs的/input目录

hine, bright morning light
now in the air the spring is coming
sweet blowing wind
singing down the hills and valleys
keep your eyes on me
now we're on the edge of hell
dear my love, sweet morning light
wait for me, you've gone much farther, too far

②创建一个hdfs.job

type=command
command=hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /input /output

③将job打包成zip,上传zakaban,运行,可以在hdfs的/output目录下下载输出结果,查看

调度一个hive任务
在linux系统中准备一个/usr/local/student.txt文件

zhangsan	15
lisi	12
wangwu	20
hanmei	17
honghong	15

创建一个hive.sql

use default;
drop table if exists student;
create table if not exists student(
	sname string,
	age int
)
row format delimited fields terminated by '\t';
load data local inpath '/usr/local/student.txt' overwrite into table student;
insert overwrite local directory 'usr/local/result.txt'
row format delimited fields terminated by '\t'
select * from student;

创建一个hive.job

type=command
command=hive -f './hive.sql'

将hive.job和hive.sql打成zip包,上传azkaban,运行前需要启动hive,执行成功后,查看是否生成了result.txt文件并有内容

文件目录在/usr/local/azkaban/executions/下

配置邮件发送方
不建议使用126邮箱,因为它会将azkaban发送的邮件认为是垃圾邮件。

cd /usr/local/zakaban/server/conf
vi azkaban.properties
#---->修改以下内容
# mail settings
#发送方邮箱,这里使用163邮箱
mail.sender=[email protected]
#163邮箱的服务器域名或ip
mail.host=smtp.163.com
#添加以下内容
#邮箱的用户,使用发送方的邮箱
mail.user=[email protected]
#注意这里不是邮箱的密码,而是360邮箱的客户端授权码
mail.password=VVVVVV

邮件的接收方是在azkaban的页面上配置的
设置步骤如下
①在azkaban页面上进入flows界面,点击Execute Flow
azkban的配置及实战_第6张图片
②点击Notification 消息按钮
azkban的配置及实战_第7张图片
③在下面的页面设置邮件接收方的地址
azkban的配置及实战_第8张图片
azkaban的传参功能

azkban的配置及实战_第9张图片
azkban的配置及实战_第10张图片

azkban的配置及实战_第11张图片
azkban的配置及实战_第12张图片
⑤现在你会发现再次执行这个任务会失败,并且抛出异常

#日志如下
23-07-2020 16:26:55 CST first INFO - Starting job first at 1595492815886
23-07-2020 16:26:55 CST first INFO - Building command job executor. 
23-07-2020 16:26:56 CST first ERROR - Failed to build job executor for job firstCould not find variable substitution for variable(s) [command->param]
23-07-2020 16:26:56 CST first ERROR - Failed to build job type
23-07-2020 16:26:56 CST first ERROR - Job run failed preparing the job.
23-07-2020 16:26:56 CST first INFO - Finishing job first at 1595492816078 with status FAILED

意思就是找不到我们定义的变量param的值,因为我们没有设置
⑥点击executor Flow
azkban的配置及实战_第13张图片

azkban的配置及实战_第14张图片

azkban的配置及实战_第15张图片
执行后在日志中可以看到成功输出了设置的变量值

23-07-2020 16:35:27 CST first INFO - Starting job first at 1595493327441
23-07-2020 16:35:27 CST first INFO - Building command job executor. 
23-07-2020 16:35:27 CST first INFO - 1 commands to execute.
23-07-2020 16:35:27 CST first INFO - Command: echo this is a changed value
23-07-2020 16:35:27 CST first INFO - Environment variables: {JOB_OUTPUT_PROP_FILE=/usr/local/azkaban/executions/28/first_output_885397311363421316_tmp, JOB_PROP_FILE=/usr/local/azkaban/executions/28/first_props_604602477140506059_tmp, JOB_NAME=first}
23-07-2020 16:35:27 CST first INFO - Working directory: /usr/local/azkaban/executions/28
23-07-2020 16:35:27 CST first INFO - this is a changed value  <-----看这里
23-07-2020 16:35:27 CST first INFO - Process completed successfully in 0 seconds.
23-07-2020 16:35:27 CST first INFO - Finishing job first at 1595493327508 with status SUCCEEDED

你可能感兴趣的:(大数据,azkaban,任务调度系统)