Azkaban Two Server模式部署

Azkaban Two Server模式部署

Two Server模式就是把Azkaban和MySQL進行了分離,下面就介紹一下這種部署模式。java

一、準備工做

1.結點規劃

node1:azkaban-web、azkaban-execnode

node2:MySQLmysql

這裏本人將azkaban的相關服務放置到一臺服務器中,將MySQL放置到另一臺服務器中。web

2.服務器準備

兩臺服務器,服務器系統這裏選擇的是CentOS7。一臺稱之爲node一、另一臺稱之爲node2。sql

  • 主機名稱修改:根據本身的需求修改。
  • 添加主機名解析:
  • 免密登陸:爲了不麻煩的操做,這裏本人配置了免密登陸。主機中若是安裝了hadoop等大數據相關的軟件,那麼確定已經配置過了。
  • 兩臺服務器都安裝jdk,jdk版本1.8以上。
  • 編譯源碼,參見:Azkaban源碼編譯,此處使用的是Azkaban-3.66.0版本。
  • node2中安裝MySQL,此處忽略安裝MySQL的過程。詳情參見:Linux中安裝MySQL

二、MySQL相關操做

1.拷貝建表文件

在node2上建立一個放置建表文件的目錄:數據庫

mkdir –p /home/script/azkabansql

到編譯的目錄中,將編譯好的文件遠程拷貝到目標主機:vim

cd /opt/azkaban/azkaban/azkaban-db/build/distributions/
scp azkaban-db-3.66.0-6-ge20c886.tar.gz root@node2:/home/script/azkabansql/

到node2上解壓文件瀏覽器

cd /home/script/azkabansql
tar -zxvf azkaban-db-3.66.0-6-ge20c886.tar.gz

以上爲解壓出來的文件,這裏須要使用的就是紅框框起來的sql文件。bash

2.建庫

在存放建表語句文件的目錄下登陸MySQL,若是不在此目錄的話,建表文件使用很是麻煩。服務器

mysql –u root –p
create database azkaban66;
use azkaban66

本人的數據庫中已經有一個azkaban的數據庫在使用了,這裏本人建立了一個新的數據庫,以azkaban的版本號結尾,數據庫的名字可按需建立。

3.建立用戶

這一步能夠省略,你可使用原有的root帳戶進行數據庫的操做。

create user ‘azkaban’@’%’ identified by ‘azkaban’;

前一個azkaban是用戶名,後一個azkaban是密碼。

4.設置權限

給用戶賦予權限

grant select,insert,update,delete on azkaban66.* to ‘azkaban’@’%’ with grant option;
flush privileges ;

5.建表

執行如下文件,進行建表:

source azkaban-db-3.66.0-6-ge20c886/create-all-sql-3.66.0-6-ge20c886.sql

若是不是在當前目錄下進入MySQL的話,可使用絕對路徑來進行文件導入。

下圖爲數據庫中創建的表:

6.修改字符集

若是若是想要使azkaban在建立項目的時候description支持中文輸入,那麼這裏就須要更改一個表的一個字段的字符集便可。

須要修改的表爲projects表。

使用數據庫鏈接工具Navicat for MySQL,鏈接到庫,右鍵projects表,選擇設計表,出現以下圖的界面:

選中字段,修改字符集爲utf8,而後保存便可。

7.修改上傳文件限制

有的時候,會上傳的文件過大,超過MySQL接收的默認最大值,這裏能夠修改一下MySQL的默認最大值。

vim /etc/my.cnf

max_allowed_packet=1024M

修改完成以後,重啓數據庫。

三、拷貝文件

將編譯好的文件拷貝到node2中規劃的目錄裏去:

cd opt/azkaban/azkaban/azkaban-web-server/build/distributions/
cp azkaban-exec-server-3.66.0-6-ge20c886.tar.gz /opt/azkaban/
cd opt/azkaban/azkaban/azkaban-exec-server/build/distributions/
cp azkaban-web-server-3.66.0-6-ge20c886.tar.gz /opt/azkaban/
# 解壓
cd /opt/azkaban/
tar -zxvf azkaban-web-server-3.66.0-6-ge20c886.tar.gz
tar -zxvf azkaban-exec-server-3.66.0-6-ge20c886.tar.gz

解壓以後,web下的文件夾列表以下:

exec下的文件夾列表以下:

官方網站上提示:

  • web解壓以後有以下幾個目錄:bin、conf、lib、web
  • exec解壓以後有以下幾個目錄:bin、conf、lib、extlib、plugins

因此如今只有exec目錄下少了一個文件。

四、配置exec

官方的文檔順序,是先配置的exec,這裏也先從exec開始配置。

進入exec的conf目錄中,能夠看到有以下三個個文件:

其中global.properties是一個空的文件。

1.azkaban.properties

編輯此文件,命令以下:

vim azkaban.properties

文件的原始內容,以下圖:

由官方文檔得知,exec能夠配置兩大項內容:

  • 第一項是執行器服務器屬性。
  • 第二項是MySQL鏈接屬性。

下面開始配置,可將原來的文件中,不須要的屬性註釋掉,或者將原始文件更名複製一份,再進行修改。

# Azkaban Personalization Settings
# 能夠將其餘的屬性註釋掉或者刪除,這裏只配置時區這一項
default.timezone.id=Asia/Shanghai

# Azkaban UserManager class
# Loader for projects
executor.global.properties=conf/global.properties
azkaban.project.dir=projects
# Velocity dev mode
velocity.dev.mode=false
# Azkaban Jetty server properties.
# mail settings
lockdown.create.projects=false
cache.directory=cache
# JMX stats
jetty.connector.stats=true
executor.connector.stats=true
# Azkaban Executor settings
executor.maxThreads=50
executor.flow.threads=30
# 這裏添加一個端口配置
executor.port=12321
azkaban.execution.dir=executions

# Azkaban plugin settings
azkaban.jobtype.plugin.dir=plugins/jobtypes
# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=MySQL的ip地址
mysql.database=azkaban66
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

2.log4j.properties

打開此文件,文件中已經配置好了

3.啓動

在exec的home目錄下執行如下目錄,啓動exec服務:

bin/start-exec.sh

啓動以後,home目錄下的文件變爲以下:

4.激活執行器

激活執行器有一個明顯的地方能夠看到,在數據庫中executors表中,你能夠查看當前服務器的active字段,沒有激活的時候是0,激活以後是1。

若是不激活,那麼在啓動web的時候執行任務會報出找不到執行器的錯誤。

啓動exec服務器以後,在exec服務器的home目錄中當即執行以下命令,激活執行器:

curl -G "localhost:$(<./executor.port)/executor?action=activate" && echo

以下圖:

通過後續的測試發現,每次重啓exec服務器,都須要激活。

五、配置Web

1.生成keystore文件

進入web的目錄,執行以下命令:

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

此命令是固定的,不須要更改什麼。以下是執行過程:

[root@node1 azkaban-web-server-3.66.0-6-ge20c886]# 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]:  
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  y

Enter key password for <jetty>
	(RETURN if same as keystore password): #密碼
Re-enter new password: #密碼

此時在看web目錄之下,多了一個keystore文件。

若是是在別的目錄之下進行的這個命令操做,在相應的目錄下會有這個文件,只要將這個文件拷貝到web目錄下便可。

2.azkaban.properties

此文件在conf目錄下:

cd conf/

由上圖能夠看到,conf目錄下存在四個文件。

cp azkaban.properties azkban.properties.model #複製一份,以避免出錯
vim azkaban.properties

以下圖,爲原始的azkaban.properties文件中的內容:

下面進行內容修改:

# Azkaban Personalization Settings
azkaban.name=#按規劃填寫
azkaban.label=#按規劃填寫
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=/opt/azkaban/azkaban-web-server-3.66.0-6-ge20c886/web/
default.timezone.id=Asia/Shanghai
# Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
user.manager.xml.file=/opt/azkaban/azkaban-web-server-3.66.0-6-ge20c886/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.maxThreads=25
jetty.port=8081
jetty.ssl.port=8443
jetty.keystore=keystore
jetty.password=azkaban
jetty.keypassword=azkaban
jetty.truststore=keystore
jetty.trustpassword=azkaban
# Project Manager settings
project.temp.dir=/temp
project.version.retention=3
# Azkaban Executor settings
executor.port=12321
# mail settings
mail.sender=xxxxx@xxx.xx
mail.host=smtp.263.net
mail.user=xxxx@xxx.xx
mail.password=*********
# 如下兩項能夠不填
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=plugins/jobtypes

# Azkaban mysql settings by default. Users should configure their own username and password.
database.type=mysql
mysql.port=3306
mysql.host=ip地址
mysql.database=azkaban66
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100
#Multiple Executor
azkaban.use.multiple.executors=true
azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus
azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1
azkaban.executorselector.comparator.Memory=1

在web的home目錄下建立文件plugins/jobtypes,命令以下:

midir –p plugins/jobtypes

3.azkaban-users.xml

添加azkaban的用戶,在此文件中操做,文件原始內容以下圖:

若是要添加用戶,就按照<user/>的格式添加便可。

4.log4j.properties

此文件和exec中的內容是同樣的。

六、web配置的坑

1.第一坑

  • web.resource.dir項的值要使用絕對路徑,不然web頁面會沒有美麗的界面。
  • user.manager.xml.file項的值要使用絕對路徑,不然啓動的時候會報找不到文件的錯誤。

2.第二坑:郵箱預警的坑

mail.sender、mail.host、mail.user、mail.password這四項每一項配置都不能少,端口能夠不配置,並且mail.sender和mail.user的值是同樣的,少一項或者配錯一項都會報出錯誤,錯誤信息以下:

2018/12/28 15:56:01.187 +0800 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)

在網上看到一個說這個錯誤信息解決方法的,要改源碼,實際上是配置信息寫錯了。

3.第三坑

azkaban.jobtype.plugin.dir=plugins/jobtypes這一項必定要配置,而且建立文件夾,否則會報錯,錯誤信息以下:

2018/12/28 15:50:30.898 +0800 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.java:582)

4.第四坑

Multiple Executor的幾項必須配置,否則的話會報出如下錯誤:

2018/12/28 15:43:28.406 +0800 ERROR [StdOutErrRedirect] [Azkaban] Exception in thread "main"
2018/12/28 15:43:28.406 +0800 ERROR [StdOutErrRedirect] [Azkaban] java.lang.IllegalArgumentException: azkaban.use.multiple.executors must be true. Single executor mode is not supported any more.
2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban]       at azkaban.executor.ExecutorManager.checkMultiExecutorMode(ExecutorManager.java:240)
2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban]       at azkaban.executor.ExecutorManager.setupExecutors(ExecutorManager.java:229)
2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban]       at azkaban.executor.ExecutorManager.initialize(ExecutorManager.java:155)
2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban]       at azkaban.executor.ExecutorManager.start(ExecutorManager.java:168)
2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban]       at azkaban.webapp.AzkabanWebServer.launch(AzkabanWebServer.java:235)
2018/12/28 15:43:28.407 +0800 ERROR [StdOutErrRedirect] [Azkaban]       at azkaban.webapp.AzkabanWebServer.main(AzkabanWebServer.java:226)

5.第五坑:CDH集成

若是使用的是CDH平臺安裝的hadoop相關的軟件,那麼在啓動Azkaban的時候日誌第一行會出現以下的錯誤信息:

Error: HADOOP_HOME is not set. Hadoop job types will not run properly.

這個錯誤不影響Azkaban正常的執行hadoop相關的腳本。

這是由於CDH平臺集成的Hadoop沒有在profile中添加環境變量,這裏須要在profile文件中添加兩個環境變量。操做以下:

vim /etc/profile

要添加的內容以下:

export HADOOP_HOME=/opt/cloudera/parcels/CDH
export HADOOP_CONF_DIR=/etc/hadoop/conf.cloudera.yarn

添加完成source,讓文件生效。

source /etc/profile

以上兩條變量的值是CDH的目錄,填寫的時候,查看一下,本身的CDH安裝是不是這兩個目錄,若是不是,值要根據本身的目錄進行修改。

而後重啓Azkaban web,日誌中的錯誤消失,取代是以下內容:

Using Hadoop from /opt/cloudera/parcels/CDH

七、啓動web

啓動命令以下:

bin/start-web.sh

八、登陸檢測

在瀏覽器中輸入:ip:8443,會出現以下圖的登陸界面:

由上圖能夠看出,紅塊的地方是填寫的azkaban.name和azkaban.labe兩項的值,這裏本人打了碼,配置完成大家便可看到本身的成果。

九、job測試

如下是本人準備的一個簡答的腳本的job文件,weather.job:

type=command
command=/usr/java/default/jdk/bin/java -jar /home/script/Weather.jar
failure.emails=xxx@xxx.xx
success.emails=xxx@xxx.xx

上面兩項郵箱相關的,一項是執行成功發送郵件,一項是執行失敗發送郵件。郵箱自行填寫。若是這裏不填寫郵箱,那麼就不會給你發送執行結果。

將文件打成zip的壓縮包上傳到測試項目中,選擇執行。

執行成功,也有郵件發送。

以上爲整個Two Server模式配置的整個過程和踩過的坑。

上一篇:Azkaban Solo Server模式部署

下一遍:

相關文章
相關標籤/搜索