分享

Azkaban 3入门简介

本帖最后由 nettman 于 2018-10-25 17:38 编辑

问题导读

1.Azkaban是什么?
2.Azkaban解决了什么问题?
3.Azkaban有哪些特性?

关注最新经典文章,欢迎关注公众号



导读
About云铁粉对Azkaban感兴趣,想了解这方面的资料。我们知道无论是哪个比较火的组件,都是需要兼容Hadoop的,无论是Spark,Flink等,那么Hadoop肯定也是需要使用的,那么该如何使用的更有效率,Azkaban 是一个非常重要的组件。下面是关于Azkaban 3的内容。

Azkaban是一个在LinkedIn开发用来跑Hadoop作业的一款批处理作业调度框架,Azkaban通过作业的依赖关系解决了作业顺序和提供了更加方便的Web用户界面来维持和跟踪你的作业,根据Azkaban官网官方文档翻译而来。Azkaban是由LinkedIn实现的为了解决hadoop作业依赖问题一个批处理调度平台。如果需要我们的作业按照顺序执行,从作业中ETL(抽取extract、转换transform、加载load)数据来分析产品,那么Azkaban将是一个很好的选择。 随着hadoop用户数量的增长,从最初的单个服务器的解决方案,Azkaban已经演变成更加健壮的解决方案。

介绍
Azkaban是一个在LinkedIn开发用来跑Hadoop作业的一款批处理作业调度框架,Azkaban通过作业的依赖关系解决了作业顺序和提供了更加方便的Web用户界面来维持和跟踪你的作业

特性
  • 兼容所有版本的 Hadoop
  • 基于 Web 的易用 UI
  • 简单的 Web 和 HTTP 工作流上传
  • 项目工作空间
  • 工作流调度
  • 模块化和插件化
  • 支持认证和授权
  • 可跟踪用户行为
  • 失败和成功时的邮件提醒
  • SLA 警告和自动终止
  • 失败作业的重试

概述
Azkaban是由LinkedIn实现的为了解决hadoop作业依赖问题一个批处理调度平台。如果需要我们的作业按照顺序执行,从作业中ETL(抽取extract、转换transform、加载load)数据来分析产品,那么Azkaban将是一个很好的选择。
随着hadoop用户数量的增长,从最初的单个服务器的解决方案,Azkaban已经演变成更加健壮的解决方案。
Azkaban包含了3个关键的组件
  • 关系型数据库服务器 (MySQL)
  • Azkaban Web服务器 (AzkabanWebServer)
  • Azkaban 执行服务器 (AzkabanExecutorServer)


1.png


###关系型数据库(MySQL) Azkaban使用MySQL来存储他本身的状态信息,同样的AzkabanWebServer 和AzkabanExecutorServer也使用数据库。
####AzkabanWebServer怎么要使用数据库? web服务器使用数据库有如下原因:
  • 项目管理--项目的权限以及文件上传等
  • 执行状态--对执行器正在执行的作业流进行跟踪
  • 预览工作流--查找以前执行过的作业流以及访问它们的日志文件
  • 调度器--保持被调度执行的作业的状态
  • SLA(服务品质协议)--保存所有的SLA规则信息
AzkabanExecutorServer为什么要使用数据库?
  • 访问工程--在数据库中检索项目文件
  • 执行流/作业--为了正在执行的流检索和更新数据
  • 日志--为作业和流往数据库中存储和输出日志
  • 交互依赖--如果作业流运行在不同的执行器上,它会从数据库中读取状态信息
这里选择使用MySQL作为数据库是没有多少原因的,因为MySQL是一个广泛使用的数据库。我们也希望实现与其他类型数据库兼容,但是在搜索历史运行作业的需求上关系型数据库还是一个很好的选择。
####AzkabanWebServer
AzkabanWebServer是Azkaban最主要的管理者,它解决了项目的管理,认证,调度以及执行器的调度。它同样的也作为一个用户接口服务。
使用Azkaban是相当容易的,Azkaban使用 *.job 键-值属性文件来定义在一个工作流中的单个任务,使用 _dependencies_来定义作业链之间的依赖关系。这些作业文件和关系代码可以被压缩成 .zip 文件然后通过Azkaban用户界面或者curl上传到Web服务器。
####AzkabanExecutorServer
Azkaban之前的版本在同一台服务器上有AzkabanWebServer和AzkabanExecutorServer的特性,后台执行器被分开到它自己的服务器上。分离这些服务是有些原因的:我们可以快速的测量执行程序的规模以及当执行器执行失败时可以进行回滚,同样的,我们能够以最小对用户的影响来更新Azkaban。随着Azkaban使用量的增加,我们发现升级Azkaban变得越来越困难,因为所有的时间服务器都变得“高峰”。

开始
在3.0的版本中我们提供了三种模式:单例“solo-server”模式,重量级的双服务器模式和分布式多执行器模式。以下描述这几种模式之间的不同。

在Solo服务器模式中,数据库是使用H2,并且web服务器和执行器服务器运行在同一个进程当中,如果只是其中一个服务器想做某些事,这是非常有用的。它同样的夜可以使用在小规模的测试用例。

##单 solo服务器模式 ###1.下载和安装Solo服务器安装包

构建AzkabanSolo服务器

在Azkaban2.5中有一种solo服务器模式来让你尝试使用Azkaban或者在一些小规模和安全性低的环境下使用。

它的特性有:

  • 简单安装 - MySQL不是必须的,它内置了H2数据库来作为主要的实例存储
  • 方便启动 - web服务器和执行器服务器运行在同一个进程中
  • 丰富的特性 - 它包含Azkaban所有的特性,你可以正常使用它或者为它安装插件

安装Solo服务器

可以从下载页获取azkaban-exec-server安装包.
你也可以克隆Github仓库,你可以从主分支上编译最新的版本,并且完成从源代码上编译.
Azkaban使用Gradle进行编译,它需要JDK的版本为8或者更高,自从我们仓库中有gradle的包装器后,用户就不需要自己安装gradle
  1. 在Unix-like平台比如Linux和Max OS X上你可以执行
  2.         $ ./gradlew disTar
  3. 在Windows使用gradlew.bat批处理文件
  4.         
  5.     $ gradlew disTar
复制代码


从安装包上解压到目录下,解压后,里面应该有如下的目录:
  1. 文件夹                    描述
  2. bin                      启动Azkaban的jetty服务器脚本
  3. conf                     Azkaban solo服务器配置信息
  4. lib                      Azkaban依赖的jar包
  5. extlib                   额外的jar包,这些jar包将会被添加到Azkaban的类路径下
  6. plugins                  插件安装的目录
  7. web                      Azkaban web服务器的web(css,javascript,image)文件
复制代码

在conf目录中必须有三个文件:
  • azkaban.private.properties - Azkaba运行时参数信息
  • azkaban.properties - Azkaba运行时参数信息
  • global.properties - 全局静态属性,用于给每个工作流和作业分享属性信息
  • azkaban-users.xml - 用来添加用户和角色权限,如果XmLUserManager如果没有构建的话这个文件是没有用的
azkaban.properties文件是主要的配置文件
###为SSL获取秘钥 Azkaban solo服务器默认是不使用SSL协议的,但是你可以以同样的方式建立在单个服务器上,这是为什么:
Azkaban web服务器可以使用SSL套接字建立连接,这意味着秘钥是可以使用的。你可以按照这个连接(http://docs.codehaus.org/display/JETTY/How+to+configure+SSL)的步骤创建一个,一[]旦秘钥文件被创建,Azkaban必须给出它azkaban.properties文件位置和密码等信息,并且下面的属性应该要被重写:
  1. jetty.keystore=keystore
  2. jetty.password=password
  3. jetty.keypassword=password
  4. jetty.truststore=keystore
  5. jetty.trustpassword=password
复制代码

###用户管理配置 Azkaba使用用户管理来提供权限和用户角色,默认的,Azkaban包含和使用XmlUserManager从azkaban-users.xml文件中获取用户名和密码,这你可以在azkaban.properties文件中看到
  • user.manager.class=azkaban,user.XmlUserManager
  • user.manager.xml.file=conf/azkaban-user.xml

###启动Web服务器 下面的属性是在 azkaban.properties文件中用来配置jetty服务器的配置信息
  1. jetty.maxThreads=25
  2. jetty.ssl.port=8081
复制代码


执行 bin/azkaban-solo-start.sh来启动solo服务器,如果要关闭,执行bin/azkaban-solo-shutdown.sh

在你的浏览器中打开http://localhost:8081/index连接

###2.安装Azkabn插件

##双服务器模式 双服务器模式需要更加严格的生产环境, 它的数据库应该依赖主从架构的mysql实例,web服务器和执行器的服务器应当运行在不同的进程当中以便在升级和维护时不会影响到用户 ###1.创建数据库

虽然我们正在寻找其他可能性的存储系统,但是目前,Azkaban只使用MySQL作为它的数据存储系统

(1).安装MySQL数据库

关于如何安装MySQL数据库这里不会介绍,但是你可以根据MySQL Documentation Site来安装

(2).创建数据库

为Azkaban创建数据库,例如:
  1. # 数据库名不必是'azkaban'
  2. mysql> CREATE DATABASE azkaban;
复制代码

为Azkaban创建用户,例如:
  1. #用户名不必是'azkaban'
  2. mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
复制代码

在该数据库上分配权限,如果该用户不存在则为Azkaban创建一个用户,然后给该用户在表级别上分配INSERT、SELECT、UPDATE、DELETE等权限
  1. mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON <database>.* to '<username>'@'%' WITH GRANT OPTION;
复制代码

数据包的大小的配置信息需要配置。MySQL可能已经有了,默认的,该数据包的大小是比较低的。为了增加它,你需要设置max_allowed_packet 属性更大的值,比如说1024M
在Linux配置,打开/etc/my.cnf,在mysqld后面添加如下
  1. [mysqld]
  2. ...
  3. max_allowed_packet=1024M
复制代码

重新启动MySQL,运行一下脚本...
  1. $ sudo /sbin/service mysqld restart
复制代码

(3).创建Azkaban表结构
下载页下载azkaban的数据库脚本文件,里面包含了azkaban框架创建表的脚本,由于我已经在本地编译过,然后把create-all-sql脚本放在下载文件中
在MySQL实例中运行单独的创建表的脚本来创建你的表,另外,你也可以运行create-table-sql脚本,那些以update开头的脚本可以被忽略掉
(4).获得JDBC连接的JAR包
因为多种原因,Azkaban没有MySQL JDBC的连接驱动,你可以在这下载
这个jar依赖在web服务器和执行器服务器上都需要被使用到,所以应当放置在/extlib下
###2.下载和安装Web服务器,建立Azkaban Web服务器 AzkabanWeb服务器解决了项目管理、权限验证、调度以及触发器的执行
安装Web服务器
在原来的文档中所介绍的下载azkaban web服务器的连接上面是没有资源的,所以你可以克隆下azkaban github仓库,你可以自己完成最新版的azkaban的编译,你可以在下载
解压安装包到目录中,安装目录应当和AzkabanExecutorServer目录不同,解压之后,里面应当有如下的目录:

  1. 文件夹                    描述
  2. bin                      启动Azkaban的jetty服务器脚本
  3. conf                     Azkaban solo服务器配置信息
  4. lib                      Azkaban依赖的jar包
  5. extlib                   额外的jar包,这些jar包将会被添加到Azkaban的类路径下
  6. plugins                  插件安装的目录
  7. web                      Azkaban web服务器的web(css,javascript,image)文件
复制代码


在conf文降价中应该有三个文件
  • azkaban.properties -Azkaban运行时所需要的参数
  • global.properties - 给工作流和作业共享的全局静态属性变量
  • azkaban-users.xml - 用来添加用户和角色权限信息,如果XmLUserManager没有创建那么这个问价是没有用的
azkaban.properties文件是构建Azkaban时最主要的配置文件
###为SSL获取秘钥 Azkaban solo服务器默认是不使用SSL协议的,但是你可以以同样的方式建立在单个服务器上,这是为什么:
Azkaban web服务器可以使用SSL套接字建立连接,这意味着秘钥是可以使用的。你可以按照这个连接(http://docs.codehaus.org/display/JETTY/How+to+configure+SSL)的步骤创建一个,一旦秘钥文件被创建,Azkaban必须给出它azkaban.properties文件位置和密码等信息,并且下面的属性应该要被重写:

  1. jetty.keystore=keystore
  2. jetty.password=password
  3. jetty.keypassword=password
  4. jetty.truststore=keystore
  5. jetty.trustpassword=password
复制代码


###数据库配置 如果你还没有MySQL JDBC的驱动,你可以从连接下载下载
把下载的jar包放置在extlib目录下,所有的额外的依赖都应当被放置在该目录下
为了指出Azkaban Web是使用的哪个MySQL实例,你需要早azkaban.properties文件中添加下面的连接属性:

  1. database.type=mysql
  2. mysql.port=3306
  3. mysql.host=localhost
  4. mysql.database=azkaban
  5. mysql.user=azkaban
  6. mysql.password=azkaban
  7. mysql.numconnections=100
复制代码


目前Azkaban只支持MySQL数据库存储,因此,database.type属性总应该是mysql

###用户管理配置 Azkaban使用用户管理来提供权限和用户角色,默认的,Azkaban包含和使用XmlUserManager从azkaban-users.xml文件中获取用户名和密码,这你可以在azkaban.properties文件中看到


  1. user.manager.class=azkaban,user.XmlUserManager
  2. user.manager.xml.file=conf/azkaban-user.xml
复制代码


###启动Web服务器 下面的属性是在 azkaban.properties文件中用来配置jetty服务器的配置信息
  1. jetty.maxThreads=25
  2. jetty.ssl.port=8443
复制代码


执行 bin/azkaban-web-start.sh来启动AzkabanWebServer服务器,如果要关闭,执行bin/azkaban-web-shutdown.sh

你可以通过浏览器访问web服务器进行测试

###安装Executor服务器


地址:
https://github.com/scalad/azkaban

源码下载
链接: https://pan.baidu.com/s/1Zn5_M8n8vUE_rFh0EHUMOA 提取码: f75m


更多相关内容
Azkaban 3源码下载及构建【修改】
http://www.aboutyun.com/forum.php?mod=viewthread&tid=26213

本帖被以下淘专辑推荐:

加微信w3aboutyun,可拉入技术爱好者群

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条