背景

技术调研三个任务调度框架 ElasticJob、XXL-Job,这周轮到 Azkaban 了。按照官方操作文档编译部署,最后启动一个任务还是很波折,不是 Preparing 就是 Killing ,还有一种 Failed 状态,就是没有 Success 。

根源竟然是没有对 Executor 执行 active 请求,官方文档上是有一句激活执行器的请求,看文档的时候还纳闷,如果不执行会怎么样呢?也不知道执行器端口,就没执行,结果真的掉坑了。

编译

第一步,下载源码,最新版本 4.0.0 ,上传到 Linux 服务器上。

第二步,执行编译命令 ./gradlew installDist

等待编译完成,真的很慢,要超级有耐心呐!

部署中心和执行器启动

第一步,部署 azkaban-web-serverazkaban-exec-server ,将编译后的 build/install 下的这两个模块的内容上传到某个 Linux 服务器上。

第二步,数据库环境准备,在 MySQL 数据库中创建数据库 azkaban,并将 azkaban-db 目录下的 SQL 文件导入到该数据库中。

第三步,修改 azkaban-exec-server 的配置文件 azkaban.properties,数据库连接、时区【很重要】、控制中心地址【这个貌似没有用】。

default.timezone.id=Asia/Shanghai
azkaban.webserver.url
database.type=mysql
mysql.port=3306
mysql.host=XX
mysql.database=azkaban
mysql.user=root
mysql.password=XX

启动执行器并激活

./bin/start-exec.sh

执行器启动后,数据库的 executors 表会多一条记录,active 状态为 0,记录中有 host 和 port 信息,根据这两项信息发起 REST 激活请求:

curl http://localhost:port/executor?action=activate

第四步,修改 azkaban-web-server 的配置文件 azkaban.properties,数据库连接、时区【很重要】启动

azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
default.timezone.id=Asia/Shanghai
jetty.port=8092
database.type=mysql
mysql.port=3306
mysql.host=XX
mysql.database=azkaban
mysql.user=root
mysql.password=XX

jetty 默认端口可能被其他应用占据,换一个端口,filters 中去掉中间那个 MinXXX 那个策略,否则任务一直处于 Preparing 状态。

进入根目录,启动 web-server :

./bin/start-web.sh

查看 logs 目录下的日志,有 Server started 说明启动成功:

测试任务执行

创建了一个很简单的 job 之后,一直报错,有大量异常

调度中心异常日志显示:

Caused by: java.io.IOException: executor became inactive before setting up the flow 27
azkaban.executor.ExecutorManagerException: azkaban.executor.ExecutorManagerException: executor became inactive before setting up the flow 27

手动激活执行器后:

curl http://localhost:46352/executor?action=activate

异常消失:

包含子流的任务

一个 Project 只能上传一个 .zip 文件,但是文件中可以通过 type=flow 定义多个流:

创建子工作流的流程参考资料。

思考问题:包含子流的那个工作流在调度执行子流时,是否需要按照调度周期执行呢?

测试结论:流 d 到达调度时间后,会执行依赖的 flow c ,即使还没有到达 c 的调度时间。此外, c 也按自己的调度周期,每隔五分钟执行一次:

Azkaban 的并行调度策略

同一个 flow 如果正在执行,而下一轮调度周期又到达了,那么任务的调度会如何处理呢?执行策略有三种,即并行配置:

Azkaban 的疑惑

多执行器部署场景下,是否支持任务分片执行呢?
Right click on the jobs to disable and enable jobs in the flow. 右键 Disable all 了之后会怎么样呢?对应任务就不会执行了吗?
Azkaban 执行任务流很流畅,貌似不能对任务进行分片。

每次环境部署都不会很顺畅,虽然按照官方文档操作,总是会遇到一些小问题,也是真够神奇的!

主要是三个小问题:

  1. web-server 端口问题,默认端口被其他应用占据了。
  2. 执行器和调度中心的启动顺序,如果一个激活状态的执行器都没有,web-server 就无法启动成功。直接改 executors 表的 active 字段虽然能让 web-server 正确启动,但是后面调度任务的时候会提示没有激活的执行器。
  3. 执行器启动后需要通过 REST 请求激活

Azkaban 的任务调度器竟然不会自动激活,这一点真的太不友好了。

ElasticJob 和 XXL-Job 都有自动注册上下线的功能,而 Azkaban 启动执行器的时候,只会添加一条 executors 记录,但是状态为 0 ,不知道为何这样设计?这个小问题导致一个简单的 Job 一直得不到正确调度。

Azkaban 环境搭建及executor became inactive问题相关推荐

  1. Apache AzKaban 环境搭建与入门使用

    1.azkaban的环境搭建 要求:由于这里azkaban要调度hive作业,可能存在调度sqoop等作业,因此需要安装在有这些节点的机器上 1)上传jar包并解压缩(三个) mkdir /home/ ...

  2. 大数据单机学习环境搭建(12)Azkaban的简单使用

    专题:大数据单机学习环境搭建和使用 1.登录和密码修改 2.新建工程 2.1新建工程 2.2创建zip文件 2.3添加文件到项目 3.任务执行 3.1立即执行 3.2.设置定时任务 4.依赖任务建立 ...

  3. 2021年大数据Spark(六):环境搭建集群模式 Standalone

    目录 环境搭建-Standalone 前言 Standalone 架构 ​​​​​​​集群规划 修改配置并分发 修改slaves ​​​​​​​分发到其他机器 修改spark-env.sh 集群启动和 ...

  4. Spark详解(二):Spark完全分布式环境搭建

    1. 前言 本文搭建了一个由三节点(master.slave1.slave2)构成的Spark完全分布式集群,并通过Spark分布式计算的一个示例测试集群的正确性.本文将搭建一个支持Yarn的完全分布 ...

  5. 高并发-【抢红包案例】之一:SSM环境搭建及复现红包超发问题

    文章目录 概述 抢红包案例 案例关注点 工程结构 库表设计 Domain Dao层实现 Service层实现 使用全注解搭建SSM 开发环境 Controller层 View层 运行测试 超量发送的B ...

  6. gitlab 目录tag_【环境搭建】gitlab-ci(持续集成)

    背景 服务和服务器开始多起来了,一个个搞效率太低,所以准备用持续集成来提高效率 原理 gitlab-ci与ci-runner的关系 push到gitlab之后,触发GitLab-CI,GitLab-C ...

  7. Apache Spark1.1.0部署与开发环境搭建 - Mark Lin

    Spark是Apache公司推出的一种基于Hadoop Distributed File System(HDFS)的并行计算架构.与MapReduce不同,Spark并不局限于编写map和reduce ...

  8. Flume环境搭建_五种案例(转)

    Flume环境搭建_五种案例 http://flume.apache.org/FlumeUserGuide.html A simple example Here, we give an example ...

  9. Hadoop学习之整体介绍及环境搭建

    Hadoop学习之整体介绍及环境搭建 1 大数据概述 1.1 什么是大数据 数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加 工的的原始素材. 大数据:传统处理方 ...

最新文章

  1. NewPhy.-揭秘优势种dominant species
  2. jQuery序列化表单 serialize() serializeArray()
  3. python dict 属性_python的dir()和__dict__属性的区别
  4. 高清视频下如何节省带宽?
  5. 平均分组 java_java – 按属性分组对象列表,并计算每个对象的对象属性的平均值...
  6. SCNCHECKPOINT
  7. 感觉要火!妹子实地采访网易猪厂程序员七夕怎么过
  8. php 存储html 内容,HTML 本地存储
  9. 【数据库】mysql常用的数据类型
  10. PyTorch的Tensor(张量)
  11. 别傻了,人家离职你也离
  12. (转)C 语言高效编程的几招
  13. 文件名的查找——find
  14. sicp 3.9题解答
  15. QProcess解决无交互输入密码问题
  16. C#项目xxx针对的是.NETFramework,Version=vxxx之解决方案
  17. 测试软件测显卡有啸叫,完美解决 显卡电流声!显卡啸叫!吱吱的电流声!附解决方案!...
  18. 大二C#实现酒店管理系统(C端展示、前台操作、登记入住、入住管理、职位管理、公告系统等)
  19. 完全卸载chrome
  20. 新域名 @live.com 和 @windowslive.com 即将上线 (from cnbeta)

热门文章

  1. 通过分段传送避免FTP传输文件假死
  2. linux中popen函数,system函数与popen函数
  3. @Valid参数校验
  4. 如何玩转私域流量?和公域相比私域流量有哪些价值?
  5. windows安全小知识(启动安全性日志)
  6. 基于 Vue3 + TypeScript 开发SSR系统(一):初始创建SSR
  7. Es terms include 聚合过滤
  8. 按钮的禁用disabled属性
  9. *** PAC模式和全局模式的区别
  10. vs2015创建c#新项目,项目名称左边会有蓝色小锁和红色勾