以Multi Executor Server部署Azkaban
mysql准备
create database for Azkaban.
1
2mysql> CREATE DATABASE azkaban;
Query OK, 1 row affected (0.00 sec)create a mysql user for Azkaban.
1
2
3
4
5mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban123';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)修改mysql配置my.cnf
1
2
3[mysqld]
...
max_allowed_packet=1024M重启mysql
安装
创建安装目录
1
2[hadoop@hadoop001 ~]$ cd software/
[hadoop@hadoop001 software]$ mkdir azkaban在编译成功的目录下获取以下三个需要的tar包
1
2
3[hadoop@hadoop001 azkaban-master]$ cp azkaban-web-server/build/distributions/azkaban-web-server-0.1.0-SNAPSHOT.tar.gz ~/software/azkaban
[hadoop@hadoop001 azkaban-master]$ cp azkaban-exec-server/build/distributions/azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz ~/software/azkaban
[hadoop@hadoop001 azkaban-master]$ cp azkaban-db/build/distributions/azkaban-db-0.1.0-SNAPSHOT.tar.gz ~/software/azkaban解压并重命名
1
2
3
4
5
6
7
8
9
10
11
12
13
14[hadoop@hadoop001 azkaban]$ ll
total 119840
-rw-rw-r--. 1 hadoop hadoop 8864 Feb 16 13:30 azkaban-db-0.1.0-SNAPSHOT.tar.gz
-rw-rw-r--. 1 hadoop hadoop 64787133 Feb 16 09:24 azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
-rw-rw-r--. 1 hadoop hadoop 57896671 Feb 16 09:25 azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
drwxr-xr-x. 2 hadoop hadoop 4096 Jan 25 17:53 db
drwxr-xr-x. 10 hadoop hadoop 4096 Feb 16 17:28 exec
drwxr-xr-x. 8 hadoop hadoop 4096 Feb 16 17:28 web
[hadoop@hadoop001 azkaban]$ tar -xzvf azkaban-db-0.1.0-SNAPSHOT .tar.gz
[hadoop@hadoop001 azkaban]$ mv azkaban-db-0.1.0-SNAPSHOT db
[hadoop@hadoop001 azkaban]$ tar -xzvf azkaban-exec-server-0.1.0-SNAPSHOT.tar.gz
[hadoop@hadoop001 azkaban]$ mv azkaban-exec-server-0.1.0-SNAPSHOT exec
[hadoop@hadoop001 azkaban]$ tar -xzvf azkaban-web-server-0.1.0-SNAPSHOT.tar.gz
[hadoop@hadoop001 azkaban]$ mv azkaban-web-server-0.1.0-SNAPSHOT web创建软连接
1
[hadoop@hadoop001 azkaban]$ ln -s /home/hadoop/software/azkaban /home/hadoop/app/azkaban
mysql脚本导入
导入sql脚本,批量创建表
1
mysql> source /home/hadoop/software/azkaban/db/create-all-sql-0.1.0-SNAPSHOT.sql
Installing Azkaban Executor Server
修改exec目录下
conf/azkaban.properties
:1
2
3# Mysql Configs
mysql.user=<username>
mysql.password=<password>在azkaban-web-server中的azkaban.properties添加:
1
2
3
4
5
6
7#Multiple Executor
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1启动Executor Server:在下面的步骤统一启动。注意,在Multi Executor Server模式下启动了Executor Server后,需要手动激活其状态。
Installing Azkaban Web Server
修改web目录下
conf/azkaban.properties
:1
2
3# Mysql Configs
mysql.user=<username>
mysql.password=<password>添加用户,修改
conf/azkaban-users.xml
,如:1
<user password="admin" roles="admin" username="admin"/>
启动
因为配置文件下的路径是使用相对路径,所以启动需要进入到其目录下调用命令,具体如下:。
【注意】需要先启动并激活Executor,才能启动web成功。
启动Executor Server,并激活。
1 | [hadoop@hadoop001 exec]$ pwd |
启动Web Server
1 | [hadoop@hadoop001 web]$ pwd |
查看进程,访问UI页面
1 | [hadoop@hadoop001 web]$ jps |
Web UI:http://hadoop001:8081/
azkaban project案例
文件准备
flow20.project
1
azkaban-flow-version: 2.0
spring.flow
1
2
3
4
5nodes:
- name: hello
type: command
config:
command: echo "hello world"
把以上两个文件夹放到同一个文件夹下,并压缩为zip文件,上传到project上执行即可。
优化
更换日志文件目录
修改 azkaban-web-server/conf/log4j.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 默认为INFO, Console 需要修改
log4j.rootLogger=INFO, server
log4j.logger.azkaban=INFO, server
log4j.appender.server=org.apache.log4j.RollingFileAppender
log4j.appender.server.layout=org.apache.log4j.PatternLayout
# 修改为绝对路径
log4j.appender.server.File=/home/hadoop/log/azkaban/azkaban-webserver.log
log4j.appender.server.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS Z} %5p [%c{1}] [%t] [Azkaban] %m%n
# 修改为1024MB,默认为102400MB,显然是不合理的
log4j.appender.server.MaxFileSize=1024MB
log4j.appender.server.MaxBackupIndex=2
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss.SSS Z} %5p [%c{1}] [%t] [Azkaban] %m%nweb-server和exec-server启停脚本的修改
优化点:
因为启动web-server和exec-server,在哪个目录下执行启动服务,就会生成一个
.out
日志文件。由于已经更改日志文件存储目录,于是修改azkaban-web-server的bin/start-web.sh
和azkaban-exec-server的bin/start-exec.sh
exec-server的临时文件
启动exec-server,在哪个目录下执行启动服务,就会生成
executions
目录、temp
目录和executor.port
文件这些临时的目录或文件,然后停止服务后,也不会删除这些临时目录或文件,于是:在
azkaban/azkaban-exec-server
目录下新建tmp
目录用于存放这些临时目录或文件;激活executor(修改后启动后自动激活)
修改后脚本:
start-web.sh:
1
2
3
4
5
6#!/bin/bash
script_dir=$(dirname $0)
#${script_dir}/internal/internal-start-web.sh >webServerLog_`date +%F+%T`.out 2>&1 &
${script_dir}/internal/internal-start-web.sh >/dev/null 2>&1 &start-exec.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#!/bin/bash
#script_dir=$(dirname $0)
script_dir=/home/hadoop/app/azkaban/exec/tmp
cd ${script_dir}
# pass along command line arguments to the internal launch script.
#${script_dir}/internal/internal-start-executor.sh "$@" >executorServerLog__`date +%F+%T`.out 2>&1 &
../bin/internal/internal-start-executor.sh "$@" >/dev/null 2>&1 &
# 这里休眠5s是为了给exec-server启动后提供一些准备时间
sleep 5s
# 然后再激活executor
curl -G "hadoop001:$(<${script_dir}/executor.port)/executor?action=activate"
~
其他问题
Azkaban 部署完成后 执行 job 一直处于 Preparing 状态
主要原因:没有可运行的executor
可能:1.没激活;2.激活了但被过滤掉不可用。
azkaban默认情况下在开始运行job时会检测系统的内存,其最低要求的内存是3G,若系统内存不足3G,便会出现运行的job一直卡在那不动。
修改
azkaban-web-server/conf/azkaban.properties
1
2#MinimumFreeMemory 过滤器会检查 executor 主机空余内存是否会大于 3G,如果不足 3G,则 web-server 不会将任务交由该主机执行
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatusAzkaban异常:Cannot request memory (Xms 0 kb, Xmx 0 kb) from system for job XX, sleep for 60 secs and retry, attempt 1 of 72
azkaban默认情况下在开始运行job时会检测系统的内存,其最低要求的内存是3G,若系统内存不足3G,便会出现运行的job一直卡在那不动。
解决方法:
增加系统内存
关闭检测内存的选项。
具体办法为,在azkaban/azkaban-exec-server/plugins/jobtypes/
目录下的commonprivate.properties
的文件中添加一下内容:1
memCheck.enabled=false
jobtypes错误解决
在executor的根目录下创建
plugins\jobtypes\commonprivate.properties
1
2
3# set execute-as-user
execute.as.user=false
azkaban.native.lib=false