Azkaban简单入门

1. Azkaban概述

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

  • 一个完整的数据分析系统通常都是由大量任务单元组成:shell脚本程序,java程序,mapreduce程序、hive脚本等。

  • 各任务单元之间存在时间先后及前后依赖关系。

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

例如,某个业务系统每天产生20G原始数据,需要每天都对其进行处理,处理步骤如下所示:

  1. 通过Hadoop先将原始数据同步到HDFS上;
  2. 借助MapReduce计算框架对原始数据进行转换,生成的数据以分区表的形式存储到多张Hive表中;
  3. 需要对Hive中多个表的数据进行JOIN处理,得到一个明细数据Hive大表;
  4. 将明细数据进行复杂的统计分析,得到结果报表信息;
  5. 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。

    为了实现上面多个任务的依次执行,可以使用现成的开源调度系统,比如流行的**ooize**、**azkaban**等。而市面上目前有许多工作流调度器,在hadoop领域,常见的工作流调度器还有Cascading,Hamake等。
    

Azkaban简单入门_第1张图片

1.2 Azkaban与Oozie对比

​ 对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize相比azkaban是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不在意某些功能的缺失,轻量级调度器azkaban是很不错的候选对象。

  • 功能:两者均可以调度mapreduce,pig,java,脚本工作流任务,两者均可以定时执行工作流任务。
  • 工作流定义:Azkaban使用Properties文件定义工作流,而Oozie使用XML文件定义工作流。
  • 工作流传参:Azkaban支持直接传参,例如{input};而 Oozie支持参数和EL表达式,例如{fs:dirSize(myInputDir)}。
  • 定时执行:Azkaban的定时执行任务是基于时间的;Oozie的定时执行任务基于时间和输入数据。
  • 资源管理:Azkaban有较严格的权限控制,如用户对工作流进行读/写/执行等操作;Oozie暂无严格的权限控制。
  • 工作流执行:Azkaban有两种运行模式,分别是solo server mode(executor server和web server部署在同一台节点)和multi server mode(executor server和web server可以部署在不同节点);Oozie作为工作流服务器运行,支持多用户和多工作流。
  • 工作流管理:Azkaban支持浏览器以及Ajax方式操作工作流;Oozie支持命令行、HTTP REST、Java API、浏览器操作工作流。

1.3 Azkaban介绍

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

它有如下功能特点:

  • Web用户界面
  • 方便上传工作流
  • 方便设置任务之间的关系
  • 调度工作流
  • 认证/授权(权限的工作)
  • 能够杀死并重新启动工作流
  • 模块化和可插拔的插件机制
  • 项目工作区
  • 工作流和任务的日志记录和审计

2. Azkaban安装

  • Azkaban Web服务器:azkaban-web-server-2.5.0.tar.gz
  • Azkaban执行服务器 :azkaban-executor-server-2.5.0.tar.gz
  • Azkaban数据库脚本: azkaban-sql-script-2.5.0.tar.gz

解压压缩包到对应的文件夹,如下路径:

[root@mini1 azkaban]# ll
drwxr-xr-x.  2 root root 4096 Jun 20 03:31 azkaban-2.5.0
drwxr-xr-x. 10 root root 4096 Jun 20 04:11 executor
drwxr-xr-x.  9 root root 4096 Jun 20 04:01 server
  1. 在mysql中为azkaban创建对应的数据库:

    create database azkaban;
    use azkaban;
    source /root/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql;
  2. 创建SSL配置,产生对应的keystore文件,将其拷贝的server根目录

    keytool -keystore keystore -alias jetty -genkey -keyalg RSA
    输入keystore密码: 
    再次输入新密码:
    您的名字与姓氏是什么?
     [Unknown]: 
    您的组织单位名称是什么?
     [Unknown]: 
    您的组织名称是什么?
     [Unknown]: 
    您所在的城市或区域名称是什么?
     [Unknown]: 
    您所在的州或省份名称是什么?
     [Unknown]: 
    该单位的两字母国家代码是什么
     [Unknown]:  CN
    CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正确吗?
     []:  y
    
    输入的主密码
           (如果和 keystore 密码相同,按回车): 
    再次输入新密码:
  3. 生成时区配置文件Asia/Shanghai,用交互式命令 tzselect 即可。拷贝该时区文件,覆盖系统本地时区配置

    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  4. 进入azkaban web服务器安装目录 conf目录,修改azkaban.properties文件

    default.timezone.id=Asia/Shanghai           #默认时区,已改为亚洲/上海 默认为美国
    
    database.type=mysql                                       #数据库类型
    mysql.port=3306                                           #端口号
    mysql.host=mini1                                       #数据库连接IP
    mysql.database=azkaban                                    #数据库实例名
    mysql.user=root                                           #数据库用户名
    mysql.password=root                                    #数据库密码
    mysql.numconnections=100                                   #最大连接数
    
    
    
    # Jetty服务器属性.  注意:这里的密码必须与刚刚生成keystore的密码一致
    
    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文件密码
  5. azkaban配置 executor服务器,进入执行服务器安装目录conf,修改azkaban.propertiest

    
    #Azkaban
    
    default.timezone.id=Asia/Shanghai                          #时区
    
    #数据库设置
    
    database.type=mysql                                        #数据库类型(目前只支持mysql)
    mysql.port=3306                                           #数据库端口号
    mysql.host=mini1                                           #数据库IP地址
    mysql.database=azkaban                                     #数据库实例名
    mysql.user=root                                            #数据库用户名
    mysql.password=root                                        #数据库密码
    mysql.numconnections=100                                   #最大连接数
  6. 进入azkaban web服务器conf目录,修改azkaban-users.xml,该配置主要是给用户的登录账号做设置的。

    
           ...
           "admin" password="admin" roles="admin,metrics" />
           "admin" permissions="ADMIN" />
           ...
    
  7. 启动web服务器和executor服务器

    
    ##在azkaban web服务器目录下执行启动命令*************注意:必须在web服务器根目录运行*************
    
    bin/azkaban-web-start.sh
    
    
    ##在executor服务器目录下执行启动命令*************注意:必须在executor服务器根目录运行************
    
    bin/azkaban-executor-start.sh

3. Web服务器

服务启动后,打开网站https://mini1:8443/index 。azkaban界面由四部分组成:

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

4. Command类型单一Job示例

Azkaban内置的任务类型支持command、java、Pig

  1. 创建job描述文件 以.job后缀结尾

    
    #command.job
    
    type=command                                                    
    command=echo 'hello'
  2. 将job资源文件打包成zip文件

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

    Azkaban简单入门_第2张图片
    Azkaban简单入门_第3张图片
    Azkaban简单入门_第4张图片

5. Command类型多job工作流

多个job形成的工作流,每个job都需要定义好执行的顺序,这里可以使用dependencies属性来配置。

“`

foo.job

type=command
command=echo “foo”

bar.job

type=command
dependencies=foo
command=echo “bar”
“`

6. HDFS操作任务

command.N表示可以执行多个command命令操作。

type=command
command=echo 'start execute'
command.1=/root/apps/hadoop/bin/hdfs dfs -mkdir /azkaban
command.2=/root/apps/hadoop/bin/hdfs dfs -put /root/zk.log /azkaban

7. MapReduce操作

还记得MapReduce第一个案例吗,系统为我们实现了一个圆周率计算案例,通过MapReduce的jar包来执行:

hadoop jar /root/apps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar pi 10 10

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

##MR Job
type=command
command=/root/apps/hadoop/bin/hadoop jar /root/apps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar pi 10 10

8. HIVE脚本任务

除了支持Hadoop,MapReduce之外,还能支持Hive脚本:

数据库数据

001,zhangsan
002,lisi
003,wangwu
004,zhaoliu

test.sql

use default;
drop table aztest;
create table aztest(id int,name string) row format delimited fields terminated by ',';
load data inpath '/aztest/hiveinput' into table aztest;
create table azres as select * from aztest;
insert overwrite directory '/aztest/hiveoutput' select count(1) from aztest; 

hivetest.job:

type=command
command=/root/apps/hive/bin/hive -f "test.sql"

你可能感兴趣的:(大数据应用,大数据)