Azkaban4.0.0编译和部署

简介

Azkaban是一套简单的任务调度服务,整体包括三个部分元数据DB、web-server、exec-server。它是有linkedin的开源项目,用于批量工作流的任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。
Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。

  • 1、元数据DB

azkaban将大多数状态信息都存于MySQL中。

  • 2、Azkaban Web Server

提供了Web UI,是azkaban的主要管理者,包括 project 的管理,认证,调度,对工作流执行过程的监控等。

  • 3、Azkaban Executor Server

调度工作流和任务,纪录工作流活任务的日志,之所以将AzkabanWebServer和AzkabanExecutorServer分开,主要是因为在某个任务流失败后,可以更方便的将重新执行。而且也更有利于Azkaban系统的升级

环境准备

  • 1.安装好Mysql,安装过程见Mysql的安装
  • 2.安装好JDK1.8
  • 3.安装好nodejs

编译Azkaban4.0.4

下载地址

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

编译

1.下载并解压文件
# 下载文件
[root@k8s-node8 software]# wget https://github.com/azkaban/azkaban/releases/4.0.0.tar.gz

# 解压文件
[root@k8s-node6 software]# tar -xzvf 4.0.0.tar.gz 

[root@k8s-node6 software]# cd azkaban-4.0.0/

[root@k8s-node6 azkaban-4.0.0]# ls
az-core       az-flow-trigger-dependency-plugin  
az-intellij-style.xml  azkaban-exec-server             
azkaban-web-server      CONTRIBUTING.md    
gradlew      README.md         test
az-crypto     az-flow-trigger-dependency-type    az-jobsummary      
azkaban-hadoop-security-plugin  az-reportal             docs    
gradlew.bat  requirements.txt  tools
az-examples   az-hadoop-jobtype-plugin           azkaban-common     
azkaban-solo-server             build.gradle            gradle      
LICENSE      settings.gradle
az-exec-util  az-hdfs-viewer                     azkaban-db         
azkaban-spi                     cached-http-filesystem 
gradle.properties  NOTICE       temp


2.修改azkaban-4.0.0目录下的build.gradle文件

打开azkaban-4.0.0目录下的build.gradle文件,更改linkedin的maven仓库地址,原有的仓库地址在国内打不开,编译会报错

找到build.gradle文件中的:

maven{
    url 'https://linkedin.bintray.com/maven'
}

修改为如下所示:

maven {
      url 'https://linkedin.jfrog.io/artifactory/open-source/'
    }
3.修改nodejs相关地址

进入到/home/software/azkaban-4.0.0/azkaban-web-server目录中,打开build.gradle文件,将node选项中的download配置值设为false,如下所示。

node {
    // Version of node to use.
    version = '8.10.0'

    // Version of npm to use.
    npmVersion = '5.6.0'

    // Base URL for fetching node distributions (change if you have a mirror).
    distBaseUrl = 'https://nodejs.org/dist'

    // If true, it will download node using above parameters.
    // If false, it will try to use globally installed node.
    download = false

    // Set the work directory for unpacking node
    workDir = file("${project.buildDir}/nodejs")

    // Set the work directory where node_modules should be located
    nodeModulesDir = file("${project.projectDir}")
}

使用本机已经安装好了的nodejs进行编译,如果不修改的话,在编译过程中会去下载node8.10.0,很有可能会因为网络问题下载失败,从而导致编译失败。

4.修改azkaban-db代码,以支持Mysql8.X系列数据库

azkaban默认只支持Mysql5.X(代码中的mysql数据库加载JDBC的驱动类写死了),所以需要改造一下让他既支持Mysql5.x又支持Mysql8.x。

进入/home/software/azkaban-4.0.0/azkaban-db/src/main/java/azkaban/db目录,修改MySQLDataSource.java

  @Inject
  public MySQLDataSource(final Props props, final DBMetrics dbMetrics) {
    super();
    this.dbMetrics = dbMetrics;

    final int port = props.getInt("mysql.port");
    final String host = props.getString("mysql.host");
    final String dbName = props.getString("mysql.database");
    final String user = props.getString("mysql.user");
    final String password = props.getString("mysql.password");
    final int numConnections = props.getInt("mysql.numconnections");
    
    //加上mysql的驱动类配置项,如果没有配置则默认是mysql5.x
    //-----------------begin-----------------------
    String driverName = props.getString("mysql.driverName");
    if(driverName == null){
        driverName = "com.mysql.jdbc.Driver";
    }
    //-----------------end-----------------------
    
    final String url = "jdbc:mysql://" + (host + ":" + port + "/" + dbName);
    addConnectionProperty("useUnicode", "yes");
    addConnectionProperty("characterEncoding", "UTF-8");
    
    //setDriverClassName(com.mysql.jdbc.Driver);
    
    //修改成从配置中读取驱动类名
    addConnectionProperty("useSSL", "false");
    setDriverClassName(driverName);
    
    setUsername(user);
    setPassword(password);
    setUrl(url);
    setMaxTotal(numConnections);
    setValidationQuery("/* ping */ select 1");
    setTestOnBorrow(true);
  }

5.进行编译
[root@k8s-node6 db]# cd /home/software/azkaban-4.0.0/
[root@k8s-node6 azkaban-4.0.0]# ./gradlew build
[root@k8s-node6 azkaban-4.0.0]# ./gradlew installDist

该踩的坑我已经踩过了,按照上述过程操作,不出意外的话应该可以非常顺利的编译成功,编译成功后就可以进行下一步安装配置操作了。

安装

azkaban的安装分为两种模式,一种是Solo Server的模式,一种是Multi Executor Server的模式。使用更多的一般都是Multi Executor Server的方式,下面我将讲解Multi Executor Server的部署过程。

安装配置azkaban-db

创建azkaban的数据库和用户
  • 1.创建数据库
mysql> CREATE DATABASE azkaban;
  • 2.创建用户
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'mysqlazkaban';

如果涉及到因密码太简单而报错(Mysql8.x系列大概率会报错),则需临时更改密码策略为Low级别,再执行上述操作。

mysql> set GLOBAL validate_password.policy=LOW
  • 3.用户授权
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;

mysql> flush privileges;
2.初始化数据库表

进入到 azkaban-db/build/install/azkaban-db/ 目录下

[root@k8s-node6 azkaban-4.0.0]# cd azkaban-db/build/install/azkaban-db/
[root@k8s-node6 azkaban-db]# 
[root@k8s-node6 azkaban-db]# ls
create.active_executing_flows.sql       create.execution_logs.sql      create.project_permissions.sql  create.ramp_exceptional_flow_items.sql  upgrade.3.104.0.to.3.105.0.sql  upgrade.3.83.0.to.3.84.0.sql
create.active_sla.sql                   create.executor_events.sql     create.project_properties.sql   create.ramp_exceptional_job_items.sql   upgrade.3.20.0.to.3.22.0.sql    upgrade.3.84.0.to.3.85.0.sql
create-all-sql-0.1.0-SNAPSHOT.sql       create.executors.sql           create.projects.sql             create.ramp_items.sql                   upgrade.3.43.0.to.3.44.0.sql    upgrade.3.85.0.to.3.86.0.sql
create.containerization-tables-all.sql  create.project_events.sql      create.project_versions.sql     create.ramp.sql                         upgrade.3.68.0.to.3.69.0.sql
create.execution_dependencies.sql       create.project_files.sql       create.properties.sql           create.triggers.sql                     upgrade.3.69.0.to.3.70.0.sql
create.execution_flows.sql              create.project_flow_files.sql  create.quartz-tables-all.sql    create.validated_dependencies.sql       upgrade.3.76.0.to.3.77.0.sql
create.execution_jobs.sql               create.project_flows.sql       create.ramp_dependency.sql      database.properties                     upgrade.3.80.0.to.3.81.0.sql
[root@k8s-node6 azkaban-db]# 

其中create-all-sql-0.1.0-SNAPSHOT.sql 就是整个azkaban所需要的初始化数据库脚本。

登录数据库,初始化数据库脚本。

mysql> use azkaban;

mysql> source create-all-sql-0.1.0-SNAPSHOT.sql;

安装配置azkaban-exec-server

  • 1.进入到/home/software/azkaban-4.0.0/azkaban-exec-server/build/install/azkaban-exec-server/目录中
[root@k8s-node6 ~]# cd /home/software/azkaban-4.0.0/azkaban-exec-server/build/install/azkaban-exec-server/
[root@k8s-node6 azkaban-exec-server]# 
[root@k8s-node6 azkaban-exec-server]# cd conf/
[root@k8s-node6 conf]# ls
azkaban.properties  global.properties  log4j.properties

  • 2.打开azkaban.properties文件,其中有如下值需要修改:
# web-server的端口监听和是否启用https
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081  //默认端口是8081,如果有冲突则可以修改成其他值

# 数据库的相关配置信息

database.type=mysql
# mysql8.x需要加上驱动的配置,上面我们更改过代码
mysql.driverName=com.mysql.cj.jdbc.Driver

mysql.port=3306
mysql.host=127.0.0.1
mysql.database=azkaban
mysql.user=azkaban
mysql.password=mysqlazkaban
mysql.numconnections=100
  • 3.启动azkaban-exec-server执行器
[root@k8s-node6 azkaban-exec-server]# bin/start-exec.sh 
[root@k8s-node6 azkaban-exec-server]# ls
bin  conf  currentpid  executions  executor.port    lib  logs  plugins  projects  temp
[root@k8s-node6 azkaban-exec-server]# 

如果出现了executor.port文件,则说明executor启动成功

Tips: 启动的时候一定要bin/start-exec.sh的方式启动,不要进入到bin目录再执行start-exec.sh,否则可能会报错,从而启动不成功。

  • 4.激活Executor

在executor.port所在的目录执行如下操作

[root@k8s-node6 azkaban-exec-server]# curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo
{"status":"success"}

安装配置azkaban-web-server

进入到/home/software/azkaban-4.0.0/azkaban-web-server/build/install/azkaban-web-server目录中:

1.配置conf
[root@k8s-node6 azkaban-web-server]# cd conf/
[root@k8s-node6 conf]# ls
azkaban.properties  azkaban-users.xml  global.properties  log4j.properties
  • azkaban.properties 是azkaban-web-server的配置文件
  • azkaban-user.xml是azkaban的用户配置文件,(可以在此文件中新增用户或者修改密码)
  • global.properties文件中可以配置一些全局的属性。

打开azkaban.properties文件,其中有如下值需要修改:

# web-server的端口监听和是否启用https
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8083  //默认端口是8081,如果有冲突则可以修改成其他值

# 数据库的相关配置信息

database.type=mysql
# mysql8.x需要加上驱动的配置,上面我们更改过代码
mysql.driverName=com.mysql.cj.jdbc.Driver

mysql.port=3306
mysql.host=127.0.0.1
mysql.database=azkaban
mysql.user=azkaban
mysql.password=mysqlazkaban
mysql.numconnections=100
2. 启动azkaban-web-server

要先启动最少一个Executor,才能启动web-server。

[root@k8s-node3 azkaban-web-server-4.0.0]# bin/start-web.sh 

启动完毕后,在浏览器中输入http://192.168.0.52:8083/,就可以进入到azkaban的web管理工具中。
image

用户名密码默认都是azkaban/azkaban

可能遇到的问题

  • 1.Could not HEAD ‘https://linkedin.bintray.com/maven/com/linkedin/pegasus/generator/28.3.11/generator-28.3.11.pom’. Received status code 502 from server: Bad Gateway
3: Task failed with an exception.
-----------
* What went wrong:
Execution failed for task ':azkaban-web-server:restliTemplateGenerator'.
> Could not resolve all files for configuration ':azkaban-web-server:generateRestli'.
   > Could not resolve com.linkedin.pegasus:generator:28.3.11.
     Required by:
         project :azkaban-web-server
      > Could not resolve com.linkedin.pegasus:generator:28.3.11.
         > Could not get resource 'https://linkedin.bintray.com/maven/com/linkedin/pegasus/generator/28.3.11/generator-28.3.11.pom'.
            > Could not HEAD 'https://linkedin.bintray.com/maven/com/linkedin/pegasus/generator/28.3.11/generator-28.3.11.pom'. Received status code 502 from server: Bad Gateway
   > Could not resolve com.linkedin.pegasus:restli-tools:28.3.11.
     Required by:
         project :azkaban-web-server
      > Skipped due to earlier error

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
==============================================================================

* Get more help at https://help.gradle.org

BUILD FAILED in 7s
22 actionable tasks: 19 executed, 3 from cache

解决:

找到build.gradle文件中的:

maven{
    url 'https://linkedin.bintray.com/maven'
}

修改为如下所示:

maven {
      url 'https://linkedin.jfrog.io/artifactory/open-source/'
    }
  • 2.如果遇到无法连接Mysql8.x数据库的错误,查看上述更改方式。
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
版本:3.38,解压后,配置自己的环境可直接用 azkaban-3.38.0\azkaban-db azkaban-3.38.0\azkaban-exec-server azkaban-3.38.0\azkaban-solo-server azkaban-3.38.0\azkaban-web-server ----------------后续步骤------------------ 1.创建数据库并导入基本数据 (1)创建数据库 create database azkaban; (2)mysql授权 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; FLUSH PRIVILEGES; (3)导入数据 use azkaban; source /opt/azkaban-3.38.0/azkaban-db/create-all-sql-0.1.0-SNAPSHOT.sql 2. ssl配置 cd /opt/azkaban-3.38.0\azkaban-web-server keytool -keystore keystore -alias jetty -genkey -keyalg RSA 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: xue 您的组织单位名称是什么? [Unknown]: xue 您的组织名称是什么? [Unknown]: xue 您所在的城市或区域名称是什么? [Unknown]: beijing 您所在的省/市/自治区名称是什么? [Unknown]: beijing 该单位的双字母国家/地区代码是什么? [Unknown]: CN CN=xue, OU=xue, O=xue, L=beijing, ST=beijing, C=CN是否正确? [否]: Y 输入 的密钥口令 (如果和密钥库口令相同, 按回车): 3.修改azkaban-exec-server下配置文件,引入mysql的依赖包 (1)将azkaban-solo-server下conf、plugins、sql目录复制到azkaban-exec-server目录下 cd azkaban-3.38.0/azkaban-solo-server/ cp -a ./conf ./plugins ./sql ../azkaban-exec-server (2)修改azkaban-exec-server/conf/的azkaban.properties文件 # Azkaban Personalization Settings azkaban.name=master azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=web/ #修改时区 default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager #修改为绝对路径,否则可能找不到 user.manager.xml.file=/opt/azkaban-3.38.0/azkaban-exec-server/conf/azkaban-users.xml # Loader for projects executor.global.properties=/opt/azkaban-3.38.0/azkaban-exec-server/conf/global.properties azkaban.project.dir=projects database.type=mysql mysql.port=3306 mysql.host=master mysql.database=azkaban mysql.user=root mysql.password=123456 mysql.numconnections=100 (其他默认) 4. 在conf目录下新建log4j.properties文件 [root@master azkaban-exec-server]# vim conf/log4j.properties 复制以下内容到log4j文件: log4j.rootLogger=INFO, Console log4j.logger.azkaban=INFO, server log

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值