大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能code下能teach的全能奶爸 如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~


1 Azkaban介绍

Azkaban是一种类似于Oozie的工作流控制引擎,可以用来解决多个Hadoop(或Spark等)离线计算任务之间的依赖关系问题。也可以用其代替crontab来对周期性任务进行调度,并且更为直观,可靠,同时提供了美观的可视化管理界面。
Azkaban由三部分构成:
1、Relational Database(Mysql)
azkaban将大多数状态信息都存于MySQL中,Azkaban Web Server 和 Azkaban Executor Server也需要访问DB。
2、Azkaban Web Server
提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。
3、Azkaban Executor Server
调度工作流和任务,纪录工作流活任务的日志,之所以将AzkabanWebServer和AzkabanExecutorServer分开,主要是因为在某个任务流失败后,可以更方便的将重新执行。而且也更有利于Azkaban系统的升级
image.png

2 搭建前准备

2.1 安装整体流程描述

1、 在mysql中创建azkaban相关的账号,库,表
2、 将azkaban的建表脚本导入到数据库中
3、 安装azkaban-executor- server
4、 安装azkaban-web-server

2.2 安装版本说明

JDK:jdk1.8.0_77 64位
MySQL-5.6以上版本
db脚本:azkaban-db-0.1.0-SNAPSHOT.tar.gz
执行Server:azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
Web Server:azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

2.3 资源下载地址

名称 地址
azkaban-db azkaban-db-0.1.0-SNAPSHOT.tar.gz
azkaban-exec-server azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
azkaban-web-server azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
JDK1.8 https://www.oracle.com/java/technologies/javase-jdk8-downloads.html

2.4 本次安装节点说明

本次部署
10.60.247.50 部署azkaban-web-server
10.60.247.193 部署azkaban-exec-server
10.60.247.187 部署azkaban-exec-server
10.60.247.213 为mysql 节点

3 搭建环境

3.1 安装前准备工作

3.1.1 检查java环境(所有节点)

  1. [root@ecs-iov-sw-qdmid-uat-0001 flume]# java -version

image.png

3.1.2 检查是否有spark(exec节点)

  1. [root@ecs-iov-sw-qdmid-uat-0003 ~]# spark-submit --version

image.png

3.2 导入azkaban-db相关脚本

  1. 将azkaban-db-0.1.0-SNAPSHOT.tar.gz上传到/app/src/azkaban
    image.png
    2. 解压azkaban-db-0.1.0-SNAPSHOT.tar.gz
    1. [root@ecs-iov-sw-qdmid-uat-0001 ~]# tar -zxvf azkaban-db-0.1.0-SNAPSHOT.tar.gz
    image.png

其中create-all-sql-0.1.0-SNAPSHOT.sql 为所有建表语句的合计
image.png

  1. 执行建表语句
    1. [hdfs@ecs-iov-sw-qdmid-uat-0001 bin]$ mysql -uazkaban -pAzkaban*123qwe! -h10.60.247.213
    2. mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';
    3. mysql> GRANT ALL PRIVILEGES ON *.* TO 'azkaban'@'%';
    4. mysql> FLUSH PRIVILEGES;
    5. mysql> CREATE DATABASE azkaban;
    6. mysql> use azkaban;
    image.png
    1. mysql>source /app/src/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql
    image.png
    1. mysql> show tables;
    image.png
    通过以上流程建表就成功了

    3.3 安装azkaban-exec-server

  2. 将/app/azkaban目录赋值给hdfs用户,并切换到hdfs

    1. [root@ecs-iov-sw-qdmid-uat-0002 app]# chown -R hdfs:hdfs azkaban/

    image.png
    2. 将azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz上传到提前规划的节点上,目录为/app/azkaban并将解压azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

    1. [hdfs@ecs-iov-sw-qdmid-uat-0003 azkaban]# tar -zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

    image.png
    3. 修改配置项conf目录下的配置文件azkaban.properties
    image.png

    1. # Azkaban Personalization Settings
    2. azkaban.name=Sea
    3. azkaban.label=Beluga Azkaban
    4. azkaban.color=#FF3601
    5. azkaban.default.servlet.path=/index
    6. web.resource.dir=web/
    7. default.timezone.id=Asia/Shanghai
    8. # Azkaban UserManager class
    9. user.manager.class=azkaban.user.XmlUserManager
    10. user.manager.xml.file=conf/azkaban-users.xml
    11. # Loader for projects
    12. executor.global.properties=conf/global.properties
    13. azkaban.project.dir=projects
    14. # Velocity dev mode
    15. velocity.dev.mode=false
    16. # Azkaban Jetty server properties.
    17. jetty.use.ssl=false
    18. jetty.maxThreads=25
    19. jetty.port=19099
    20. # Where the Azkaban web server is located
    21. azkaban.webserver.url=http://10.60.247.50:19099
    22. # mail settings
    23. mail.sender=
    24. mail.host=
    25. # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
    26. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081
    27. # when this parameters set then these parameters are used to generate email links.
    28. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
    29. # azkaban.webserver.external_hostname=myazkabanhost.com
    30. # azkaban.webserver.external_ssl_port=443
    31. # azkaban.webserver.external_port=8081
    32. job.failure.email=
    33. job.success.email=
    34. lockdown.create.projects=false
    35. cache.directory=cache
    36. # JMX stats
    37. jetty.connector.stats=true
    38. executor.connector.stats=true
    39. # Azkaban plugin settings
    40. azkaban.jobtype.plugin.dir=plugins/jobtypes
    41. # Azkaban mysql settings by default. Users should configure their own username and password.
    42. database.type=mysql
    43. mysql.port=3306
    44. mysql.host=10.60.247.213
    45. mysql.database=azkaban
    46. mysql.user=azkaban
    47. mysql.password=Azkaban*123qwe!
    48. mysql.numconnections=100
    49. # Azkaban Executor settings
    50. executor.maxThreads=50
    51. executor.flow.threads=30
    52. executor.props.resolve.overrideExisting.enabled=false
  3. 启动和关闭
    调用启动和关闭脚本需要
    启动节点

    1. [hdfs@ecs-iov-sw-qdmid-uat-0002 azkaban-exec-server-0.1.0-SNAPSHOT]$ ./bin/start-exec.sh

    image.png
    现在节点已经启动了,但是改节点还是非活跃状态,需要执行一下语句

    1. [hdfs@ecs-iov-sw-qdmid-uat-0002 azkaban-exec-server-0.1.0-SNAPSHOT]$ curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo

    image.png

查询日志
image.png

关闭节点

  1. [hdfs@ecs-iov-sw-qdmid-uat-0002 azkaban-exec-server-0.1.0-SNAPSHOT]$ ./bin/shutdown-exec.sh

image.png

3.4 安装azkaban-web-server

  1. /app/azkaban目录赋值给hdfs用户,并切换到hdfs用户

    1. [root@ecs-iov-sw-qdmid-uat-0002 app]# chown -R hdfs:hdfs azkaban/

    image.png
    2. 将azkaban-web-server-0.1.0-SNAPSHOT.tar.gz上传到提前规划的节点上,目录为/app/azkaban并将解压azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

    1. [hdfs@ecs-iov-sw-qdmid-uat-0001 azkaban]# tar -zxvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

    image.png

  2. 生成密钥
    生成安全认证秘钥:Azkaban对于安全管理做得非常好,通过SLA、jetty等实现安全访问

    1. [hdfs@ecs-iov-sw-qdmid-uat-0001 azkaban-web-server-0.1.0-SNAPSHOT]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA

    image.png
    Keystore 文件位置
    image.png

  3. 修改配置项conf目录下的配置文件azkaban.properties
    image.png

  1. # Azkaban Personalization Settings
  2. azkaban.name=Sea
  3. azkaban.label=BelugaAzkaban
  4. # Azkaban Personalization Settings
  5. azkaban.name=Sea
  6. azkaban.label=BelugaAzkaban
  7. azkaban.color=#FF3601
  8. azkaban.default.servlet.path=/index
  9. web.resource.dir=web/
  10. default.timezone.id=Asia/Shanghai
  11. # Azkaban UserManager class
  12. user.manager.class=azkaban.user.XmlUserManager
  13. user.manager.xml.file=conf/azkaban-users.xml
  14. # Loader for projects
  15. executor.global.properties=conf/global.properties
  16. azkaban.project.dir=projects
  17. # Velocity dev mode
  18. velocity.dev.mode=false
  19. # Azkaban Jetty server properties.
  20. jetty.use.ssl=false
  21. jetty.maxThreads=25
  22. jetty.port=19099
  23. #指定keystore文件的位置
  24. jetty.keystore=/app/soft/azkaban-web-server-0.1.0-SNAPSHOT/keystore
  25. #keystore中的密码
  26. jetty.password=123456
  27. jetty.keypassword=123456
  28. #指定keystore文件的位置
  29. jetty.truststore=/app/soft/azkaban-web-server-0.1.0-SNAPSHOT/keystore
  30. #keystore中的密码
  31. jetty.trustpassword=123456
  32. # Azkaban Executor settings
  33. # mail settings
  34. mail.sender=
  35. mail.host=
  36. # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
  37. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081
  38. # when this parameters set then these parameters are used to generate email links.
  39. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
  40. # azkaban.webserver.external_hostname=myazkabanhost.com
  41. # azkaban.webserver.external_ssl_port=443
  42. # azkaban.webserver.external_port=8081
  43. job.failure.email=
  44. job.success.email=
  45. lockdown.create.projects=false
  46. cache.directory=cache
  47. # JMX stats
  48. jetty.connector.stats=true
  49. executor.connector.stats=true
  50. # Azkaban mysql settings by default. Users should configure their own username and password.
  51. database.type=mysql
  52. mysql.port=3306
  53. mysql.host=10.60.247.213
  54. mysql.database=azkaban
  55. mysql.user=azkaban
  56. mysql.password=Azkaban*123qwe!
  57. mysql.numconnections=100
  58. #Multiple Executor
  59. azkaban.use.multiple.executors=true
  60. azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
  61. azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
  62. azkaban.executorselector.comparator.Memory=1
  63. azkaban.executorselector.comparator.LastDispatched=1
  64. azkaban.executorselector.comparator.CpuUsage=1
  1. 启动和关闭
    执行启动脚本
    1. [hdfs@ecs-iov-sw-qdmid-uat-0001 azkaban-web-server-0.1.0-SNAPSHOT]$ ./bin/start-web.sh
    image.png

执行关闭脚本

  1. [hdfs@ecs-iov-sw-qdmid-uat-0001 azkaban-web-server-0.1.0-SNAPSHOT]$ ./bin/shutdown-web.sh

image.png


结束语

如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~ 可关注企鹅号【怀瑾握瑜的嘉与嘉】,获取资源下载方式