Centos7上部署azkaban-4.0.0(包含源码编译详细步骤以及每个章节注意事项)

说明:新建的虚拟机,系统很干净,根据部署需求安装相应的软件,针对每一步进行详细介绍,有坑的地方都进行了详细说明,以及排错方法。

1系统环境准备

1.1系统配置

#准备虚拟机
[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)
#内存2核4G
[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           3.7G        231M        3.3G         11M        126M        3.3G
Swap:          3.9G          0B        3.9G
#硬盘50G
[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   12M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos-root   46G   12G   35G   25% /
/dev/loop0               9.5G  9.5G     0  100% /mnt
/dev/sda1               1014M  151M  864M   15% /boot
tmpfs                    378M     0  378M    0% /run/user/0

1.2配置hostname,ip

[root@localhost ~]# hostnamectl set-hostname azkaban
[root@localhost ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.1.16/24 ipv4.gateway 192.168.1.254 ipv4.dns "8.8.8.8,114.114.114.114" connection.autoconnect yes
[root@localhost ~]# nmcli connection up ens33

1.3关闭防火墙,selinux

[root@azkaban ~]# systemctl disable --now firewalld
[root@azkaban ~]# setenforce 0 && sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config

1.4配置本地yum源,安装一些需要的工具

#上传镜像包CentOS-7-x86_64-Everything-2009.iso
[root@azkaban ~]# ll /media/
总用量 9961472
-rw-r--r--. 1 root root 10200547328 329 2023 CentOS-7-x86_64-Everything-2009.iso

#书写挂载文件
[root@azkaban ~]# cat >> /etc/fstab << 'EOF'

/media/CentOS-7-x86_64-Everything-2009.iso /mnt iso9660 defaults 0 0
EOF

#挂载,让配置文件生效
[root@azkaban ~]# mount -a

#备份系统yum文件,避免和配置的本地文件冲突
[root@azkaban ~]# mkdir /etc/yum.repos.d/bak

[root@azkaban ~]# cd /etc/yum.repos.d/
[root@azkaban yum.repos.d]# mv * bak/
mv: 无法将目录"bak" 移动至自身的子目录"bak/bak"#书写本地yum源配置文件
[root@azkaban yum.repos.d]# cat > local.repo << 'EOF'
[dvd]
name=dvd
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF

#查看yum源软件
[root@azkaban yum.repos.d]# yum clean all
[root@azkaban yum.repos.d]# yum repolist 
已加载插件:fastestmirror
Determining fastest mirrors
dvd                                                                                                       | 3.6 kB  00:00:00     
(1/2): dvd/group_gz                                                                                       | 153 kB  00:00:00     
(2/2): dvd/primary_db                                                                                     | 6.1 MB  00:00:00     
源标识                                                         源名称                                                      状态
dvd                                                            dvd                                                         10,072
repolist: 10,072


#安装一些工具
[root@azkaban ~]# yum -y install wget git make gcc gcc-c++ vim unzip 

2安装jdk

2.1下载并解压安装包

#准备安装包并上传到服务器,根据官方介绍需要jdk1.8及以上,此处我们使用jdk1.8
[root@azkaban ~]# ll
总用量 135964
-rw-------. 1 root root      1257 329 2023 anaconda-ks.cfg
-rw-r--r--  1 root root 139219380 112 09:34 jdk-8u371-linux-x64.tar.gz

#解压二进制包
[root@azkaban ~]# tar -xf jdk-8u371-linux-x64.tar.gz -C /usr/local/

2.2配置环境变量

#配置环境变量
[root@azkaban ~]# cat >> /etc/profile << 'EOF'

#java环境变量
export JAVA_HOME=/usr/local/jdk1.8.0_371
export PATH=$PATH:$JAVA_HOME/bin
EOF

#加载环境变量
[root@azkaban ~]# source /etc/profile

#验证
[root@azkaban ~]# java -version
openjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)

3 安装nodejs(3.1和3.2章节两种安装方法二选一即可)

下载地址 nodejs download

3.1源码安装nodejs

3.1.1下载 Node.js 源码并解压

说明:在CentOS7.9环境下,编译 node-v11.x 以上版本时 提示
WARNING: C++ compiler too old, need g++ 4.9.4 or clang++ 3.4.2 (CXX=g++)
WARNING: warnings were emitted in the configure phase

在编译node-13.x以上版本时,则提示需要升级 C++ 的标准库 std::index_sequence,不然报错
在编译node-16.x以上版本时,则提示还需要升级 python2到python3.6以上版本才可以编译

如果选择其他版本,建议不要超过node-12.x版本,否则需要配置升级更多的东西。
#下载源码包,选择azkaban源码包中的nodejs版本
[root@azkaban ~]# wget http://nodejs.org/dist/v8.10.0/node-v8.10.0.tar.gz

#解压源码包
[root@azkaban ~]# tar -xf node-v8.10.0.tar.gz

3.1.2编译并安装 Node.js

[root@azkaban ~]# cd node-v8.10.0/
[root@azkaban node-v8.10.0]# ./configure --prefix=/usr/local/node/8.10.0
[root@azkaban node-v8.10.0]# make
[root@azkaban node-v8.10.0]# make install

3.1.3配置 NODE_HOME 环境变量

[root@azkaban ~]# cat >> /etc/profile << 'EOF'

#set for nodejs
export NODE_HOME=/usr/local/node/8.10.0
export PATH=$NODE_HOME/bin:$PATH
EOF

#加载环境变量
[root@azkaban ~]# source /etc/profile

#验证
[root@azkaban ~]# npm -v
5.6.0
[root@azkaban ~]# node -v
v8.10.0

3.2二进制包安装nodejs

3.2.1下载安装包并解压

如果下载其他版本的二进制包,建议不要超过node-v17.x 版本,往上的版本会有其他库不兼容,需要升级更多软件

[root@azkaban ~]# wget https://nodejs.org/dist/v8.10.0/node-v8.10.0-linux-x64.tar.xz

[root@azkaban ~]# tar -xf node-v8.10.0-linux-x64.tar.xz -C /usr/local/

3.2.2配置环境变量

[root@azkaban ~]# cat >> /etc/profile << 'EOF'

#set for nodejs
export NODE_HOME=/usr/local/node-v8.10.0-linux-x64
export PATH=$NODE_HOME/bin:$PATH
EOF

#加载环境变量
[root@azkaban ~]# source /etc/profile

#验证
[root@azkaban ~]# npm -v
5.6.0
[root@azkaban ~]# node -v
v8.10.0

4 编译azkaban源码包(CentOS7环境下)

4和5章节2选一即可

4.1下载源码包

#官网				https://azkaban.github.io/
#下载				https://github.com/azkaban/azkaban
#tar包下载地址	  https://github.com/azkaban/azkaban/archive/refs/tags/4.0.0.tar.gz
#git仓库			git clone https://github.com/azkaban/azkaban.git

#下载tar包到本地
[root@azkaban ~]# wget https://github.com/azkaban/azkaban/archive/refs/tags/4.0.0.tar.gz -O azkaban-4.0.0.tar.gz --no-check-certificate

4.2解压并下载依赖文件

#解压源码包
[root@azkaban ~]# tar -xf azkaban-4.0.0.tar.gz

Azkaban 4.0.0 编译需要依赖 gradle-4.6-all.zip 。Gradle 是一个项目自动化构建开源工具,类似于 Maven。需要注意的是不同版本的 Azkaban 依赖 Gradle 版本不同,可以在解压后查看 ${AZKABAN_HOME}/gradle/wrapper/gradle-wrapper.properties 文件获取。
[root@azkaban ~]# egrep -v '^#|^$' azkaban-4.0.0/gradle/wrapper/gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip

国内访问https://services.gradle.org/distributions/gradle-4.6-all.zip 比较慢("科学上网"也可以不用修改),可以提前下载好gradle-4.6-all.zip,放在${AZKABAN_HOME}/gradle/wrapper/目录下,并修改配置为 distributionUrl=gradle-4.6-all.zip

[root@azkaban ~]# cd azkaban-4.0.0/gradle/wrapper/
[root@azkaban wrapper]# wget https://services.gradle.org/distributions/gradle-4.6-all.zip

#修改配置文件为本地文件
[root@azkaban wrapper]# egrep -v '^#|^$' gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=gradle-4.6-all.zip

[root@azkaban wrapper]# ll
总用量 104284
-rw-r--r-- 1 root root 106724289 112 12:42 gradle-4.6-all.zip
-rw-rw-r-- 1 root root     54708 318 2021 gradle-wrapper.jar
-rw-rw-r-- 1 root root       736 112 12:42 gradle-wrapper.properties

4.3修改配置文件

4.3.1修改仓库地址

[root@azkaban wrapper]# cd /root/azkaban-4.0.0/

#https://linkedin.bintray.com/maven 此地址无法访问,修改https://linkedin.bintray.com/maven 为 https://linkedin.jfrog.io/artifactory/open-source
[root@azkaban azkaban-4.0.0]# vim build.gradle

allprojects {
  apply plugin: 'jacoco'

  repositories {
    mavenCentral()
    mavenLocal()
//  need this for rest.li/pegasus 28.* artifacts until they are in Maven Central:
    maven {
      url 'https://linkedin.jfrog.io/artifactory/open-source'
    }
  }
}

4.3.2修改node配置

没修改之前,我安装了几次都是因为此处下载失败,修改配置禁止下载,将使用已经安装好的nodejs进行编译,如果你没修改也能安装成功,请留言告诉我。

#修改nodejs,将download = true 改成download = false,使用本机已经安装好了的nodejs进行编译
[root@azkaban azkaban-4.0.0]# vim azkaban-web-server/build.gradle

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}")
}

4.3.3修改MySQLDataSource.java

#修改MySQLDataSource.java,让其既支持Mysql5.x又支持Mysql8.x
[root@azkaban azkaban-4.0.0]# vim 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又支持Mysql8.x
    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);
  }

4.4编译azkaban

#查看版本
[root@azkaban azkaban-4.0.0]# ./gradlew -v
Downloading file:/root/azkaban-4.0.0/gradle/wrapper/gradle-4.6-all.zip
.....................................................................................................
Unzipping /root/.gradle/wrapper/dists/gradle-4.6-all/baqc8d04fxhbjwebb7dw6hpb7/gradle-4.6-all.zip to /root/.gradle/wrapper/dists/gradle-4.6-all/baqc8d04fx
hbjwebb7dw6hpb7Set executable permissions for: /root/.gradle/wrapper/dists/gradle-4.6-all/baqc8d04fxhbjwebb7dw6hpb7/gradle-4.6/bin/gradle

------------------------------------------------------------
Gradle 4.6
------------------------------------------------------------

Build time:   2018-02-28 13:36:36 UTC
Revision:     8fa6ce7945b640e6168488e4417f9bb96e4ab46c

Groovy:       2.4.12
Ant:          Apache Ant(TM) version 1.9.9 compiled on February 2 2017
JVM:          1.8.0_371 (Oracle Corporation 25.371-b11)
OS:           Linux 3.10.0-1160.el7.x86_64 amd64



#执行编译,编译过程中,如果下载失败中断,多执行几次以下命令即可,直到编译完成。
[root@azkaban azkaban-4.0.0]# ./gradlew distTar -x test
...
BUILD SUCCESSFUL in 1m 16s
56 actionable tasks: 9 executed, 47 up-to-date

注意
注意

注意如果编译缓慢,建议加上 -x test 选项。在安装了nodejs的情况下,且正确配置了环境变量,编译如果仍然报关于npm的错,建议重启虚拟机,再次编译,就不会报错。如果一直卡在一个地方,建议ctrl + c中断,再次执行,多试几次,会快很多。

4.5 查看编译完成生成的tar包

[root@azkaban azkaban-4.0.0]# find ./ -name '*tar.gz'
./az-crypto/build/distributions/az-crypto-0.1.0-SNAPSHOT.tar.gz
./az-hadoop-jobtype-plugin/build/distributions/az-hadoop-jobtype-plugin-0.1.0-SNAPSHOT.tar.gz
./az-hdfs-viewer/build/distributions/az-hdfs-viewer-0.1.0-SNAPSHOT.tar.gz
./az-jobsummary/build/distributions/az-jobsummary-0.1.0-SNAPSHOT.tar.gz
./az-reportal/build/distributions/az-reportal-0.1.0-SNAPSHOT.tar.gz
./azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz
./azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
./azkaban-hadoop-security-plugin/build/distributions/azkaban-hadoop-security-plugin-0.1.0-SNAPSHOT.tar.gz
./azkaban-solo-server/build/distributions/azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
./azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
./azkaban-web-server/.gradle/npm/npm-v5.6.0/lib/node_modules/npm/test/fixtures/github-com-BryanDonovan-dummy-npm-bar.git.tar.gz
./azkaban-web-server/.gradle/npm/npm-v5.6.0/lib/node_modules/npm/test/fixtures/github-com-BryanDonovan-dummy-npm-buzz.git.tar.gz
./azkaban-web-server/.gradle/npm/npm-v5.6.0/lib/node_modules/npm/test/fixtures/github-com-BryanDonovan-dummy-npm-foo.git.tar.gz
./azkaban-web-server/.gradle/npm/npm-v5.6.0/lib/node_modules/npm/test/fixtures/github-com-BryanDonovan-npm-git-test.git.tar.gz

4.6 拷贝tar包到一个目录下

[root@azkaban azkaban-4.0.0]# mkdir /root/azkaban

#我们只需要其中的几个包就可以了
[root@azkaban azkaban-4.0.0]# find ./ -name 'azkaban*tar.gz' -exec cp {} /root/azkaban/ \;
[root@azkaban azkaban-4.0.0]# ll /root/azkaban
总用量 188964
-rw-r--r-- 1 root root    10162 113 10:36 azkaban-db-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 63249653 113 10:36 azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root    24642 113 10:36 azkaban-hadoop-security-plugin-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 74060751 113 10:36 azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 56143275 113 10:36 azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

5 win10上编译azkaban-4.0.0

5.1安装java

5.1.1下载jdk

官网下载地址:Java Downloads | Oracle

请添加图片描述

5.1.2 安装jdk

找到下载的exe安装包,双击安装

请添加图片描述

直接下一步安装即可

安装完成

win+r 输入 cmd 回车

验证安装信息

请添加图片描述

5.2 安装git

官网下载地址:Git Download
请添加图片描述

请添加图片描述

安装包下载完成,双击安装即可
安装完成空白处鼠标右键出现Git Bash Here 表示成功
请添加图片描述

5.3 安装Node.js环境

node.js下载官网: https://nodejs.cn/download/
请添加图片描述
下载完双击安装即可

5.4 下载azkaban4.0.0源码包

官网 https://azkaban.github.io/
下载 https://github.com/azkaban/azkaban

请添加图片描述

5.5解压并修改源码包配置

5.5.1打开文件夹修改 build.gradle 仓库地址

请添加图片描述
修改后如下
在这里插入图片描述

5.5.2修改azkaban-4.0.0\azkaban-web-server\build.gradle

请添加图片描述

5.5.3修改MySQLDataSource.java

修改azkaban-4.0.0\azkaban-db\src\main\java\azkaban\db\MySQLDataSource.java,使其既支持Mysql5.x 又支持Mysql8.x
请添加图片描述

5.6 编译azkaban

打开文件夹,右键 Git Bash Here
请添加图片描述

输入命令 ./gradlew distTar -x test
-x test 作用是跳过测试
请添加图片描述

等待编译完成,显示 SUCCESSFUL
请添加图片描述

编译完成后的安装包位置,主要把前4个拷贝出来即可

azkaban-4.0.0\azkaban-db\build\distributions\azkaban-db-0.1.0-SNAPSHOT.tar.gz
azkaban-4.0.0\azkaban-solo-server\build\distributions\azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
azkaban-4.0.0\azkaban-exec-server\build\distributions\azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
azkaban-4.0.0\azkaban-web-server\build\distributions\azkaban-web-server-0.1.0-SNAPSHOT.tar.gz

azkaban-4.0.0\az-hadoop-jobtype-plugin\build\distributions\az-hadoop-jobtype-plugin-0.1.0-SNAPSHOT.tar.gz
azkaban-4.0.0\az-reportal\build\distributions\az-reportal-0.1.0-SNAPSHOT.tar.gz
azkaban-4.0.0\az-hdfs-viewer\build\distributions\az-hdfs-viewer-0.1.0-SNAPSHOT.tar.gz
azkaban-4.0.0\az-jobsummary\build\distributions\az-jobsummary-0.1.0-SNAPSHOT.tar.gz
azkaban-4.0.0\az-crypto\build\distributions\az-crypto-0.1.0-SNAPSHOT.tar.gz

6 部署azkaban

Azkaban的部署有两种方式:

独立服务器(alone “solo-server”)模式

以及分布式多执行器(distributed multiple-executor)模式

  • 独立服务器模式:可以用于小规模的用例,使用嵌入H2数据库,Web-server和executor-server都在同一进程中运行。测试或学习azkaban,推荐这种模式。
  • 分布式多执行器模式:更适用于生产环境。官方推荐它的DB应该由具有主从模式的MySQL实例支持。在理想情况下,Web-server和executor-server应在不同的主机中运行,以便升级和维护,并提升azkaban的使用可靠性

6.1 独立模式部署

6.1.1解压安装包

[root@azkaban ~]# cd azkaban
[root@azkaban azkaban]# tar -xf azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz -C /opt/

6.1.2修改时区配置

#修改default.timezone.id=America/Los_Angeles 值为 Asia/Shanghai
[root@azkaban conf]# sed -i s#default.timezone.id=America/Los_Angeles#default.timezone.id=Asia/Shanghai# azkaban.properties

6.1.3启动验证

#solo-server模式下必须在azkaban-solo-server-0.1.0-SNAPSHOT 目录下才可以启动,其他目录启动会找不到数据库
[root@azkaban conf]# cd ..
[root@azkaban azkaban-solo-server-0.1.0-SNAPSHOT]# ./bin/start-solo.sh

6.1.4 网页访问

http://192.168.1.16:8081/

账号密码都是 azkaban,接下来就可以在上面创建项目,上传工作流的任务压缩包

停止服务

[root@azkaban azkaban-solo-server-0.1.0-SNAPSHOT]# ./bin/shutdown-solo.sh 
Killing solo-server. [pid: 71464], attempt: 1
shutdown succeeded

6.2 集群模式部署

该模式使用mysql数据库,Web Server和Executor Server 可以运行在不同的机器中,可以有一个或多个Executor Server,该模式适用于大规模应用

6.2.1安装包准备并解压

#解压三个tar包
[root@azkaban ~]# mkdir /opt/azkaban/
[root@azkaban ~]# cd azkaban
[root@azkaban azkaban]# tar -xf azkaban-db-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban
[root@azkaban azkaban]# tar -xf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban
[root@azkaban azkaban]# tar -xf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /opt/azkaban

[root@azkaban azkaban]# cd /opt/azkaban
[root@azkaban azkaban]# mv azkaban-exec-server-0.1.0-SNAPSHOT/ azkaban-exec-server
[root@azkaban azkaban]# mv azkaban-web-server-0.1.0-SNAPSHOT/ azkaban-web-server

6.2.2 部署mysql

6.2.2.1 卸载系统自带的DB软件
#检查系统自带的Mysql或mariadb,如果存在将其卸载。
[root@azkaban azkaban]# rpm -qa | egrep 'mariadb|mysql'
mariadb-libs-5.5.68-1.el7.x86_64

#卸载
[root@azkaban azkaban]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
6.2.2.2 下载mysql安装包并解压
#下载安装包
[root@azkaban azkaban]# cd /opt/
[root@azkaban opt]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.35-el7-x86_64.tar.gz

#mysql8 下载地址: https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.23-el7-x86_64.tar.gz

#解压
[root@azkaban opt]# tar -xf mysql-5.7.35-el7-x86_64.tar.gz 
[root@azkaban opt]# mv mysql-5.7.35-el7-x86_64 mysql
6.2.2.3 配置mysql环境
#创建mysql用户
[root@azkaban opt]# useradd mysql -s /sbin/nologin

#创建mysql相关目录,生产环境选择磁盘较大的目录进行配置
[root@azkaban opt]# mkdir -p /data/mysql/{data,logs,binlog}

#配置环境变量
[root@azkaban opt]# cat >> /etc/profile << 'EOF'

#set for MySQL
export MYSQL_HOME=/opt/mysql
export PATH=$PATH:$MYSQL_HOME/bin
EOF

#加载环境变量
[root@azkaban opt]# source /etc/profile
6.2.2.4 创建mysql配置文件
[root@azkaban opt]# cat > /etc/my.cnf << 'EOF'

#客户端配置,包括客户端连接mysql服务器的相关配置
[client]	
port = 3306
socket = /opt/mysql/mysqld.sock
default-character-set = utf8mb4

#MySQL命令行客户端的配置
[mysql]
#指定MySQL命令行提示符的格式。
prompt="\u@mysqldb \R:\m:\s [\d]> "	
#禁用自动补全功能
no-auto-rehash
#指定MySQL命令行客户端的默认字符集
default-character-set = utf8mb4

#MySQL服务器的配置
[mysqld]
#指定MySQL服务器运行的用户 (一般设置为mysql,需要提前创建mysql用户)
user = mysql
#指定MySQL服务器监听的端口号
port = 3306
socket = /opt/mysql/mysqld.sock
#禁用DNS反向解析
skip-name-resolve

# 设置字符编码
character-set-server = utf8
collation-server = utf8_general_ci

# 禁用软链接,禁止数据库用户删除或重名数据文件目录之外的文件。"ON"开启,"OFF"或0是禁用
symbolic-links=0

# 设置默认时区
#default-time_zone='+8:00'

#指定MySQL服务器的唯一标识
server_id = 8

# Directory
#安装目录
basedir = /opt/mysql
#数据存储目录
datadir = /data/mysql/data
#安全文件目录
secure_file_priv = /data/mysql/data
#PID文件的路径
pid-file = /opt/mysql/mysql.pid

#MySQL服务器的最大连接数
max_connections       = 1024
#最大连接错误数
max_connect_errors    = 100
#连接超时时间
wait_timeout          = 100
#最大允许数据包大小, azkaban所需属性,防止 Azkaban 连接 MySQL 阻塞
max_allowed_packet    = 1024M
#表缓存数量
table_open_cache      = 2048
#连接请求队列长度
back_log              = 600

#数据库可存中文
init_connect='SET NAMES utf8'

#指定MySQL服务器的默认存储引擎
default-storage-engine = innodb
#允许二进制日志中包含函数创建语句
log_bin_trust_function_creators = 1

# Log
#关闭通用查询日志
general_log=off
#general_log_file =  /data/mysql/logs/mysql.log
#错误日志的路径
log-error = /data/mysql/logs/error.log

# binlog
#指定二进制日志的路径和格式
log_bin = /data/mysql/binlog/mysql-binlog
binlog_format=mixed

#slowlog慢查询日志
slow_query_log = 1
slow_query_log_file = /data/mysql/logs/slow.log
long_query_time = 2
log_output = FILE
log_queries_not_using_indexes = 0

#global_buffers
innodb_buffer_pool_size = 2G
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
key_buffer_size = 64M

innodb_log_file_size = 2G
innodb_log_files_in_group = 2
innodb_data_file_path = ibdata1:20M:autoextend

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

[mysqldump]
#指定mysqldump工具使用快速导出模式
quick
#指定mysqldump工具允许的最大数据包大小为32M
max_allowed_packet = 32M
EOF
6.2.2.5 初始化mysql并启动
#将mysql相关内目录给mysql用户授权
[root@azkaban opt]# chown -R mysql.mysql /opt/mysql /data/

#初始化mysql
[root@azkaban opt]# mysqld --initialize --user=mysql --datadir=/data/mysql/data/ --basedir=/opt/mysql

#设置mysql快捷启动
[root@azkaban opt]# cp mysql/support-files/mysql.server /etc/init.d/mysqld

[root@azkaban opt]# vim /etc/init.d/mysqld
...
basedir=/usr/local/mysql
datadir=/data/mysql/data
...

:wq 保存退出

#添加可执行权限
[root@azkaban opt]# chmod +x /etc/init.d/mysqld

#启动mysql
[root@azkaban opt]# /etc/init.d/mysqld start
Starting MySQL.. SUCCESS! 
6.2.2.6 修改mysql初始密码并配置azkaban
#查看初始密码
[root@azkaban opt]# grep password /data/mysql/logs/error.log 
2023-11-03T08:15:35.044347Z 1 [Note] A temporary password is generated for root@localhost: g4ECLeEZUE.D

[root@azkaban opt]# mysql -uroot -p'g4ECLeEZUE.D'

root@mysqldb 16:24:  [(none)]> set PASSWORD = PASSWORD('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)

root@mysqldb 16:25:  [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

创建azkaban数据库

root@mysqldb 16:27:  [(none)]> create database azkaban;
Query OK, 1 row affected (0.00 sec)

创建azkaban用户并授权

root@mysqldb 16:28:  [(none)]> CREATE USER 'azkaban'@'%' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.00 sec)

root@mysqldb 16:29:  [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

创建azkaban库的表

root@mysqldb 16:29:  [(none)]> use azkaban;
Database changed
root@mysqldb 16:30:  [azkaban]> source /opt/azkaban/azkaban-db-0.1.0-SNAPSHOT/create-all-sql-0.1.0-SNAPSHOT.sql;

root@mysqldb 16:32:  [azkaban]> show tables;
+-----------------------------+
| Tables_in_azkaban           |
+-----------------------------+
| QRTZ_BLOB_TRIGGERS          |
| QRTZ_CALENDARS              |
| QRTZ_CRON_TRIGGERS          |
| QRTZ_FIRED_TRIGGERS         |
| QRTZ_JOB_DETAILS            |
| QRTZ_LOCKS                  |
| QRTZ_PAUSED_TRIGGER_GRPS    |
| QRTZ_SCHEDULER_STATE        |
| QRTZ_SIMPLE_TRIGGERS        |
| QRTZ_SIMPROP_TRIGGERS       |
| QRTZ_TRIGGERS               |
| active_executing_flows      |
| active_sla                  |
| execution_dependencies      |
| execution_flows             |
| execution_jobs              |
| execution_logs              |
| executor_events             |
| executors                   |
| image_ownerships            |
| image_rampup                |
| image_rampup_plan           |
| image_types                 |
| image_versions              |
| project_events              |
| project_files               |
| project_flow_files          |
| project_flows               |
| project_permissions         |
| project_properties          |
| project_versions            |
| projects                    |
| properties                  |
| ramp                        |
| ramp_dependency             |
| ramp_exceptional_flow_items |
| ramp_exceptional_job_items  |
| ramp_items                  |
| triggers                    |
| validated_dependencies      |
| version_set                 |
+-----------------------------+
41 rows in set (0.00 sec)

root@mysqldb 16:32:  [azkaban]> quit;
Bye
6.2.2.7 设置systemctl管理mysql
[root@azkaban opt]# cat > /usr/lib/systemd/system/mysql.service << 'EOF'
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF
6.2.2.8 加载配置并重启mysql
#关闭mysql
[root@azkaban opt]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS! 

#配置mysql开机自启
[root@azkaban opt]# systemctl daemon-reload 
[root@azkaban opt]# systemctl enable --now mysql.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/mysql.service to /usr/lib/systemd/system/mysql.service.
[root@azkaban opt]# systemctl status mysql.service 
● mysql.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; vendor preset: disabled)
   Active: active (running) since 五 2023-11-03 16:43:02 CST; 10s ago

6.2.3 配置 Executor Server

Executor Server 是处理工作流和作业的执行

6.2.3.1 修改配置
#修改Executor Server配置文件
[root@azkaban opt]# cd azkaban/azkaban-exec-server/conf/
[root@azkaban conf]# vim azkaban.properties
...
default.timezone.id=Asia/Shanghai
...
database.type=mysql
mysql.port=3306
mysql.host=192.168.1.16
mysql.database=azkaban
mysql.user=azkaban
mysql.password=123
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
6.2.3.2 分发 azkaban-exec-server 到其他节点
#如果有多个azkaban-exec,进行同步,此处供参考
rsync /opt/azkaban/azkaban-exec-server ...
6.2.3.3 启动 executor server
#启动服务,如果有多个executor server,所有节点全部启动:
[root@azkaban conf]# cd /opt/azkaban/azkaban-exec-server/
[root@azkaban azkaban-exec-server]# ./bin/start-exec.sh

#停止命令
./bin/shutdown-exec.sh
6.2.3.4 排错
#若在/opt/azkaban/azkaban-exec-server/ 目录下出现 executor.port 文件;或在azkaban数据库中的executors表中有我们所连接的主机名称和端口号,则说明启动成功!

#查看日志报错
Caused by: azkaban.utils.UndefinedPropertyException: Missing required property 'mysql.driverName'
#修改配置添加驱动,mysql5.7的驱动为com.mysql.jdbc.Driver,如果是mysql8则为 mysql.driverName=com.mysql.cj.jdbc.Driver,同时需要下载 mysql-connector-java-$version.jar 到lib目录下
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23.jar
[root@azkaban azkaban-exec-server]# vim conf/azkaban.properties

#添加mysql的驱动
mysql.driverName=com.mysql.jdbc.Driver

:wq 保存退出
#再次启动成功
[root@azkaban azkaban-exec-server]# ./bin/start-exec.sh
[root@azkaban azkaban-exec-server]# ll
总用量 36
drwxr-xr-x 3 root root    67 113 09:37 bin
drwxr-xr-x 2 root root    81 113 17:12 conf
-rw-r--r-- 1 root root     6 113 17:12 currentpid
drwxr-sr-x 2 root root     6 113 17:12 executions
-rw-r--r-- 1 root root     5 113 17:12 executor.port
-rw-r--r-- 1 root root 13050 113 17:15 executorServerLog__2023-11-03+17:12:27.out
drwxr-xr-x 2 root root  8192 113 09:37 lib
drwxr-xr-x 2 root root    36 113 17:00 logs
drwxr-xr-x 3 root root    22 113 09:37 plugins
drwxr-xr-x 2 root root     6 113 17:12 projects
drwxr-xr-x 2 root root     6 113 17:12 temp

查看是否激活

root@mysqldb 17:13:  [azkaban]> select * from executors;
+----+---------+-------+--------+
| id | host    | port  | active |
+----+---------+-------+--------+
|  1 | azkaban | 46031 |      0 |
+----+---------+-------+--------+
1 row in set (0.00 sec)

激活azkaban-exec

#激活方法有两种
#第一种,注意:命令中的 'azkaban' 是我的主机名
[root@azkaban azkaban-exec-server]# curl -G "azkaban:$(<./executor.port)/executor?action=activate" && echo
{"status":"success"}

#激活可以看到 active = '1'
root@mysqldb 17:17:  [azkaban]> select * from executors;
+----+---------+-------+--------+
| id | host    | port  | active |
+----+---------+-------+--------+
|  1 | azkaban | 46031 |      1 |
+----+---------+-------+--------+
1 row in set (0.00 sec)

#第二种,暴力激活,直接修改executors表的值
> update executors set active = '1';

6.2.4 配置 azkaban web server

6.2.4.1 修改配置文件
[root@azkaban azkaban-exec-server]# cd ../azkaban-web-server/conf/
[root@azkaban conf]# vim azkaban.properties 
...
default.timezone.id=Asia/Shanghai
...
database.type=mysql
#添加此行,同executor一样
mysql.driverName=com.mysql.jdbc.Driver
mysql.port=3306
mysql.host=192.168.1.16
mysql.database=azkaban
mysql.user=azkaban
mysql.password=123
mysql.numconnections=100
...
#删除MinimumFreeMemory此项,MinimumFreeMemory 默认是6G
#azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
6.2.4.2 启动 azkaban-web-server
#启动
[root@azkaban azkaban-web-server]# ./bin/start-web.sh

#停止命令
./bin/shutdown-web.sh
6.2.4.3 网页登录

http://192.168.1.16:8081/

用户密码 azkaban / azkaban
在这里插入图片描述

7 创建项目并上传任务包

7.1 创建两个文件

在这里插入图片描述

test.job 文件内容
type=command
command=sh test.sh

test.sh文件内容
echo 'hello world'

注意: sh文件的编码
在这里插入图片描述
注意右下角为 Unix(LF) ,可以通过鼠标右键点击转换

7.2 将文件夹打包成zip包

在这里插入图片描述

7.3 创建项目

请添加图片描述

7.4 上传zip包

请添加图片描述

7.5 执行任务运行

请添加图片描述

请添加图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.L-OAM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值