23_azkaban工作流调度器

Azkaban工作流调度器

准备:

  1. 安装好对应版本的mysql
  2. 安装好对应版本的hadoop集群
  3. 安装好对应版本的hive

1. 为什么需要工作流调度系统

  • 一个完整的数据分析系统通常都是由大量任务单元组成;

    • shell脚本程序java程序mapreduce程序hive脚本
  • 各任务单元之间存在时间先后及前后依赖关系

  • 为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行

2. Azkaban是什么

  • Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。
  • Azkaban定义了一种KV文件(properties)格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

在这里插入图片描述

  • 功能特点
    • 提供功能清晰、简单易用的web UI界面
    • 提供job配置文件快速建立任务和任务之间的关系
    • 提供模块化的可插拔机制,原生支持command、java、hive、hadoop
    • 基于java开发,代码结构清晰,易于二次开发

3. Azkaban基本架构

在这里插入图片描述

  • Azkaban由三部分构成

    • 1、Azkaban Web Server

      • 提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。
    • 2、Azkaban Executor Server

      • 负责具体的工作流和任务的调度提交
    • 3、Mysql

      • 用于保存项目、日志或者执行计划之类的信息

4. Azkaban架构的三种运行模式

  • 1、solo server mode(单机模式)
H2
web server 和 executor server运行在一个进程里
最简单的模式,数据库内置的H2数据库,管理服务器和执行服务器都在一个进程中运行,任务量不大项目可以采用此模式。

  • 2、two server mode
web server 和 executor server运行在不同的进程
数据库为mysql,管理服务器和执行服务器在不同进程,这种模式下,管理服务器和执行服务器互不影响。

  • 3、multiple executor mode
web server 和 executor server运行在不同的进程,executor server有多个
该模式下,执行服务器和管理服务器在不同主机上,且执行服务器可以有多个。

5. Azkaban安装部署

  • 采用第二种模式,管理服务器、执行服务器分进程,但在同一台主机上。
  • 1、下载安装包

    • azkaban-web-server-2.5.0.tar.gz
    • azkaban-executor-server-2.5.0.tar.gz
    • azkaban-sql-script-2.5.0.tar.gz
  • 2、规划安装目录

    • /kkb/install
  • 3、上传安装包到node03服务器

  • 4、azkaban web服务器安装

    • 4.1 先创建一个目录
    mkdir /kkb/install/azkaban
    
    • 4.2 解压azkaban-web-server-2.5.0.tar.gz
     tar –zxvf azkaban-web-server-2.5.0.tar.gz -C /kkb/install/azkaban/
    
    • 4.3 重命名解压目录
    mv /kkb/install/azkaban/azkaban-web-2.5.0 /kkb/install/azkaban/server
    
    • 4.4 配置SSL安全访问协议

      在server目下执行下边的命令
      命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA
      
      Keytool:   是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。
      -keystore:指定密钥库的名称及位置(产生的各类信息将不在.keystore文件中)
      -alias:   对我们生成的.keystore 进行指认别名;如果没有默认是mykey
      -genkey:  在用户主目录中创建一个默认文件".keystore" 
      -keyalg:  指定密钥的算法 RSA/DSA 默认是DSA
      
      运行此命令后,会提示输入当前生成 keystore的密码及相应信息,输入的密码请劳记,信息如下(建议全部使用123456):
       -------------------------------------------------------------------
      输入keystore密码: 
      再次输入新密码:
      您的名字与姓氏是什么?
        [Unknown]: 
      您的组织单位名称是什么?
        [Unknown]: 
      您的组织名称是什么?
        [Unknown]: 
      您所在的城市或区域名称是什么?
        [Unknown]: 
      您所在的州或省份名称是什么?
        [Unknown]: 
      该单位的两字母国家代码是什么
        [Unknown]:  CN
      CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗?
        []:  y
       
      输入<jetty>的主密码
              (如果和 keystore 密码相同,按回车): 
      再次输入新密码:
      完成上述工作后,将在当前目录生成 keystore 证书文件,将keystore 考贝到 azkaban webserver 服务器根目录中.
      
      执行拷贝命令:
      cp keystore /kkb/install/azkaban/server
      
    
    
  • 4.5 配置时区

    1、先生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可
      选5 --->选9---->选1----->选1
    
    
    2、拷贝该时区文件,覆盖系统本地时区配置
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime  
    
    • 4.6 修改配置文件
      • vim /kkb/install/azkaban/server/conf/azkaban.properties
#内容说明如下:
#Azkaban Personalization Settings
azkaban.name=Test                   #服务器UI名称,用于服务器上方显示的名字
azkaban.label=My Local Azkaban      #描述
azkaban.color=#FF3601               #UI颜色
azkaban.default.servlet.path=/index    
web.resource.dir=web/                 #默认根web目录
default.timezone.id=Asia/Shanghai     #默认时区,已改为亚洲/上海 默认为美国
 
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager   #用户权限管理默认类
user.manager.xml.file=conf/azkaban-users.xml     #用户配置,具体配置参加下文
 
#Loader for projects
executor.global.properties=conf/global.properties    #global配置文件所在位置
azkaban.project.dir=projects                                             
 
database.type=mysql               #数据库类型
mysql.port=3306                   #端口号
mysql.host=node03                 #数据库连接IP
mysql.database=azkaban            #数据库实例名
mysql.user=root                   #数据库用户名
mysql.password=123456             #数据库密码
 
# Velocity dev mode
velocity.dev.mode=false          #Jetty服务器属性.
jetty.maxThreads=25              #最大线程数
jetty.ssl.port=8443              #Jetty SSL端口
jetty.port=8081                  #Jetty端口
jetty.keystore=keystore          #SSL文件名
jetty.password=123456            #SSL文件密码
jetty.keypassword=123456         #Jetty主密码 与 keystore文件相同
jetty.truststore=keystore        #SSL文件名
jetty.trustpassword=123456       #SSL文件密码
 
# 执行服务器属性
executor.port=12321               #执行服务器端口
 
# 邮件设置
mail.sender=[email protected]        #发送邮箱
mail.host=smtp.163.com              #发送邮箱smtp地址
mail.user=xxxxxxxx                  #发送邮件时显示的名称
mail.password=**********            #邮箱密码
job.failure.email=[email protected]  #任务失败时发送邮件的地址
job.success.email=[email protected]  #任务成功时发送邮件的地址
lockdown.create.projects=false       
cache.directory=cache                #缓存目录

  • 4.7 修改配置文件用户配置
    • vim /kkb/install/azkaban/server/conf/azkaban-users.xml
      • 添加管理员用户
<azkaban-users>
<user username="azkaban" password="azkaban" roles="admin"groups="azkaban"/>
<user username="metrics" password="metrics" roles="metrics"/>
 <!--新增admin用户--> 
<user username="admin" password="admin" roles="admin,metrics" />
<role name="admin" permissions="ADMIN" />
<role name="metrics" permissions="METRICS"/>
</azkaban-users>
  • 5、azkaban 执行服器安装

    • 1、解压azkaban-executor-server-2.5.0.tar.gz
    tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C /kkb/install/azkaban
    
    • 2、重命名解压目录
    mv /kkb/install/azkaban/azkaban-executor-2.5.0 /kkb/install/azkaban/executor
    
    • 3、修改配置文件
      • vim /kkb/install/azkaban/executor/conf/azkaban.properties
    #Azkaban   #时区
    default.timezone.id=Asia/Shanghai          
     
    #数据库设置----->需要修改的信息
    mysql.host=node03          #数据库IP地址
    mysql.database=azkaban    #数据库实例名
    mysql.user=root           #数据库用户名
    mysql.password=123456     #数据库密码
    
  • 6、azkaban脚本导入

    • 解压azkaban-sql-script-2.5.0.tar.gz
    tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C /kkb/install/azkaban
    
    • 把解压后的脚本导入到mysql中
    --进入到mysql
    mysql> create database azkaban;
    mysql> use azkaban;
    mysql> source /kkb/install/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql;
    

6. Azkaban启动

6.1 启动web server服务

  • 在azkaban web server服务器目录下执行启动命令
bin/azkaban-web-start.sh
  • ps:在web server服务器根目录运行

6.2 启动executor执行服务

  • 在azkaban executor服务器目录下执行启动命令
bin/azkaban-executor-start.sh
  • ps:在executor服务器根目录运行
  • 启动完成后,在浏览器(建议使用谷歌浏览器)中输入https://服务器IP地址:8443 ,即可访问azkaban服务了.在登录中输入刚才新的户用名及密码,点击 login.
    • 输入“IP地址:8443”无法访问 web 页面, 且后台报错,原因是浏览器安全证书限制
      • 解决办法:使用“https://ip:8443”访问, 发现已经可以访问了, 后台会报证数问题的错误, 忽略即可, 不影响使用, 选择高级 ------> 继续访问该网站

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mt8hCDBw-1577435209260)(azkaban工作流调度器.assets/azkaban-web.png)]

在这里插入图片描述

(1)、projects:azkaban最重要的一部分,创建一个工程,将所有的工作流放在工程中执行
(2)、scheduling:定时调度任务用的
(3)、executing:  显示当前运行的任务
(4)、History : 显示历史运行任务

一个project由3个按钮:
(1)、Flows:一个工作流,由多个job组成
(2)、Permissions:权限管理
(3)、Project Logs:工程日志信息

7. Azkaban实战

7.1 command类型单一job

  • 1、创建job描述文件 以.job后缀结尾
    • 创建 command.job 文件
#command.job
type=command
command=echo 'hello azkaban......'
  • 2、将job资源文件打包成zip文件

  • 例如

    • command.zip
  • 3、通过azkaban的web管理平台创建project并上传job压缩包

在这里插入图片描述
在这里插入图片描述

  • 3、点击运行

在这里插入图片描述

在这里插入图片描述

  • 4、运行完成

在这里插入图片描述

7.2 command类型多job工作流

  • 1、创建有依赖关系的多个job描述

    • 第一个job:start1.job
    #start1.job
    type=command
    command= echo 'start1...start1...'
    
    • 第二个job:start2.job 它依赖start1.job
    #start2.job
    type=command
    dependencies=start1
    command= echo 'start2...start2...'
    
  • 2、将job资源文件打包成zip文件

    • start12.zip

在这里插入图片描述

  • 3、创建工程,上传zip包,最后启动工作流

在这里插入图片描述

  • 补充
    • 如果一个job有多个依赖的job,可以使用逗号隔开
例如: 
#start1.job
type=command
command= echo "start1 job"

#start2.job
type=command
command= echo "start2 job"

#stop.job
type=command
denpendencies=start1,start2
command=echo "stop job"

注意:有多个依赖的job,用逗号隔开

7.3 HDFS操作任务

  • 1、创建job描述文件

    • vim fs.job
    #fs.job
    type=command
    command=echo "start execute"
    command.1=/kkb/install/hadoop-2.6.0-cdh5.14.2/bin/hdfs dfs -mkdir /azkaban
    command.2=/kkb/install/hadoop-2.6.0-cdh5.14.2/bin/hdfs dfs -put /home/hadoop/source.txt /azkaban
    
  • 2、将job资源文件打包成zip文件

    • fs.zip
  • 3、创建工程,上传zip包,最后启动工作流
    在这里插入图片描述

fs-hdfs.png

7.4 MAPREDUCE任务

  • MR任务依然可以使用command的job类型来执行

  • 1、创建job描述文件,及mr程序jar包

    • 示例中直接使用hadoop自带的example jar
    • hdfs dfs -mkdir -p /wordcount/in
    #mr.job
    type=command
    command=/kkb/install/hadoop-2.6.0-cdh5.14.2/bin/hadoop  jar hadoop-mapreduce-examples-2.6.0-cdh5.14.2.jar wordcount /wordcount/in /wordcount/out
    
  • 2、将job资源文件打包成zip文件

    • mr.zip
  • 3、创建工程,上传zip包,最后启动工作流

在这里插入图片描述

7.5 HIVE脚本任务

  • 1、 创建job描述文件和hive脚本

    • Hive脚本: test.sql
    use default;
    create table if not exists test_azkaban(id int,name string,address string) row format delimited fields terminated by ',';
    load data local inpath '/home/hadoop/azkaban/test.txt' into table test_azkaban;
    create table if not exists countaddress as select address,count(*) as num from test_azkaban group by address ;
    
    insert overwrite local directory '/home/hadoop/azkaban/out' select * from countaddress; 
    
    • 准备数据

      • vim /home/hadoop/azkaban/test.txt
      1,zhangsan,shanghai
      2,lisi,beijing
      3,xiaoming,shanghai
      4,xiaozhang,shanghai
      5,xiaogang,beijing
      
  • 2、创建job描述文件

    • hive.job
    # hive.job
    type=command
    command=/kkb/install/hive-1.1.0-cdh5.14.2/bin/hive -f 'test.sql'
    
  • 3、将job资源文件打包成zip文件

    • hive.zip
    • 4、创建工程,上传zip包,最后启动工作流

在这里插入图片描述

8. 任务定时调度

  • 在启动工作流的时候,可以点击Schedule,实现定时调度一个工作流

在这里插入图片描述
在这里插入图片描述

9. webUI 传递参数

  • 可以通过webUI动态给job传递参数

  • 1、创建一个job的描述文件

    • parameter.job

      #parameter.job
      type=command
      parameter=${param}
      command= echo ${parameter}
      
    • 其中

      • ${param} 表示解析页面传递的参数param的值,通过声明一个变量parameter去接受
      • ==${parameter}==表示获取该parameter变量的值
  • 2、将job资源文件打包成zip文件

    • parameter.zip
  • 3、创建工程,上传zip包,最后启动工作流,并且设置参数

在这里插入图片描述

  • 4、运行完成后的结果

1572232525618.png

发布了70 篇原创文章 · 获赞 25 · 访问量 6380

猜你喜欢

转载自blog.csdn.net/TU_JCN/article/details/103734494