Azkaban简介
之前已经比较详细的介绍过了 Azkaban,现在来简单介绍下 Azkaban 的安装。
Azkaban安装
安装包
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
下载地址:http://azkaban.github.io/downloads.html
解压安装包
[root@hadoop01 ~] tar -zxvf azkaban-web-server-2.5.0.tar.gz -C apps/ azkaban/
[root@hadoop01 ~] tar -zxvf azkaban-executor-server-2.5.0.tar.gz -C apps/ azkaban/
[root@hadoop01 ~] tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C apps/ azkaban/
Azkaban脚本导入
[root@hadoop01 ~] tar -zxvf azkaban-sql-script-2.5.0.tar.gz -C apps/ azkaban/
#进入MySQL执行脚本:
mysql> create database azkaban; Query OK, 1 row affected (0.01 sec)
mysql> use azkaban;
Database changed
mysql> source /home/hadoop/apps/azkaban/azkaban-script-2.5.0/create-all-sql-2.5.0.sql;
创建SSL配置
#最好是在azkaban 目录下:
[root@hadoop01 ~] keytool -keystore keystore -alias jetty -genkey -keyalg RSA
此命令执行之后会提示输入当前生成 keystore 的密码及相应信息,输入密码请劳记,信息如下:
[root@hadoop1 azkaban] keytool -keystore keystore -alias jetty -genkey -
keyalg RSA
Enter keystore password:
Re-enter new password:
What is your first and last name?
[Unknown]: firstName
What is the name of your organizational unit?
[Unknown]: companyName
What is the name of your organization?
[Unknown]: groupName
What is the name of your City or Locality?
[Unknown]: shanghai
What is the name of your State or Province?
[Unknown]: shanghai
What is the two-letter country code for this unit?
[Unknown]: CN
Is CN=firstName, OU=companyName, O=groupName, L=shanghai, ST=shanghai, C=CN correct?
[no]: Y
Enter key password for
(RETURN if same as keystore password):
然后将在当前目录生成 keystore 证书文件,将 keystore 拷贝到 azkaban web 服务器根目录中。如:
[root@hadoop01 ~] cp keystore azkaban/azkaban-web-2.5.0
修改配置文件
#先配置好服务器节点上的时区
#先生成时区配置文件 Asia/Shanghai,用交互式命令 tzselect 即可
#拷贝该时区文件,覆盖系统本地时区配置
[hadoop@hadoop01 ~]$ sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#azkaban web 服务器配置进入 azkaban web 服务器安装目录 conf 目录
[hadoop@hadoop01 ~]$ cd apps/azkaban/azkaban-web-2.5.0/conf/
修改 azkaban.properties 文件
#用户配置,具体配置参加下文
#Loader for projects # global 配置文件所在位置
executor.global.properties=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/conf/global.properties
azkaban.project.dir=projects
#数据库类型
database.type=mysql
#端口号
mysql.port=3306
#数据库连接IP
mysql.host=hadoop01
#数据库实例名
mysql.database=azkaban
#数据库用户名
mysql.user=root
#数据库密码
mysql.password=root
#最大连接数
mysql.numconnections=100
#Velocity dev mode velocity.dev.mode=false
#Jetty 服务器属性
#最大线程数
jetty.maxThreads=25
#Jetty SSL 端口
jetty.ssl.port=8443
#Jetty 端口
jetty.port=8081
#SSL 文件名
jetty.keystore=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/keystore
#SSL 文件密码
jetty.password=hadoop
#Jetty 主密码 与 keystore 文件相同
jetty.keypassword=hadoop
#SSL 文件名
jetty.truststore=/home/hadoop/apps/azkaban/azkaban-web-2.5.0/keystore
#SSL 文件密码
jetty.trustpassword=hadoop
#执行服务器属性
executor.port=12321 #执行服务器端口
#邮件设置(可选项)
mail.sender=xxxxxxxx@lyafei.com #发送邮箱
mail.host=smtp.lyafei.com #发送邮箱 smtp 地址
mail.user=xxxxxxxx #发送邮件时显示的名称
mail.password=********** #邮箱密码
job.failure.email=xxxxxxxx@lyafei.com #任务失败时发送邮件的地址
job.success.email=xxxxxxxx@lyafei.com #任务成功时发送邮件的地址
lockdown.create.projects=false
#cache.directory=cache #缓存目录
进入 azkaban web 服务器 conf 目录,修改 azkaban-users.xml 用户配置
azkaban 执行服务器 executor 配置,进入执行服务器安装目录 conf,修改 azkaban.properties
#
#Azkaban
default.timezone.id=Asia/Shanghai #时区
#Azkaban JobTypes 插件配置,插件所在位置
azkaban.jobtype.plugin.dir=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/plugins/jobtypes
#Loader for projects
executor.global.properties=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0/conf/global.properties azkaban.project.dir=projects
#数据库设置
#数据库类型(目前只支持 mysql)
database.type=mysql
#数据库端口号
mysql.port=3306
#数据库 IP 地址
mysql.host=hadoop01
#数据库实例名
mysql.database=azkaban
#数据库用户名
mysql.user=root
#数据库密码
mysql.password=root
#最大连接数
mysql.numconnections=100
#执行服务器配置
#最大线程数
executor.maxThreads=50
#端口号(如修改,请与 web 服务中一致)
executor.port=12321
#线程数
executor.flow.threads=30
配置环境变量
[hadoop@hadoop01 ~]$ vim /etc/profile
#/etc/profile
export AZKABAN_WEB_HOME=/home/hadoop/apps/azkaban/azkaban-web-2.5.0
export AZKABAN_EXE_HOME=/home/hadoop/apps/azkaban/azkaban-executor-2.5.0
export PATH=$PATH:$AZKABAN_WEB_HOME/bin:$AZKABAN_EXE_HOME/bin
启动
启动 web 服务器
nohup azkaban-web-start.sh 1>/home/hadoop/azwebstd.out 2>/home/hadoop/azweberr.out &
启动执行服务器
nohup azkaban-executor-start.sh 1>/home/hadoop/azexstd.out 2>/home/hadoop/azexerr.out &
在浏览器中输入:https://hadoop01:8443/
看到以上界面表示安装成功!!!
安装注意事项
绝对路径
web.resource.dir 项的值要使用绝对路径,否则 web 页面因为加载不到css样式,会没有美丽的界面
user.manager.xml.file 项的值要使用绝对路径,否则启动的时候会报找不到文件的错误
邮箱预警
mail.sender、mail.host、mail.user、mail.password 这四项每一项配置都不能少,端口可以不配置,而且 mail.sender 和 mail.user 的值是一样的,少一项或者配错一项都会报出错误,错误信息如下:
ERROR [EmailMessage] [Azkaban] Connecting to SMTP server failed, attempt: 0
javax.mail.AuthenticationFailedException: 500 Error: bad syntax
at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:823)
at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:756)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:673)
at javax.mail.Service.connect(Service.java:295)
at azkaban.utils.JavaxMailSender.connect(JavaxMailSender.java:34)
at azkaban.utils.EmailMessage.connectToSMTPServer(EmailMessage.java:220)
at azkaban.utils.EmailMessage.retryConnectToSMTPServer(EmailMessage.java:230)
at azkaban.utils.EmailMessage.sendEmail(EmailMessage.java:213)
at azkaban.utils.Emailer.sendEmail(Emailer.java:220)
at azkaban.utils.Emailer.alertOnSuccess(Emailer.java:153)
at azkaban.executor.selector.ExecutionControllerUtils.alertUser(ExecutionControllerUtils.java:123)
at azkaban.executor.ExecutionFinalizer.finalizeFlow(ExecutionFinalizer.java:98)
at azkaban.executor.RunningExecutionsUpdater.updateExecutions(RunningExecutionsUpdater.java:131)
at azkaban.executor.RunningExecutionsUpdaterThread.run(RunningExecutionsUpdaterThread.java:54)
plugins/jobtypes配置
azkaban.jobtype.plugin.dir=plugins/jobtypes 这一项一定要配置,并且创建文件夹,不然会报错,错误信息如下:
ERROR [FlowTriggerScheduler] [Azkaban] unable to get scheduled flow triggers
java.lang.NullPointerException
at azkaban.flowtrigger.quartz.FlowTriggerScheduler.getScheduledFlowTriggerJobs(FlowTriggerScheduler.java:132)
at azkaban.webapp.servlet.FlowTriggerServlet.handlePage(FlowTriggerServlet.java:140)
at azkaban.webapp.servlet.FlowTriggerServlet.handleGet(FlowTriggerServlet.java:55)
at azkaban.webapp.servlet.LoginAbstractAzkabanServlet.doGet(LoginAbstractAzkabanServlet.java:123)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)
at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:713)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.j
或者报 native executor not 存在。
Multiple Executor
Multiple Executor的几项必须配置,不然的话会报出以下错误:
ERROR [StdOutErrRedirect] [Azkaban] Exception in thread "main"
ERROR [StdOutErrRedirect] [Azkaban] java.lang.IllegalArgumentException: azkaban.use.multiple.executors must be true. Single executor mode is not supported any more.
ERROR [StdOutErrRedirect] [Azkaban] at azkaban.executor.ExecutorManager.checkMultiExecutorMode(ExecutorManager.java:240)
ERROR [StdOutErrRedirect] [Azkaban] at azkaban.executor.ExecutorManager.setupExecutors(ExecutorManager.java:229)
ERROR [StdOutErrRedirect] [Azkaban] at azkaban.executor.ExecutorManager.initialize(ExecutorManager.java:155)
ERROR [StdOutErrRedirect] [Azkaban] at azkaban.executor.ExecutorManager.start(ExecutorManager.java:168)
ERROR [StdOutErrRedirect] [Azkaban] at azkaban.webapp.AzkabanWebServer.launch(AzkabanWebServer.java:235)
ERROR [StdOutErrRedirect] [Azkaban] at azkaban.webapp.AzkabanWebServer.main(AzkabanWebServer.java:226)
executor
如果web启动报错,没有活跃得executor,那么需要去数据库中手动修改native状态为1。
Mysql权限
咱们使用MySQL都会有特殊的权限限制,能通过特定的用户,但是经过几次的安装集群后发现,最初hadoop平台搭建的时候,这个MySQL的授权操作还得自己来。
只有拥有特定权限的用户才能执行特定的操作。
GRANT SELECT,INSERT,UPDATE,DELETE ON .* to ''@'%' WITH GRANT OPTION;
#privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
#databasename:数据库名
#tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如 *.*
#授权之后一般都会刷新该操作:
flush privileges;
#撤销授权:
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
derby
如果出现以下报错:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.derby.jdbc.AutoloadedDriver40
原因是:在 azkaban 的 server 和 executor 中缺少一个叫 derby.jar 的包,解决办法如下:
cp $JAVA_HOME/db/lib/derby.jar $AZKABAN_WEB_HOME/extlib
cp $JAVA_HOME/db/lib/derby.jar $AZKABAN_EXE_HOME/extlib
此处评论已关闭