Azkaban入门实战(1)--安装部署

本文主要介绍Azkaban的安装部署,文中文中使用到的软件版本:Azkaban 3.90.0、MySQL 5.7、Centos 7。

1、Azkaban简介

Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,主要用于在一个工作流内以一个特定的顺序运行一组工作和流程,它的配置是通过简单的key:value对的方式,通过配置中的dependencies 来设置依赖关系。Azkaban使用job配置文件建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

1.1、Azkaban结构

Azkaban入门实战(1)--安装部署

Azkaban由三个关键组件构成:
1.AzkabanWebServer:AzkabanWebServer是整个Azkaban工作流系统的主要管理者,它负责用户登录认证、project管理、定时执行工作流、跟踪工作流执行进度等一系列任务。
2.AzkabanExecutorServer:负责具体的工作流的提交、执行,它们通过mysql数据库来协调任务的执行。
3.关系型数据库(MySQL):存储大部分执行流状态,AzkabanWebServer和AzkabanExecutorServer都需要访问数据库

1.2、Azkaban部署模式

在3.0后,Azkaban提供了两种部署模式:

1.2.1、solo-server模式

DB使用的是一个内嵌的H2,Web Server和Executor Server运行在同一个进程里。这种模式包含Azkaban的所有特性,但一般用来学习和测试,也可以用于小的应用。

1.2.2、distributed multiple-executor模式

DB使用的是MySQL,MySQL最好使用master-slave架构,Web Server和Executor Server运行在不同机器上,且有多个Executor Server;这为Azkaban提供了很强的扩展性。

2、安装

2.1、编译

2.1.1、下载源码并解压

下载地址:https://github.com/azkaban/azkaban/releases

tar zxvf azkaban-3.90.0.tar.gz

2.1.2、修改maven地址

修改build.gradle中maven地址为阿里云仓库,不然下载jar包会很慢。

buildscript {
  repositories {
    //mavenCentral()
    //maven {
      //url 'https://plugins.gradle.org/m2/'
    //}
    maven {
      url 'https://maven.aliyun.com/repository/gradle-plugin'
    }
  }


allprojects {
  apply plugin: 'jacoco'

  repositories {
    //mavenCentral()
    //mavenLocal()
    maven {
      url 'https://maven.aliyun.com/repository/gradle-plugin'
    }
  }
}

2.1.3、编译

进入解压的目录(/home/hadoop/app/azkaban-3.90.0),执行:

# Build Azkaban
./gradlew build

# Clean the build
./gradlew clean

# Build and install distributions
./gradlew installDist

# Run tests
./gradlew test

# Build without running tests
./gradlew build -x test

在执行./gradlew build时,大概执行到58%时会卡住,Ctrl+c后在重新执行成功了。

在执行这命令时偶尔会出现超时错误,导致命令执行失败(failed);可以重新执行命令。

2.2、部署

2.2.1、solo-server模式

编译完成后,进入/home/hadoop/app/azkaban-3.90.0/azkaban-solo-server/build/install/azkaban-solo-server目录

3.2.1.1、修改时区

conf/azkaban.properties:

#default.timezone.id=America/Los_Angeles
default.timezone.id=Asia/Shanghai
2.2.1.2、启停
bin/start-solo.sh

停止命令:

bin/shutdown-solo.sh
2.2.1.3、控制台

http://10.49.196.10:8081/ (azkaban/azkaban)

用户可以在conf/azkaban-users.xml文件中配置。

2.2.1.4、部署包

在/home/hadoop/app/azkaban-3.90.0/azkaban-solo-server/build/distributions目录下有部署包可以copy到其他地方部署。

2.2.2、distributed multiple-executor模式

2.2.2.1、规划

假设Mysql已经安装完成,这里只考虑Web Server和Executor Server;源代码的编译在10.49.196.10上,目录为/home/hadoop/app/azkaban-3.90.0。

10.49.196.10 Web Server
10.49.196.11 Executor Server
10.49.196.12 Executor Server

 

 
 

 

2.2.2.2、初始化数据库
mysql> CREATE DATABASE azkaban;

然后在azkaban库中执行/home/hadoop/app/azkaban-3.90.0/azkaban-db/build/install/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql脚本

2.2.2.3、部署Executor Server
2.2.2.3.1、分发部署包

从10.49.196.10上拷贝部署包到10.49.196.11上

cd /home/hadoop/app/azkaban-3.90.0/azkaban-exec-server/build/distributions
scp ./azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz hadoop@10.49.196.11:/home/hadoop/app
2.2.2.3.2、10.49.196.11上部署Executor Server
cd /home/hadoop/app
tar zxvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz

修改conf/azkaban.properties文件:

#default.timezone.id=America/Los_Angeles
default.timezone.id=Asia/Shanghai
azkaban.webserver.url=http://10.49.196.10:8081 mysql.port=3306 mysql.host=10.49.196.10 mysql.database=azkaban mysql.user=root mysql.password=123 executor.port=9000#设置启动端口,不然每次会随机生成一个端口

启动:

bin/start-exec.sh

启动完之后,还需要激活:

curl -G "localhost:9000/executor?action=activate" && echo
2.2.2.3.3、10.49.196.12上部署Executor Server

10.49.196.12上的部署与10.49.196.11类似的操作步骤;或者直接把10.49.196.11上的部署目录直接拷贝到10.49.196.12上。

2.2.2.3、部署Web Server

可以直接使用10.49.196.10上编译好的部署目录/home/hadoop/app/azkaban-3.90.0/azkaban-web-server/build/install/azkaban-web-server

a、修改/etc/hosts文件,设置Executor Server主机的主机名和ip的对应关系:

10.49.196.11 pxc2
10.49.196.12 pxc3

b、修改conf/azkaban.properties文件:

#default.timezone.id=America/Los_Angeles
default.timezone.id=Asia/Shanghai

mysql.port=3306
mysql.host=10.49.196.10
mysql.database=azkaban
mysql.user=root
mysql.password=123

c、启动:

bin/start-web.sh
2.2.2.4、控制台

http://10.49.196.10:8081/

用户名密码为:azkaban/azkaban 用户可用在conf/azkaban-users.xml中配置。

2.2.2.5、启动顺序

一定要先启动Exector Server,再启动Web Server;如果有Exector Server需要重启,Web Server也需要重启以同步Exector Server信息。

2.2.2.6、常见异常处理

a、job不执行

Web Server控制提示如下信息:

2020/10/22 10:24:02.453 +0800  INFO [ExecutorManager] [AzkabanWebServer-QueueProcessor-Thread] [Azkaban] Reached handleNoExecutorSelectedCase stage for exec 124 with error count 0

可能原因:

MinimumFreeMemory过滤器会检查executor主机空余内存是否会大于6G,如果不足6G,则web-server不会将任务交由该主机执行。

处理方法:

修改conf/azkaban.properties文件,去除MinimumFreeMemory过滤器

#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus

b、Cannot request memory (Xms 0 kb, Xmx 0 kb) from system for job second

Azkaban控制台Job Logs报如下错误:

Azkaban入门实战(1)--安装部署

原因:

azkaban要求执行主机可用内存必须大于3G才能满足执行任务的条件。

处理方法:

Executor Server部署目录下plugins/jobtypes/commonprivate.properties文件增加:

memCheck.enabled=false

c、Failed to assign non-existent executor Id: xxx to execution : yyy

Web Server后台报:

2020/10/22 10:45:47.047 +0800  WARN [ExecutorManager] [AzkabanWebServer-QueueProcessor-Thread] [Azkaban] Executor pxc2:9000 (id: 12), active=true responded with exception for exec: 131
azkaban.executor.ExecutorManagerException: Failed to assign non-existent executor Id: 12 to execution : 131  
        at azkaban.executor.AssignExecutorDao.assignExecutor(AssignExecutorDao.java:43)
        at azkaban.executor.JdbcExecutorLoader.assignExecutor(JdbcExecutorLoader.java:331)
        at azkaban.executor.ExecutorManager.dispatch(ExecutorManager.java:1059)
        at azkaban.executor.ExecutorManager.access$500(ExecutorManager.java:69)
        at azkaban.executor.ExecutorManager$QueueProcessorThread.selectExecutorAndDispatchFlow(ExecutorManager.java:1238)
        at azkaban.executor.ExecutorManager$QueueProcessorThread.processQueuedFlows(ExecutorManager.java:1210)
        at azkaban.executor.ExecutorManager$QueueProcessorThread.run(ExecutorManager.java:1148)

原因:

重启Executor后,它的id会变化(自增),导致Web Server根据缓存的id找不到Executor。

处理方法:

Executor Server重启后,Web Server也重启下。

 

上一篇:大数据技术之 Azkaban


下一篇:Azkaban基础(四):Azkaban 实战(二)