title: Azkaban系列
1、一个完整的数据分析系统通常都是由大量任务单元组成:
shell 脚本程序,java 程序,mapreduce 程序、hive 脚本等
2、各任务单元之间存在时间先后及前后依赖关系
3、为了很好地组织起这样的复杂执行计划,需要一个工作流调度系统来调度执行
例如,我们可能有这样一个需求,某个业务系统每天产生 20T原始数据,我们每天都要对其进行处理,处理步骤如下所示:
1、 通过 Hadoop 先将原始数据同步到 HDFS 上;
2、 借助 MapReduce 计算框架对原始数据进行清洗转换,生成的数据以分区表的形式存储 到多张 Hive 表中;
3、 需要对 Hive 中多个表的数据进行处理,得到一个明细数据 Hive 大表;
4、 将明细数据进行各种统计分析,得到结果报表信息;
5、 需要将统计分析得到的结果数据同步到业务系统中,供业务调用使用。
简单的任务调度:直接使用 linux 的 crontab 来定义;
复杂的任务调度:开发调度平台或使用现成的开源调度系统,比如 Ooize、Azkaban、DS小海豚、Airflow 等
市面上目前有许多工作流调度器
在 hadoop 领域,常见的工作流调度器有 Oozie, Azkaban,Cascading,Hamake、DS小海豚、Airflow等
下面的表格对上述四种 hadoop 工作流调度器的关键特性进行了比较,尽管这些工作流调度 器能够解决的需求场景基本一致,但在设计理念,目标用户,应用场景等方面还是存在显著 的区别,在做技术选型的时候,可以提供参考
对市面上最流行的两种调度器,给出以下详细对比,以供技术选型参考。总体来说,ooize 相比 azkaban 是一个重量级的任务调度系统,功能全面,但配置使用也更复杂。如果可以不 在意某些功能的缺失,轻量级调度器 azkaban 是很不错的候选对象。
详情如下:
功能
两者均可以调度 mapreduce,pig,java,脚本工作流任务
两者均可以定时执行工作流任务
工作流定义
Azkaban 使用 Properties 文件定义工作流
Oozie 使用 XML 文件定义工作流
工作流传参
Azkaban 支持直接传参,例如
i
n
p
u
t
O
o
z
i
e
支
持
参
数
和
E
L
表
达
式
,
例
如
{input} Oozie 支持参数和 EL 表达式,例如
inputOozie支持参数和EL表达式,例如{fs:dirSize(myInputDir)} strust2(ONGL)
定时执行
Azkaban 的定时执行任务是基于时间的
Oozie 的定时执行任务基于时间和输入数据
资源管理
Azkaban 有较严格的权限控制,如用户对工作流进行读/写/执行等操作
Oozie 暂无严格的权限控制
工作流执行
Azkaban 有两种运行模式,分别是 solo server mode(executor server 和 web server 部署在同一 台节点)和 multi server mode(executor server 和 web server 可以部署在不同节点)
Oozie 作为工作流服务器运行,支持多用户和多工作流
工作流管理
Azkaban 支持浏览器以及 ajax 方式操作工作流
Oozie 支持命令行、HTTP REST、Java API、浏览器操作工作流
Azkaban 是由 Linkedin 开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定 的顺序运行一组工作和流程。
Azkaban 定义了一种 KV 文件(properties)格式来建立任务之间的依赖关系,并提供一个易于 使用的 web 用户界面维护和跟踪你的工作流。
它有如下功能特点:
Web 用户界面
方便上传工作流
方便设置任务之间的关系
调度工作流
认证/授权(权限的工作)
能够杀死并重新启动工作流
模块化和可插拔的插件机制
项目工作区
工作流和任务的日志记录和审计
Azkaban Web 服务器:azkaban-web-server-2.5.0.tar.gz
Azkaban Excutor 执行服务器:azkaban-executor-server-2.5.0.tar.gz
Azkaban 初始化脚本文件:azkaban-sql-script-2.5.0.tar.gz
官网地址:https://azkaban.github.io/
将安装文件上传到集群,最好上传到安装 hive、sqoop 的机器上,方便命令的执行。并最好统一存放在某个目录下,新建 azkaban 目录,用于存放 azkaban 运行程序
tar -zxvf azkaban-web-server-2.5.0.tar.gz
tar -zxvf azkaban-executor-server-2.5.0.tar.gz
tar -zxvf azkaban-sql-script-2.5.0.tar.gz
解压并将sql的解压文件重新命名之后的文件如下:
进入MySQL:
[root@hadoop0 azkaban]# mysql -uroot -p111111
创建azkaban数据库
mysql> create database azkaban;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| azkaban |
| hivedb |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql> use azkaban;
Database changed
导入数据:
mysql> source /software/azkaban/azkaban-sql-2.5.0/create-all-sql-2.5.0.sql;
然后查看表:
最好是在 azkaban 目录下:
执行命令:
[root@hadoop0 azkaban]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]:
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
What is the name of your City or Locality?
[Unknown]:
What is the name of your State or Province?
[Unknown]:
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN correct?
[no]: y
Enter key password for
(RETURN if same as keystore password):
Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore keystore -destkeystore keystore -deststoretype pkcs12".
完成上述工作后,将在当前目录生成 keystore 证书文件,将 keystore 拷贝或者移动到 azkaban web 服务器根目录中:
[root@hadoop0 azkaban]# mv keystore azkaban-web-2.5.0/
cd azkaban-web-2.5.0/conf
修改配置文件:vim azkaban.properties
内容如下:
#Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/software/azkaban/azkaban-web-2.5.0/web/
default.timezone.id=Asia/Shanghai
#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/software/azkaban/azkaban-web-2.5.0/conf/azkaban-users.xml
#Loader for projects
executor.global.properties=/software/azkaban/azkaban-executor-2.5.0/conf/global.properties
azkaban.project.dir=/software/azkaban/projects
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=111111
mysql.numconnections=100
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=/software/azkaban/azkaban-web-2.5.0/keystore
jetty.password=111111
jetty.keypassword=111111
jetty.truststore=/software/azkaban/azkaban-web-2.5.0/keystore
jetty.trustpassword=111111
# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=
mail.host=
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
修改用户配置文件:vim azkaban-users.xml
进入到修改executor里面:
cd /software/azkaban/azkaban-executor-2.5.0/conf
同样vim azkaban.properties
#Azkaban
default.timezone.id=Asia/Shanghai
# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=/software/azkaban/azkaban-executor-2.5.0/plugins/jobtypes
#Loader for projects
executor.global.properties=/software/azkaban/azkaban-executor-2.5.0/conf/global.properties
azkaban.project.dir=/software/azkaban/projects
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=root
mysql.password=111111
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
export AZKABAN_WEB_HOME=/software/azkaban/azkaban-web-2.5.0
export AZKABAN_EXE_HOME=/software/azkaban/azkaban-executor-2.5.0
export PATH=$PATH:$AZKABAN_WEB_HOME/bin:$AZKABAN_EXE_HOME/bin
1、启动 web 服务器
azkaban-web-start.sh
执行成功:
停止命令:
azkaban-web-shutdown.sh
2、 启动执行服务器
azkaban-executor-start.sh
执行成功:
停止命名:
azkaban-executor-shutdown.sh
3、通过web页面查看
https://hadoop0:8443/
使用刚刚配置的admin用户登录
进入之后的页面为:
到此就代码Azkaban的安装完全成功了。
创建工程
创建成功之后:
点击upload:
注意要是zip的压缩包
点击Execute Flow执行
点击Execute执行
点击上图中的Details,查看打印结果:
在自己配置的Projects目录下面可以看到上传的项目:
创建工程
上传依赖文件
点击执行
点击Execute
执行结果:
可以点击Details看任务结果。
创建工程
上传压缩包
执行成功:
查看结果:
创建工程
上传文件
执行中:
执行完毕:
可以看到执行中和执行完毕颜色不同
到HDFS中查看运行结果:
1、依然使用3.1的案例
2、点击左下角的Schedule
如上设置的就是每1分钟执行一次。
3、点击Flow里面的名字观察结果
4、点击进去之后,点击Executions
5、点击最左下方的id可以看到具体的每次执行的结果
6、点击Job List就可以看到了
7、删除定时调度
8、在History里面也可以看到定时执行的历史过程。
Azkaban Web 服务器:azkaban-web-server-3.90.0
Azkaban Excutor 执行服务器:azkaban-exec-server-3.90.0.tar.gz
Azkaban 初始化脚本文件:azkaban-db-3.90.0.tar.gz
官网地址:https://azkaban.github.io/
将安装文件上传到集群,最好上传到安装 hive、sqoop 的机器上,方便命令的执行。并最好统一存放在某个目录下,新建 azkaban 目录,用于存放 azkaban 运行程序
[root@hadoop10 azkaban]# tar -zxvf azkaban-db-3.90.0.tar.gz
[root@hadoop10 azkaban]# tar -zxvf azkaban-exec-server-3.90.0.tar.gz
[root@hadoop10 azkaban]# tar -zxvf azkaban-web-server-3.90.0.tar.gz
解压:tar -zxvf
压缩:tar -zcvf
1、启动 MySQL
[root@hadoop10 azkaban]# mysql -uroot -p111111
2、(这一步不做也行,后面用root登录也可以)创建 azkaban 用户,任何主机都可以访问 azkaban ,密码是 111111
mysql> CREATE USER 'azkaban'@'%' IDENTIFIED BY '111111';
3、赋予 azkaban 用户增删改查权限
mysql> GRANT select,insert,update,delete ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;
4、创建 azkaban 表,并导入数据
mysql> create database azkaban;
mysql> use azkaban;
mysql> source /software/azkaban/azkaban-db-3.90.0/create-all-sql-0.1.0-SNAPSHOT.sql
mysql> show tables;
mysql> quit;
cd /software/azkaban/azkaban-exec-server-3.90.0/conf
[root@hadoop10 conf]# vim azkaban.properties
具体如下:
# Azkaban Personalization Settings
azkaban.name=Test
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=conf/azkaban-users.xml
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
# Where the Azkaban web server is located
azkaban.webserver.url=http://hadoop10:8081
executor.port=12321
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban plugin settings
azkaban.jobtype.plugin.dir=/software/azkaban/azkaban-exec-server-3.90.0/plugins/jobtypes
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=hadoop10
mysql.database=azkaban
mysql.user=azkaban
mysql.password=111111
mysql.numconnections=100
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
给hadoop10上面的exec文件夹复制到hadoop11和hadoop12
先到hadoop11和hadoop12创建对应的文件夹
[root@hadoop11 software]# mkdir -p /software/azkaban/azkaban-exec-server-3.90.0
[root@hadoop12 software]# mkdir -p /software/azkaban/azkaban-exec-server-3.90.0
在hadoop10上面进行复制操作
scp -r /software/azkaban/azkaban-exec-server-3.90.0 hadoop11:/software/azkaban
scp -r /software/azkaban/azkaban-exec-server-3.90.0 hadoop12:/software/azkaban
cd /software/azkaban/azkaban-exec-server-3.90.0/bin
在三台机器上面分别启动executor server
hadoop10节点:
[root@hadoop10 bin]# ll
total 8
drwxrwxr-x. 2 root root 55 Oct 20 16:42 internal
-rwxr-xr-x. 1 root root 214 Jun 2 2020 shutdown-exec.sh
-rwxr-xr-x. 1 root root 207 Jun 2 2020 start-exec.sh
[root@hadoop10 bin]# pwd
/software/azkaban/azkaban-exec-server-3.90.0/bin
[root@hadoop10 bin]# ./start-exec.sh
[root@hadoop10 bin]# jps
23797 Jps
23786 AzkabanExecutorServer
hadoop11节点:
[root@hadoop11 bin]# ll
total 8
drwxrwxr-x. 2 root root 55 Oct 20 17:48 internal
-rwxr-xr-x. 1 root root 214 Oct 20 17:48 shutdown-exec.sh
-rwxr-xr-x. 1 root root 207 Oct 20 17:48 start-exec.sh
[root@hadoop11 bin]# pwd
/software/azkaban/azkaban-exec-server-3.90.0/bin
[root@hadoop11 bin]# ./start-exec.sh
[root@hadoop11 bin]# jps
23427 AzkabanExecutorServer
23493 Jps
[root@hadoop11 bin]#
hadoop12节点:
[root@hadoop12 bin]# ll
total 8
drwxrwxr-x. 2 root root 55 Oct 20 17:48 internal
-rwxr-xr-x. 1 root root 214 Oct 20 17:48 shutdown-exec.sh
-rwxr-xr-x. 1 root root 207 Oct 20 17:48 start-exec.sh
[root@hadoop12 bin]# pwd
/software/azkaban/azkaban-exec-server-3.90.0/bin
[root@hadoop12 bin]# ./start-exec.sh
[root@hadoop12 bin]# jps
22769 AzkabanExecutorServer
22780 Jps
[root@hadoop12 bin]#
点击azkaban数据库,点击进去executors表,可以看到active的状态为0,表示未激活状态。
curl -G "hadoop10:12321/executor?action=activate" && echo
curl -G "hadoop11:12321/executor?action=activate" && echo
curl -G "hadoop12:12321/executor?action=activate" && echo
[root@hadoop10 bin]# curl -G "hadoop10:12321/executor?action=activate" && echo
{"status":"success"}
You have new mail in /var/spool/mail/root
[root@hadoop10 bin]# curl -G "hadoop11:12321/executor?action=activate" && echo
{"status":"success"}
[root@hadoop10 bin]# curl -G "hadoop12:12321/executor?action=activate" && echo
{"status":"success"}
[root@hadoop10 bin]# pwd
/software/azkaban/azkaban-exec-server-3.90.0/bin
[root@hadoop10 bin]#
再次查看mysql中的active状态
[root@hadoop10 bin]# cd /software/azkaban/azkaban-web-server-3.90.0/conf/
[root@hadoop10 conf]# vim azkaban.properties
[root@hadoop10 conf]# cat azkaban.properties
# Azkaban Personalization Settings
azkaban.name=Test
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=conf/azkaban-users.xml
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
jetty.use.ssl=false
jetty.maxThreads=25
jetty.port=8081
# Azkaban Executor settings
# mail settings
mail.sender=
mail.host=
# User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users.
# enduser -> myazkabanhost:443 -> proxy -> localhost:8081
# when this parameters set then these parameters are used to generate email links.
# if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used.
# azkaban.webserver.external_hostname=myazkabanhost.com
# azkaban.webserver.external_ssl_port=443
# azkaban.webserver.external_port=8081
job.failure.email=
job.success.email=
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=hadoop10
mysql.database=azkaban
mysql.user=azkaban
mysql.password=111111
mysql.numconnections=100
#Multiple Executor
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1
azkaban.executorselector.comparator.LastDispatched=1
azkaban.executorselector.comparator.CpuUsage=1
一些说明:
azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus
#StaticRemainingFlowSize:正在排队中的任务数
#CpuStatus:CPU 占用的资源情况
#MinimumFreeMemory:内存占用资源情况。注意哈,测试环境,需要将 MinimumFreeMemory 删除掉,否则它会认为集群资源不够,不执行滴。
cd /software/azkaban/azkaban-web-server-3.90.0/conf
vim azkaban-users.xml
修改用户配置文件:vim azkaban-users.xml
[root@hadoop10 bin]# pwd
/software/azkaban/azkaban-web-server-3.90.0/bin
[root@hadoop10 bin]# ll
total 8
drwxrwxr-x. 2 root root 50 Oct 20 16:45 internal
-rwxr-xr-x. 1 root root 211 Jun 2 2020 shutdown-web.sh
-rwxr-xr-x. 1 root root 123 Jun 2 2020 start-web.sh
[root@hadoop10 bin]# ./start-web.sh
可能遇到的问题:
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] com.google.inject.ProvisionException: Unable to provision, see the following errors:
1) Error in custom provider, java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at azkaban.webapp.AzkabanWebServerModule.createUserManager(AzkabanWebServerModule.java:93)
at azkaban.webapp.AzkabanWebServerModule.createUserManager(AzkabanWebServerModule.java:93)
while locating azkaban.user.UserManager
for the 8th parameter of azkaban.webapp.AzkabanWebServer.(AzkabanWebServer.java:165)
at azkaban.webapp.AzkabanWebServer.class(AzkabanWebServer.java:121)
while locating azkaban.webapp.AzkabanWebServer
1 error
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1028)
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1054)
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at azkaban.webapp.AzkabanWebServer.main(AzkabanWebServer.java:227)
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at azkaban.webapp.AzkabanWebServerModule.createUserManager(AzkabanWebServerModule.java:102)
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at azkaban.webapp.AzkabanWebServerModule$$FastClassByGuice$$2f44d056.invoke()
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ProviderMethod$FastClassProviderMethod.doProvision(ProviderMethod.java:264)
2021/10/20 18:13:34.436 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ProviderMethod$Factory.provision(ProviderMethod.java:401)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ProviderMethod$Factory.get(ProviderMethod.java:376)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:110)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:90)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:268)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
2021/10/20 18:13:34.437 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:194)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InjectorImpl$2$1.call(InjectorImpl.java:1019)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1085)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at com.google.inject.internal.InjectorImpl$2.get(InjectorImpl.java:1015)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] ... 2 more
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] Caused by: java.lang.reflect.InvocationTargetException
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at azkaban.webapp.AzkabanWebServerModule.createUserManager(AzkabanWebServerModule.java:99)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] ... 24 more
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] Caused by: java.lang.IllegalArgumentException: User xml file conf/azkaban-users.xml doesn't exist.
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at azkaban.user.XmlUserManager.parseXMLFile(XmlUserManager.java:97)
2021/10/20 18:13:34.438 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at azkaban.user.XmlUserManager.(XmlUserManager.java:81)
2021/10/20 18:13:34.439 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] at azkaban.user.XmlUserManager.(XmlUserManager.java:75)
2021/10/20 18:13:34.439 +0800 ERROR [StdOutErrRedirect] [main] [Azkaban] ... 29 more
重点就是这一句:
Caused by: java.lang.IllegalArgumentException: User xml file conf/azkaban-users.xml doesn't exist.
给相应的路径改成绝对路径:
user.manager.xml.file=/software/azkaban/azkaban-web-server-3.90.0/conf/azkaban-users.xml
再次启动就可以了
[root@hadoop10 bin]# ./start-web.sh
[root@hadoop10 bin]# jps
35524 Jps
35493 AzkabanWebServer
23786 AzkabanExecutorServer
[root@hadoop10 bin]#
http://hadoop10:8081/
你会发现页面没有什么样式。这个时候给所有的路径改成绝对路径吧。
其实我这里就修改了web中的conf里面的
web.resource.dir=/software/azkaban/azkaban-web-server-3.90.0/web/
修改好了就变成了下面的样子了。就可以的啦。
见4.5.4 解决方案
操作的时候遇到的问题:
Job Logs
20-10-2021 19:05:58 CST command INFO - Starting job command at 1634727958034
20-10-2021 19:05:58 CST command INFO - job JVM args: '-Dazkaban.flowid=command' '-Dazkaban.execid=1' '-Dazkaban.jobid=command'
20-10-2021 19:05:58 CST command INFO - user.to.proxy property was not set, defaulting to submit user admin
20-10-2021 19:05:58 CST command INFO - Building command job executor.
20-10-2021 19:05:58 CST command INFO - Failed with 5 inputs with exception e = null
20-10-2021 19:05:58 CST command INFO - Memory granted for job command
20-10-2021 19:05:58 CST command INFO - 1 commands to execute.
20-10-2021 19:05:58 CST command INFO - cwd=/software/azkaban/azkaban-exec-server-3.90.0/bin/executions/1
20-10-2021 19:05:58 CST command INFO - effective user is: admin
20-10-2021 19:05:58 CST command ERROR - Job run failed!
azkaban.utils.UndefinedPropertyException: Missing required property 'azkaban.native.lib'
at azkaban.utils.Props.getString(Props.java:450)
at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:242)
at azkaban.execapp.JobRunner.runJob(JobRunner.java:830)
at azkaban.execapp.JobRunner.doRun(JobRunner.java:607)
at azkaban.execapp.JobRunner.run(JobRunner.java:568)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
20-10-2021 19:05:58 CST command ERROR - Missing required property 'azkaban.native.lib' cause: null
20-10-2021 19:05:58 CST command INFO - Finishing job command at 1634727958186 with status FAILED
解决方案:
1、去三个节点上面给azkaban.jobtype.plugin.dir改成具体路径
azkaban.jobtype.plugin.dir=/software/azkaban/azkaban-exec-server-3.90.0/plugins/jobtypes
2、vim commonprivate.properties ,增加azkaban.native.lib=false
[root@hadoop12 jobtypes]# pwd
/software/azkaban/azkaban-exec-server-3.90.0/plugins/jobtypes
[root@hadoop12 jobtypes]# cat commonprivate.properties
# set execute-as-user
execute.as.user=false
azkaban.native.lib=false
[root@hadoop12 jobtypes]#
原因分析:
azkaban默认情况下在开始运行job时会检测系统的内存,最低要求的内存是3G,如果系统内存不足3G,便会出现运行的job一直卡在那不动的情况。
解决方案:
1、增加系统内存
2、关闭检测内存的选项。
具体操作地方为:注意所有的exec节点都要修改。
在/software/azkaban/azkaban-exec-server-3.90.0/plugins/jobtypes目录下的commonprivate.properties的文件中添加一下内容:
memCheck.enabled=false
添加之后如下:
[root@hadoop10 jobtypes]# cat commonprivate.properties
# set execute-as-user
execute.as.user=false
azkaban.native.lib=false
memCheck.enabled=false
[root@hadoop10 jobtypes]#
添加后重启服务即可。
(1)启动exec
cd /software/azkaban/azkaban-exec-server-3.90.0/conf
(2)激活exec
curl -G "hadoop10:12321/executor?action=activate" && echo
curl -G "hadoop11:12321/executor?action=activate" && echo
curl -G "hadoop12:12321/executor?action=activate" && echo
(3)启动web
[root@hadoop10 bin]# ./start-web.sh
[root@hadoop10 bin]# pwd
/software/azkaban/azkaban-web-server-3.90.0/bin
最后:按照上面的文档安装遇不到上面的问题了,因为我给大家提供的配置就是修改之后的配置了。
声明:
文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。
B站: https://space.bilibili.com/1523287361 点击打开链接
微博地址: http://weibo.com/luoyepiaoxue2014 点击打开链接