大數據之Azkaban(一):介紹與安裝部署

記錄之前使用azkaban遇到的情況與問題

概述

Azkaban是由Linkedin公司推出的一個批量工作流任務調度器,主要用於在一個工作流內以一個特定的順序運行一組工作和流程,它的配置是通過簡單的key:value對的方式,通過配置中的dependencies 來設置依賴關係。Azkaban使用job配置文件建立任務之間的依賴關係,並提供一個易於使用的web用戶界面維護和跟蹤你的工作流。

簡述

  • 一個工作流調度系統
  • 適用於多個task有前後強順序依賴的場景,避免人工介入浪費人力。
  • 簡單的可由crontab設置。複雜的就需要工作調度器了比如ooize、azkaban等
  • 整個過程就是一個有向無環圖DAG

特點

  • 兼容任何版本的hadoop
  • 易於使用的Web用戶界面
  • 簡單的工作流的上傳
  • 有關於失敗和成功的電子郵件提醒
  • 方便設置任務之間的關係
  • 能夠殺死並重新啓動工作流
  • 模塊化和可插拔的插件機制
  • 認證/授權(權限的工作)

架構

在這裏插入圖片描述
Azkaban由三個關鍵組件構成:

  • AzkabanWebServer:AzkabanWebServer是整個Azkaban工作流系統的主要管理者,它用戶登錄認證、負責project管理、定時執行工作流、跟蹤工作流執行進度等一系列任務。
  • AzkabanExecutorServer:負責具體的工作流的提交、執行,它們通過mysql數據庫來協調任務的執行。
  • 關係型數據庫(MySQL):存儲大部分執行流狀態,AzkabanWebServer和AzkabanExecutorServer都需要訪問數據庫。

安裝部署

準備

mysql要先安裝好。選擇Mysql作爲Azkaban數據庫,因爲Azkaban建立了一些Mysql連接增強功能,以方便Azkaban設置。並增強服務可靠性。

去azkaban官網上找如下包:web-server、executor-server、sql-script

  • azkaban-web-server-2.5.0.tar.gz
  • azkaban-executor-server-2.5.0.tar.gz
  • azkaban-sql-script-2.5.0.tar.gz

安裝

  • 創建一個azkaban目錄(需要安裝到哪裏就到哪裏創建)
  • 解壓上述三個包到azkaban目錄下
  • 重命名解壓的文件
  • azkanban腳本導入:進入mysql,創建azkaban數據庫,並將解壓的腳本導入到azkaban數據庫
[root@mym apps]# mkdir azkaban
[root@mym apps]# cd azkaban/
[root@mym azkaban]# tar -zxf azkaban-executor-server-2.5.0.tar.gz 
[root@mym azkaban]# tar -zxf  azkaban-sql-script-2.5.0.tar.gz
[root@mym azkaban]# tar -zxf azkaban-web-server-2.5.0.tar.gz
[root@mym azkaban]# mv azkaban-2.5.0 azkaban-2.5.0-sql
[root@mym azkaban]# mv azkaban-executor-2.5.0 executor
[root@mym azkaban]# mv  azkaban-web-2.5.0 web
[root@mym azkaban]# mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.5.48 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database azkaban;
Query OK, 1 row affected (0.14 sec)

mysql> use azkaban;
Database changed
mysql> source /home/mym/apps/azkaban/azkaban-2.5.0-sql/create-all-sql-2.5.0.sql
Query OK, 0 rows affected (0.32 sec)
.....

mysql> show tables;
+------------------------+
| Tables_in_azkaban      |
+------------------------+
| active_executing_flows |
| active_sla             |
| execution_flows        |
| execution_jobs         |
| execution_logs         |
| project_events         |
| project_files          |
| project_flows          |
| project_permissions    |
| project_properties     |
| project_versions       |
| projects               |
| properties             |
| schedules              |
| triggers               |
+------------------------+
15 rows in set (0.00 sec)

生成密鑰對和證書

Keytool是java數據證書的管理工具,使用戶能夠管理自己的公/私鑰對及相關證書。

  • keystore 指定密鑰庫的名稱及位置(產生的各類信息將存在.keystore文件中)

  • genkey(或者-genkeypair) 生成密鑰對

  • alias 爲生成的密鑰對指定別名,如果沒有默認是mykey

  • keyalg 指定密鑰的算法 RSA/DSA 默認是DSA

生成 keystore的密碼及相應信息的密鑰庫

[root@mym web]# 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: 

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".
[root@mym web]# pwd
/home/mym/apps/azkaban/web
[root@mym web]# ls
azkaban-access.log  azkaban.version  azkaban-webserver.log  bin  conf  currentpid  extlib  keystore  lib  plugins  temp  web

翻譯版:

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

輸入密鑰庫口令:

再次輸入新口令:

您的名字與姓氏是什麼?

[Unknown]:

您的組織單位名稱是什麼?

[Unknown]:

您的組織名稱是什麼?

[Unknown]:

您所在的城市或區域名稱是什麼?

[Unknown]:

您所在的省/市/自治區名稱是什麼?

[Unknown]:

該單位的雙字母國家/地區代碼是什麼?

[Unknown]:

CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正確?

輸入 的密鑰口令:

再次輸入新口令:

注意:

密鑰庫的密碼至少必須6個字符,可以是純數字或者字母或者數字和字母的組合等等

密鑰庫的密碼最好和 的密鑰相同,方便記憶

時間同步配置

直接執行:ntpdate -u ntp.api.bz

若上述不管用(有時服務會停掉)以下是參考方法

先配置好服務器節點上的時區

1) 如果在/usr/share/zoneinfo/這個目錄下不存在時區配置文件Asia/Shanghai,就要用 tzselect 生成。

[atguigu@hadoop102 azkaban]$ tzselect

Please identify a location so that time zone rules can be set correctly.

Please select a continent or ocean.

 1) Africa

 2) Americas

 3) Antarctica

 4) Arctic Ocean

 5) ***\*Asia\****

 6) Atlantic Ocean

 7) Australia

 8) Europe

 9) Indian Ocean

10) Pacific Ocean

11) none - I want to specify the time zone using the Posix TZ format.

\#? 5

Please select a country.

 1) Afghanistan      18) Israel         35) Palestine

 2) Armenia        19) Japan         36) Philippines

 3) Azerbaijan       20) Jordan         37) Qatar

 4) Bahrain        21) Kazakhstan       38) Russia

 5) Bangladesh       22) Korea (North)     39) Saudi Arabia

 6) Bhutan         23) Korea (South)     40) Singapore

 7) Brunei         24) Kuwait         41) Sri Lanka

 8) Cambodia        25) Kyrgyzstan       42) Syria

 9) ***\*China\****         26) Laos          43) Taiwan

10) Cyprus         27) Lebanon        44) Tajikistan

11) East Timor       28) Macau         45) Thailand

12) Georgia        29) Malaysia        46) Turkmenistan

13) Hong Kong       30) Mongolia        47) United Arab Emirates

14) India         31) Myanmar (Burma)    48) Uzbekistan

15) Indonesia       32) Nepal         49) Vietnam

16) Iran          33) Oman          50) Yemen

17) Iraq          34) Pakistan

\#? 9

Please select one of the following time zone regions.

1) ***\*Beijing Time\****

2) Xinjiang Time

\#? 1

 

The following information has been given:

 

​    China

​    Beijing Time

 

Therefore TZ='Asia/Shanghai' will be used.

Local time is now:    Thu Oct 18 16:24:23 CST 2018.

Universal Time is now:  Thu Oct 18 08:24:23 UTC 2018.

Is the above information OK?

1) ***\*Yes\****

2) No

\#? 1

 

You can make this change permanent for yourself by appending the line

​    TZ='Asia/Shanghai'; export TZ

to the file '.profile' in your home directory; then log out and log in again.

 

Here is that TZ value again, this time on standard output so that you

can use the /usr/bin/tzselect command in shell scripts:

Asia/Shanghai

2)拷貝該時區文件,覆蓋系統本地時區配置

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

3)集羣時間同步(同時發給三個窗口)

sudo date -s '2018-10-18 16:39:30'

配置文件修改

web服務器配置

修改web/conf/azkaban.properties

#Azkaban Personalization Settings
#服務器UI名稱,用於服務器上方顯示的名字
azkaban.name=Test
#描述
azkaban.label=My Local Azkaban
#UI顏色
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
#默認web server存放web文件的目錄
web.resource.dir=/home/mym/apps/azkaban/web/web/
#默認時區,已改爲亞洲/上海 默認爲美國
default.timezone.id=Asia/Shanghai

#Azkaban UserManager class
user.manager.class=azkaban.user.XmlUserManager
#用戶權限管理默認類(絕對路徑)
user.manager.xml.file=/home/mym/apps/azkaban/web/conf/azkaban-users.xml

#Loader for projects
#global配置文件所在位置(絕對路徑)
executor.global.properties=/home/mym/apps/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

#數據庫類型
database.type=mysql
#端口號
mysql.port=3306
#數據庫連接IP
mysql.host=mym
#數據庫實例名
mysql.database=azkaban
#數據庫用戶名
mysql.user=root
#數據庫密碼
mysql.password=123456
#最大連接數
mysql.numconnections=100

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
# Jetty服務器屬性.
#最大線程數
jetty.maxThreads=25
#Jetty SSL端口
jetty.ssl.port=8443
#Jetty端口
jetty.port=8081
#SSL文件名(絕對路徑)
jetty.keystore=/home/mym/apps/azkaban/web/keystore
#SSL文件密碼
jetty.password=000000
#Jetty主密碼與keystore文件相同
jetty.keypassword=000000
#SSL文件名(絕對路徑)
jetty.truststore=/home/mym/apps/azkaban/web/keystore
#SSL文件密碼
jetty.trustpassword=000000

# 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

web服務器用戶配置

修改web/conf/azkaban-users.xml

[root@mym conf]# vi azkaban-users.xml 

<azkaban-users>
        <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" />
        <user username="metrics" password="metrics" roles="metrics"/>
        <user username="admin" password="admin" roles="admin,metrics"/> 
        <role name="admin" permissions="ADMIN" />
        <role name="metrics" permissions="METRICS"/>
</azkaban-users>

Server(Executor)配置

修改server/conf/azkaban.properties

#Azkaban
#時區
default.timezone.id=Asia/Shanghai

# Azkaban JobTypes Plugins
#jobtype 插件所在位置
azkaban.jobtype.plugin.dir=plugins/jobtypes

#Loader for projects
executor.global.properties=/home/mym/apps/azkaban/executor/conf/global.properties
azkaban.project.dir=projects

database.type=mysql
mysql.port=3306
mysql.host=mym
mysql.database=azkaban
mysql.user=root
mysql.password=123456
mysql.numconnections=100

# Azkaban Executor settings
#最大線程數
executor.maxThreads=50
#端口號(如修改,請與web服務中一致)
executor.port=12321
#線程數
executor.flow.threads=30

啓動服務

  • 啓動executor服務

bin/azkaban-executor-start.sh

  • 啓動web服務

bin/azkaban-web-start.sh

注意:

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

[root@mym web]# jps
9492 Jps
8697 AzkabanExecutorServer
9354 AzkabanWebServer

登錄:https://192.168.31.201:8443

注意:用戶名密碼是配在web/conf/azkaban-users.xml中的。可以用新加的那個用戶:admin/admin。

注意:是https

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章