安裝規划
IP | 角色 | 端口 |
---|---|---|
10.31.1.88 | azkaban web server | https://10.31.1.88:8443 http://10.31.1.88:8081 |
10.31.1.89 | executor | |
10.31.1.90 | executor |
安裝azkban
1.安裝配置數據庫
1.安裝mysql
略
2.為azkaban創建數據庫和用戶,並授權
mysql> CREATE DATABASE azkaban;
mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL ON <database>.* to '<username>'@'%' WITH GRANT OPTION;
3.修改mysql配置文件 /etc/my.cf
[mysqld]
…
max_allowed_packet=1024M
設置最大傳輸包.然后重啟mysql
$ sudo /sbin/service mysqld restart
4.創建azkaban表
執行安裝包目錄下的sql目錄中的所有文件,不包括以update開頭的:
mysql> source create.executors.sql
2.下載安裝web server
1.下載源碼包
在http://azkaban.github.io/downloads.html 下載azkaban的source包,然后按以下步驟編譯:
# Build Azkaban
./gradlew build
# Clean the build
./gradlew clean
# Build and install distributions
./gradlew installDist
# Run tests
./gradlew test
# Build without running tests
./gradlew build -x test
編譯完成后目錄如下:
標紅框的三個是要用到的,分別是exector\solo-server\webserver.
其中solo-server包含的azkaban的配置文件:
打開azkaban-master/azkaban-solo-server/build/install/azkaban-solo-server目錄,下面就是編譯好的soloserver:
將下面的conf\plugins\sql復制到
azkaban-webserver所在的目錄:azkaban-master/azkaban-web-server/build/install/azkaban-web-server
將下面的conf\plugins復制到
azkaban-executor所在的目錄:azkaban-master/azkaban-exec-server/build/install/azkaban-exec-server
然后將azkaban-webserver目錄分別壓縮成azkaban-webserver.gz和azkaban-exec-server.gz,分發到要裝webserver和executor的機器上.
AZKABAN的目錄結構:
在conf目錄下有以下配置文件:
azkaban.properties
- Azkaban運行時參數,主配置文件global.properties
- 全局靜態參數,每個workflow和job都可以讀取azkaban-users.xml
- 用戶驗證文件。使用XmLUserManager
時才需要使用這個文件
2.配置SSL
a.生成keystore
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
所有輸入都寫azkaban
b.配置azkaban.properties中SSL的設置
修改password,並將創建的keystore文件復制到webserver目錄下
jetty.keystore=keystore #設置key位置
jetty.password=password
jetty.keypassword=password
jetty.truststore=keystore
jetty.trustpassword=password
3.設置數據庫連接信息
在azkaban.properties:
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
4.配置azkaban用戶
在azkaban.properties,設置用戶管理使用類,及用戶配置的xml
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=conf/azkaban-users.xml
在azkaban-users.xml中設置用戶:
6.設置web server的端口
jetty.maxThreads=25
jetty.ssl.port=8443
executor.port=12321
設置executor連接webserver的端口
執行bin/azkaban-web-start.sh
啟動web server,訪問https://xxx.xxx.xxx.xxx:8443 訪問web頁面
目前https端口沒啟動成功,請使用http://10.31.1.88:8081
3.安裝mulit executor
1.executor的目錄結構
executor只有一個配置文件conf/azkaban.propertie
2.數據庫設置
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
3.設置executorclient
executor做為client連接到webserver
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
4.設置azkaban以mulitexecutor方式執行.
在webserver
的配置文件中添加:
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
5.在數據庫中添加executor信息
將所有的executor的信息都寫入數據庫中:
insert into executors(host,port) values("EXECUTOR_PORT",EXECUTOR_PORT);
經驗證,不需要手動插入executor信息
6.啟動所有的exectuor
bin/azkaban-executor-start.sh
4.安裝azkaban插件
具體參考官方文檔.略.
AZKABAN參數
參考:http://azkaban.github.io/azkaban/docs/latest/#configuration
重要參數:
參數 | 說明 | 默認值 |
---|---|---|
executor.flow.threads | 同時最多執行的flow的個數 | 30 |
job.log.chunk.size | 日志量達到多大時向下滾動 | 5MB |
flow.num.job.threads | 每個flow並行執行的最大job數 | 10 |
job.max.Xms | 每個job可以請求的最大初始內存,超過這個內存azkaban將不啟動job | 1GB |
job.max.Xmx | 每個job可以請求的最大內存,超過這個內存azkaban將不啟動該job | 2GB |
azkaban.server.flow.max.running.minutes | flow最長執行時間,超過個時間將會被kill掉,0或者負數不限制時間 | -1 |
default.timezone | azkaban的時區 | America/Los_Angeles |
jetty.maxThreads | webserver處理的最大請求隊列,即連個的executoserver個數 | 25 |
lockdown.create.projects | 是否只有管理員可以創建project | false |
lockdown.upload.projects | 是否只有管理員可以上傳project zip | false |
azkaban.use.multiple.executors | azkaban是否以multi-executor運行,需要多個executor支持 | false |
azkaban.executorselector.filters | 根據何種過濾器選擇executor | |
azkaban.executorselector.comparator.{ComparatorName} | executor比較器 |
安裝出現的問題
1.webserver啟動異常"No active executor found"
修改數據庫executors表中的active字段為1,並且在關閉exector時使用kill -9,不能使用azkaban-executor_shutdown.sh,否則要重新設置executors表中的active字段為1.
2.執行azkaban任務時,executor報錯,但不影響任務的執行:
2017-07-27 16:09:49 INFO ExecutorServlet:115 - User has called action log on 3
2017-07-27 16:09:49 ERROR ExecutorServlet:186 - Running flow 3 not found.
azkaban.executor.ExecutorManagerException: Running flow 3 not found.
at azkaban.execapp.FlowRunnerManager.readFlowLogs(FlowRunnerManager.java:472)
at azkaban.execapp.ExecutorServlet.handleFetchLogEvent(ExecutorServlet.java:183)
at azkaban.execapp.ExecutorServlet.doGet(ExecutorServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
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.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
這個問題在github有人提出同樣問題,可能是azkaban的一個bug.
https://github.com/azkaban/azkaban/issues/1128
3.無法啟動https端口
沒有報任何錯誤,但無法啟動https.
4.啟動報錯:
參考:http://blog.csdn.net/daiyutage/article/details/69526021
Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"
原因:缺少log4j.properties
解決辦法:
在Azkaban-web-server 的conf目錄下創建文件夾conf/log4j.properties:
寫入以下內容
log4j.rootLogger=INFO,C
log4j.appender.C=org.apache.log4j.ConsoleAppender
log4j.appender.C.Target=System.err
log4j.appender.C.layout=org.apache.log4j.PatternLayout
log4j.appender.C.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
5.啟動報錯
2017-08-16 16:49:25 INFO log:67 - jetty-6.1.26
2017-08-16 16:49:25 INFO ProjectManagerServlet:134 - downloadBufferSize: 8192
2017-08-16 16:49:25 INFO RestLiAnnotationReader:1829 - Processed actions resource 'azkaban.restli.UserManagerResource'
2017-08-16 16:49:25 INFO RestLiAnnotationReader:1829 - Processed actions resource 'azkaban.restli.ProjectManagerResource'
2017-08-16 16:49:25 WARN log:76 - failed SslSocketConnector@0.0.0.0:8443: java.io.FileNotFoundException: /opt/azkaban3/azkaban-web-server/keystore #设置keyä½ç½® (No such file or directory)
2017-08-16 16:49:25 WARN log:76 - failed Server@2f6e28bc: java.io.FileNotFoundException: /opt/azkaban3/azkaban-web-server/keystore #设置keyä½ç½® (No such file or directory)
2017-08-16 16:49:25 WARN AzkabanWebServer:513 - java.io.FileNotFoundException: /opt/azkaban3/azkaban-web-server/keystore #设置keyä½ç½® (No such file or directory)
2017-08-16 16:49:25 ERROR StdOutErrRedirect:56 - /opt/azkaban3/azkaban-web-server/keystore #设置keyä½ç½® (No such file or directory)
無解.不啟動ssl就可以了.
默認是啟動ssl的,在azkaban.properties中設置
jetty.use.ssl=false
默認是true