本节主要讲解Azkaban的安装、配置和使用。
源代码
一、集群规划
node01 | node02 | node03 |
exec | exec、mysql | web |
二、Gradle安装与配置
- 安装git和gcc(所有服务器都安装)
[root@node01 ~]# yum install -y git gcc*
- 下载node
地址:https://nodejs.org/download/release/v9.11.2/
版本:9.11.2 - 下载gradle4.6
下载地址:https://downloads.gradle-dn.com/distributions/gradle-4.6-bin.zip
存放目录:/u02
设置maven下载地址和存放地址:创建init.gradle文件
[root@node01 u02]# wget https://downloads.gradle-dn.com/distributions/gradle-4.6-bin.zip
[root@node01 u02]# unzip gradle-4.6-bin.zip
[root@node01 u02]# mv gradle-4.6 /u01/gradle-4.6
[root@node01 u01]# cd /u01/gradle-4.6
[root@node01 gradle-4.6]# mkdir repo user_home
[root@node01 gradle-4.6]# cd init.d
[root@node01 init.d]# vi init.gradle
allprojects {
repositories {
maven { url 'file:/u01/gradle-4.6/repo'}
mavenLocal()
maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
maven { name "Bstek" ; url "http://nexus.bsdn.org/content/groups/public/" }
mavenCentral()
}
buildscript {
repositories {
maven { name "Alibaba" ; url 'https://maven.aliyun.com/repository/public' }
maven { name "Bstek" ; url 'http://nexus.bsdn.org/content/groups/public/' }
maven { name "M2" ; url 'https://plugins.gradle.org/m2/' }
}
}
}
- 环境变量设置
在export PATH USER 之前添加
[root@node01 gradle-4.6]# vi /etc/profile
export GRADLE_HOME=/u01/gradle-4.6
export GRADLE_USER_HOME=/u01/gradle-4.6/user_home
export PATH=$PATH:$GRADLE_HOME/bin
[root@node01 gradle-4.6]# source /etc/profile
三、Azkaban编译
- 下载Azkaban
使用迅雷下载到本地,在上传。使用wget下载github的内容比较慢。
下载地址:https://codeload.github.com/azkaban/azkaban/tar.gz/3.90.0
[root@node01 u02]# tar -zxvf azkaban-3.90.0.tar.gz
[root@node01 u02]# cd azkaban-3.90.0
- 修改mysql版本
由于mysql使用的版本是8.0.22,故需要修改build.gradle文件(在azkaban-3.90.0目录下)的mysql版本,在107行。57、58行的hadoop和hive版本一定不要修改,否则编译会报错。
mysqlConnector : 'mysql:mysql-connector-java:8.0.22',
- 修改mysql驱动程序
修改azkaban-db模块下的azkaban.db的MYSQLDataSource.java的51行,修改mysql8.0的驱动。
目录:/u02/azkaban-3.90.0/azkaban-db/src/main/java/azkaban/db
setDriverClassName("com.mysql.cj.jdbc.Driver");
- 编译azkaban
[root@node01 azkaban-3.90.0]# gradle build -x test
问题:如果网络不是太好,在npm打包时会报错,如下:
What went wrong:
Execution failed for task ‘:azkaban-web-server:npmSetup’.
Process ‘command ‘/u02/azkaban-3.90.0/azkaban-web-server/build/nodejs/node-v8.10.0-linux-x64/bin/node’’ finished with non-zero exit 。
解决方法:修改azkaban-web-server目录下的build.gradle文件,注释掉node部分,不让打包程序下载npm,需要安装npm(root用户):node-v8.10.0-linux-x64.tar.gz,
下载地址:https://nodejs.org/download/release/v8.10.0/node-v8.10.0-linux-x64.tar.gz
安装方法:上传文件到u02目录;解压缩到u01目录;修改文件名;配置环境变量;
之后再次运行gradle 命令。
[root@node01 u02]# tar -zxvf node-v8.10.0-linux-x64.tar.gz -C /u01
[root@node01 u01]# cd /u01
[root@node01 u01]# mv node-v8.10.0-linux-x64 node-v8.10.0
[root@node01 u01]# vi /etc/profile
export NODE_HOME=/u01/node-v8.10.0
export PATH=$PATH:$NODE_HOME/bin
[root@node01 u01]# source /etc/profile
[root@node01 u01]# cd /u02
[root@node01 u02]# cd azkaban-3.90.0
[root@node01 azkaban-3.90.0]# cd azkaban-web-server
[root@node01 azkaban-web-server]# vi 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}")
//}
[root@node01 azkaban-web-server]# cd ..
[root@node01 azkaban-3.90.0]# gradle build -x test
[root@node01 azkaban-3.90.0]# cd azkaban-web-server
[root@node01 azkaban-web-server]# cd build
[root@node01 build]# cd dis*
[root@node01 distributions]# ls
azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban-web-server-0.1.0-SNAPSHOT.zip
[root@node01 azkaban-3.90.0]# cd azkaban-exec-server
[root@node01 azkaban-exec-server]# ls
build build.gradle src
[root@node01 azkaban-exec-server]# cd build
[root@node01 build]# ls
classes distributions libs resources tmp
[root@node01 build]# cd dis*
[root@node01 distributions]# ls
azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz azkaban-exec-server-0.1.0-SNAPSHOT.zip
- 复制文件。
根据服务器规划,将对应的文件复制到不同的服务器中。
复制azkaban-web-server-0.1.0-SNAPSHOT.tar.gz到u02目录下,并修改文件的所有者为jack
复制azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz文件到node01和node02服务器的u02目录下,并修改文件的所有者为jack。
分别解压缩放到/u01/azkaban/azkaban-web-server 和 /u01/azkaban/azkaban-exec-server目录下
[root@node01 azkaban-3.90.0]# pwd
/u01/azkaban-3.90.0
[root@node01 azkaban-3.90.0]# cp -r */build/distributions/*.tar.gz /u02
[root@node01 azkaban-3.90.0]# cd ..
[root@node01 u02]$ chown jack:jack azkaban-web-server-0.1.0-SNAPSHOT.tar.gz azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
[root@node01 u02]$ su jack
[jack@node01 u02]# tar -xvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /u01/azkaban
[jack@node01 u02]# scp azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz jack@node02:/u02
[jack@node01 u02]# ssh node02
[jack@node02 ~]# cd /u02
[jack@node02 u02]# tar -xvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz -C /u01/azkaban
[jack@node02 u02]# exit
[jack@node01 u02]# scp azkaban-web-server-0.1.0-SNAPSHOT.tar.gz jack@node03:/u02
[jack@node01 u02]# ssh node03
[jack@node03 ~]# cd /u02
[jack@node03 u02]# tar -xvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz -C /u01/azkaban
[jack@node03 u02]# exit
四、初始化数据库
- 用工具创建数据库azkaban,字符集:utf-8,排序规则:utf8_general_ci。
- 导入表,在Navicat 界面的工具类点击“新建查询”,选择数据库azkaban,将azkaban-db/build/sql目录下的sql下载,再复制到该界面,点击运行。或者通过导入sql也可以。
[jack@node01 u02]$ cd /u02/azkaban-3.90.0/azkaban-db/build/sql
[jack@node01 sql]$ ls
create-all-sql-0.1.0-SNAPSHOT.sql
五、Azkaban配置与启动
- 修改azkaban-exec-server的azkaban.properties文件:具体见附件
- 修改azkaban-web-server的azkaban.properties文件:具体见附件
- 修改azkaban-web-server的azkaban-users.xml文件:具体见附件
添加用户jack,密码jack - 启动azkaban-exec-server
[jack@node01 u01]# cd /u01/azkaban/azkaban-exec-server
[jack@node01 azkaban-exec-server]# ./bin/start-exec.sh
启动azkaban-exec-server后会生成executor.port文件,存放exec端口:******,需要激活。
[root@node01 azkaban-3.90.0]# curl http://node01:******/executor?action=activate
同样在node02相同的操作。
5. 启动azkaban-web-server
[jack@node03 u01]# cd /u01/azkaban/azkaban-web-server
[jack@node03 azkaban-web-server]# ./bin/start-web.sh
- Web访问:
地址:http://node03:6061/index
端口号在 azkaban.properties 文件中配置
六、Azkaban使用
上节开发了模拟用户行为数据的程序(jar 文件在第四节下载),本示例使用它在azkaban中定时运行。
- 编写shell文件
目录:存放在/u01/gmall/bin目录下
jar目录: /u01/gmall/jar
名称:logdata_collector.sh
权限:可执行
内容如下:
#!/bin/bash
pgmName=`basename $0`
pgmName=${pgmName##*/} # remove the path
pgmExt=${pgmName##*.} # get the extension
pgmName=${pgmName%.*} # get the program name
exeDate=`date +"%h_%d"` # get the execution date
jar_home=/u01/gmall/jar
USAGE="Usage: $pgmName.$pgmExt \n"
java -jar ${jar_home}/logdata-collector-1.0.0-jar-with-dependencies.jar
- 在windows下,创建zip文件
2.1 创建logdata_collector目录
2.2 创建logdata_collector.project文件,内容如下:
azkaban-flow-version: 2.0
2.3 创建logdata_collector.flow文件,内容如下:
nodes:
- name: logdata_collector
type: command
config:
command: /u01/gmall/bin/logdata_collector.sh
- 打包压缩为zip文件
- 登录azkaban,创建项目,输入项目名称,项目描述
项目名:logdata_collector
描述:logdata_collector - 上传打包的zip文件
- 设置定时任务
选择Execute Flow 按钮,弹出界面选择左下角的Schedule,设置运行时间,比如每天22点30分运行。点击Schedule即可。
电商数仓项目(一) 系统规划和配置
电商数仓项目(二) Maven 安装和hadoop-lzo编译
电商数仓项目(三) hadoop3.2.2 安装与配置
电商数仓项目(四) 模拟电商日志数据开发