说明:新建的虚拟机,系统很干净,根据部署需求安装相应的软件,针对每一步进行详细介绍,有坑的地方都进行了详细说明,以及排错方法。
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 3月 29 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 3月 29 2023 anaconda-ks.cfg
-rw-r--r-- 1 root root 139219380 11月 2 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 11月 2 12:42 gradle-4.6-all.zip
-rw-rw-r-- 1 root root 54708 3月 18 2021 gradle-wrapper.jar
-rw-rw-r-- 1 root root 736 11月 2 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 11月 3 10:36 azkaban-db-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 63249653 11月 3 10:36 azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 24642 11月 3 10:36 azkaban-hadoop-security-plugin-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 74060751 11月 3 10:36 azkaban-solo-server-0.1.0-SNAPSHOT.tar.gz
-rw-r--r-- 1 root root 56143275 11月 3 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 11月 3 09:37 bin
drwxr-xr-x 2 root root 81 11月 3 17:12 conf
-rw-r--r-- 1 root root 6 11月 3 17:12 currentpid
drwxr-sr-x 2 root root 6 11月 3 17:12 executions
-rw-r--r-- 1 root root 5 11月 3 17:12 executor.port
-rw-r--r-- 1 root root 13050 11月 3 17:15 executorServerLog__2023-11-03+17:12:27.out
drwxr-xr-x 2 root root 8192 11月 3 09:37 lib
drwxr-xr-x 2 root root 36 11月 3 17:00 logs
drwxr-xr-x 3 root root 22 11月 3 09:37 plugins
drwxr-xr-x 2 root root 6 11月 3 17:12 projects
drwxr-xr-x 2 root root 6 11月 3 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) ,可以通过鼠标右键点击转换