天天看點

azkaban編譯安裝配置文檔

azkaban編譯安裝配置文檔

參考官方文檔: http://azkaban.github.io/azkaban/docs/latest/

azkaban的配置檔案說明:http://azkaban.github.io/azkaban/docs/latest/#configuration

本文擋主要參考azkaban的官方文檔。

在azkaban3.0 以後的版本,提供了3中安裝模式。單 solo-server mode, two server mode和multiple-executor mode。這三種模式的差別如下:

  • solo-server mode : 單機模式,

    輕量;使用内置的h2資料庫, web server 和 executor server在同一個程序裡,适合用于嘗試和了解azkaban的功能。

  • two server mode:雙機模式

    更嚴格,更重模式,适合生成環境;使用主從的mysql做存儲,web server 和 executor server在不同的程序中,跟新和更新時對使用者的影響較小。

  • multiple-executor mode:多個執行器模式

    該模式是最嚴格的生産環境。使用主從的mysql做存儲;理想情況下,Web伺服器(web server)和執行器(executor server)伺服器在不同的主機上運作,以便更新和維護不應影響使用者。 這個多主機設定為Azkaban帶來了強大而可擴充的功能。

一 、 solo 模式的安裝配置

可以按照如下步驟安裝azkaban的solo模式.

  1. 下載下傳克隆azkaban的git源碼

    git clone https://github.com/azkaban/azkaban.git

  2. 編譯目前最新版本的azkaban源碼
cd azkaban; 
./gradlew build installDist -x test  #跳過測試
           
  1. 啟動solo模式的azkaban服務
cd azkaban-solo-server/build/install/azkaban-solo-server; 
nohup sh bin/azkaban-solo-start.sh > ./azkaban-solo-start.log 2>&1 &
           

4.停止azkaban服務

bin/azkaban-solo-shutdown.sh

vi conf/azkaban-users.xml

檢視azkaban預設的登入使用者為: azkaban / azkaban

二 、 azkaban 的 multiple-executor 模式安裝

  1. 編譯azkaban源碼

    我們先從GitHub上克隆源碼,建構master分支下的代碼,即目前最新的版本。

git clone https://github.com/azkaban/azkaban.git
cd ./azkaban
./gradlew clean
./gradlew build installDist -x test  #跳過測試
           
  1. azkaban資料庫初始化
  • 在mysql上建立 azkaban的資料庫
    mysql> CREATE DATABASE azkaban;
     mysql> CREATE USER 'azkaban' IDENTIFIED BY 'azkaban!#@';
     mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON azkaban.* to 'azkaban' WITH GRANT OPTION;
               
  • 建立azkaban的資料庫的初始化表:
    ./azkaban-db/build/sql/create-all-sql-3.32.2.sql
               
  1. 安裝 azkaba的Web Server

    編譯後web server安裝包目錄位置 : azkaban-web-server/build/distributions/azkaban-web-server-3.32.2.tar.gz,編譯後的安裝包,解壓後,隻有bin,lib,web三個檔案夾。

    azkaban-web-server 應包含如下目錄:

Folder Description
bin 啟動Azkaban jetty server 的腳本
conf Azkaban的配置檔案,
lib Azkaban依賴的jar檔案
extlib 添加到extlib的其他jar将被添加到Azkaban的類路徑中
plugins 安裝插件的目錄
web The web (css, javascript, image) files for Azkaban web server.

conf 目錄下應該有如下檔案:

  • azkaban.properties - azkaban運作時參數,是設定Azkaban所需的主要配置檔案。
  • global.properties - 作為共享屬性傳遞給每個工作流和作業的全局靜态屬性
  • azkaban-users.xml - 用于添加使用者和角色進行身份驗證。 如果XmLUserManager未設定為使用該檔案,則不使用該檔案。

還需要建立conf,extlib,plugins檔案;以及conf目錄下的azkaban.properties,global.properties,azkaban-users.xml 3個配置檔案。

tar -zxvf azkaban-web-server-3.29.0.tar.gz
cd azkaban-web-server-3.32.2
mkdir conf
mkdir extlib
mkdir plugins
mkdir logs
touch conf/azkaban.properties
touch conf/global.properties
touch conf/azkaban-users.xml
touch conf/azkaban.private.properties
touch conf/log4j.properties
cp  mysql-connector-java-5.1.42-bin.jar ./extlib/
           
  • 擷取 KeyStore for SSL:Azkaban 可以用 SSL 網絡連接配接
##使用如下指令建立一個SSL密鑰
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
           
azkaban編譯安裝配置文檔

生成的 keystore SSL密鑰檔案放在azkaban-web-server-3.32.2目錄下即可。一旦keystore SSL密鑰檔案建立,需要在azkaban.properties中配置ssl相關的配置。

  • 下面一份azkaban-web-server的azkaban.propertiesp完整配置示例

    可以參考solo模式的配置檔案azkaban-solo-server/build/distributions/azkaban-solo-server-3.32.2/conf/azkaban.properties作為模闆

# Azkaban Personalization Settings
azkaban.name=mtime
azkaban.label=mtime bigdata scheduler system online
azkaban.color=#FF3601
#azkaban.color=#22DD6D
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai

# UserManager config
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.use.ssl=true
jetty.ssl.port=8993
jetty.maxThreads=25
jetty.port=8081

# Azkaban Executor settings
executor.host=mtime-bigdata01
executor.port=12321

# mail settings
[email protected]
mail.host=mail.mtime.com
[email protected]
mail.password=111112232
mail.tls=true
[email protected]
[email protected]

lockdown.create.projects=false
cache.directory=cache

# JMX stats
jetty.connector.stats=true
executor.connector.stats=true

# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes

#  KeyStore for SSL
jetty.keystore=keystore
jetty.password=mtimebigdata
jetty.keypassword=mtimebigdata
jetty.truststore=keystore
jetty.trustpassword=mtimebigdata

# Setting up the DB
database.type=mysql
mysql.port=3306
mysql.host=192.168.51.121
mysql.database=dmp
mysql.user=dmpuser
mysql.password=dmpuser123456
mysql.numconnections=100

#Multiple Executor Mode
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
           

vi log4j.properties

#OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL
#log4j.rootLogger=info,console,dailyLog
log4j.rootLogger=info,console

#---------------------------------------------------------------
####\u8f93\u51fa\u65e5\u5fd7\u5230\u63a7\u5236\u53f0
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold.console=info
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

#--------------------------------------------------------------------------------
 
log4j.logger.test=debug
log4j.logger.org.apache.spark.scheduler=ERROR

           

vi azkaban-users.xml

<azkaban-users>
  <user groups="azkaban" password="azkaban" roles="admin" username="azkaban"/>
  <user password="metrics" roles="metrics" username="metrics"/>

  <user groups="bi" username="zhaofuxin"  password="123456" roles="read,write,execute,schedule,createprojects"/>
  <user groups="test" username="test"  password="123456" roles="read"/>
  <user groups="test" username="test1"  password="123456" roles="read,write,execute"/>
  <user groups="test" username="test2"  password="123456" roles="read,write,execute,schedule"/>
  
  <role name="metrics" permissions="METRICS"/>
  <role name="admin" permissions="ADMIN"/>
  <role name="read" permissions="READ"/>
  <role name="write" permissions="WRITE"/>
  <role name="execute" permissions="EXECUTE"/>
  <role name="schedule" permissions="SCHEDULE"/>
  <role name="createprojects" permissions="CREATEPROJECTS"/>
</azkaban-users>
           

**4. **安裝 azkaba的Executor Server

編譯後web server安裝包目錄位置:azkaban-exec-server/build/distributions/azkaban-exec-server-3.32.2.tar.gz, 編譯後的安裝包,解壓後,隻有bin,lib三個檔案夾。

azkaban-exec-server 應包含如下目錄:

logs 日志目錄,系統自動建立
executions 執行日志目錄,系統自動建立
projects 項目目錄,系統自動建立

還需要建立conf,extlib,plugins檔案;以及conf目錄下的azkaban.properties 配置檔案。

  • 建立Executor Server下缺少的目錄和檔案
cd ~/azkaban/azkaban-exec-server-3.29.0
mkdir conf
mkdir extlib
mkdir plugins
mkdir logs
mkdir plugins/jobtypes
touch conf/global.properties
touch conf/azkaban.properties
touch conf/log4j.properties
touch plugins/jobtypes/commonprivate.properties
cp  mysql-connector-java-5.1.42-bin.jar ./extlib/
           
  • 配置Executor Server的配置資訊

    vi conf/azkaban.properties

# Azkaban Personalization Settings
default.timezone.id=Asia/Shanghai

# Loader for projects
executor.global.properties=conf/global.properties

azkaban.project.dir=projects

# JMX stats
jetty.connector.stats=true
executor.connector.stats=true

# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes

# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30

#Azkaban Executor port
executor.port=12321

# Setting up the DB
database.type=mysql
mysql.port=3306
mysql.host=192.168.51.121
mysql.database=dmp
mysql.user=dmpuser
mysql.password=dmpuser123456
mysql.numconnections=100
           

vi plugins/jobtypes/commonprivate.properties

# set execute-as-user
execute.as.user=false
#execute.as.user=true
#azkaban.native.lib=/home/hadoop/soft/azkaban/azkaban-web-server-3.29.0/bin
           
#OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL
#log4j.rootLogger=info,console,dailyLog
log4j.rootLogger=info,console

#---------------------------------------------------------------
####\u8f93\u51fa\u65e5\u5fd7\u5230\u63a7\u5236\u53f0
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold.console=info
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

#--------------------------------------------------------------------------------
log4j.logger.test=debug
log4j.logger.org.apache.spark.scheduler=ERROR

           
  • 如果要使用Multiple Executor 模式,需要在 webserver 的conf/azkaban.properties中配置如下資訊:
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
           

配置修改後需要在重新開機後才能生效。

  • 在資料庫中配置Multiple Executor 模式
insert into executors(host,port,active) values('192.168.17.50','12321','1');
insert into executors(host,port,active) values('192.168.17.51','12321','1');
insert into executors(host,port,active) values('192.168.17.52','12321','1');
           

**5. **啟動azkaban

先執行executor,再執行web,避免Web Server會因為找不到執行器啟動失敗。

  • 啟動executor

    分别到多個excuter節點的服務上啟動executor服務

cd azkaban-exec-server
sh bin/start-exec.sh
檢視logs下的日志檔案是否有錯誤

           
  • 啟動Web Server
bin/start-web.sh

沒有啟動了ssl,通路如下位址:
http://192.168.17.50:8081

啟動了ssl,通路如下位址:通路協定使用https,端口使用conf/azkaban.properties配置的jetty.ssl.port端口
https://192.168.17.50:8993
           

三、附錄-異常

  • 關于azkaban.native.lib的異常:
15-06-2017 19:05:03 CST hello1 ERROR - Job run failed!
azkaban.utils.UndefinedPropertyException: Missing required property 'azkaban.native.lib'
	at azkaban.utils.Props.getString(Props.java:426)
	at azkaban.jobExecutor.ProcessJob.run(ProcessJob.java:209)
	at azkaban.execapp.JobRunner.runJob(JobRunner.java:755)
	at azkaban.execapp.JobRunner.doRun(JobRunner.java:597)
	at azkaban.execapp.JobRunner.run(JobRunner.java:558)
	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:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
15-06-2017 19:05:03 CST hello1 ERROR - Missing required property 'azkaban.native.lib' cause: null
15-06-2017 19:05:03 CST hello1 INFO - Finishing job hello1 attempt: 0 at 1497524703532 with status FAILED
           
scp ./azkaban-common/src/main/c/execute-as-user.c  to  ${azkaban.native.lib}
gcc execute-as-user.c -o execute-as-user
chown root execute-as-user
chmod 6050 execute-as-user
           

vi azkaban-exec-server-3.29.0/plugins/jobtypes/commonprivate.properties

execute.as.user=true
azkaban.native.lib=/home/zhaofuxin/soft/azkaban/azkaban-web-server-3.29.0/bin
           
  • 郵件配置錯誤

    azkaban 任務執行時郵件發送不成功。主要是配置原因,郵件發送失敗的異常資訊會在web server 的log 檔案 webServerLog_20170621-130947.out的日志中列印,之前一直在excuter 的log和在job的運作日志中查問題,是以看不到異常。

    原因是郵件的tls沒有開啟,在 web server的 conf/azkaban.properties加入如下配置:

mail.tls=true
           
  • global.properties 沒有建立,但是azkaban.properties中配置了,會發生異常:
2017-09-25 16:13:00 [azkaban.utils.StdOutErrRedirect]-[ERROR] Exception in thread "main" 
2017-09-25 16:13:00 [azkaban.utils.StdOutErrRedirect]-[ERROR] com.google.inject.ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.io.FileNotFoundException: conf/global.properties (No such file or directory)
  at azkaban.execapp.FlowRunnerManager.<init>(FlowRunnerManager.java:155)
  at azkaban.execapp.AzkabanExecServerModule.configure(AzkabanExecServerModule.java:38)
  while locating azkaban.execapp.FlowRunnerManager
    for the 3rd parameter of azkaban.execapp.AzkabanExecutorServer.<init>(AzkabanExecutorServer.java:103)
  at azkaban.execapp.AzkabanExecServerModule.configure(AzkabanExecServerModule.java:36)
  while locating azkaban.execapp.AzkabanExecutorServer

           
  • bin/star-exec.sh 出現如下異常:
hadoop/apache-hadoop/hadoop/*
Starting AzkabanExecutorServer on port 12321
12321 ...
Error: Could not find or load main class 12321
           

原因是 conf/azkaban.properties 中 "executor.port=12321" 配置2遍,去掉一個即可。

  • log4j.properties 沒有配置出現如下異常:添加log4j配置後恢複正常
Starting AzkabanExecutorServer on port 12321 ...
Exception: java.lang.StackOverflowError thrown from the UncaughtExceptionHandler in thread "main"
           

作者:

丹江湖畔養蜂子的趙大爹

出處:http://www.cnblogs.com/honeybee/

關于作者:丹江湖畔養蜂子的趙大爹

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連結

繼續閱讀