Azkaban 簡單入門

微笑面對生活發表於2019-03-03

Azkaban是由Linkedin開源的一個批量工作流任務排程器。用於在一個工作流內以一個特定的順序執行一組工作和流程。Azkaban定義了一種KV檔案格式來建立任務之間的依賴關係,並提供一個易於使用的web使用者介面維護和跟蹤你的工作流。

1. 安裝

準備工作

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-web-server-2.5.0.tar.gz是伺服器,azkaban-executor-server-2.5.0.tar.gz是執行伺服器,azkaban-sql-script-2.5.0.tar.gz是執行的sql指令碼。

2. mysql建立表

分別把他們解壓安裝後。我們還需要在mysql中建立資料庫,然後執行azkaban提供的sql指令碼來建立azkaban所需要的表。

mysql -uroot -p
mysql> create database azkaban;
mysql> use azkaban;
Database changed
mysql> source /home/fantj/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql;
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)
複製程式碼

3. 建立SSL配置

1. 執行命令keytool -keystore keystore -alias jetty -genkey -keyalg RSA會在當前目錄生成一個keystore證照檔案,當然執行該命令需要你填寫一些資訊,比如你的姓名+工作單位等。按照提示填寫即可。
2. 然後把 keystore 考貝到 azkaban web伺服器bin目錄中

4. 配置時區

[root@s166 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:	Sat Jul 28 18:29:58 CST 2018.
Universal Time is now:	Sat Jul 28 10:29:58 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
複製程式碼

這個配置需要給叢集的每個主機設定,因為任務排程離不開準確的時間。我們也可以直接把相關檔案拷貝到別的主機作覆蓋。

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
複製程式碼
[root@s166 azkaban]# scp /usr/share/zoneinfo/Asia/Shanghai  root@s168:/etc/localtime
Shanghai                                                                                              100%  388   500.8KB/s   00:00    
[root@s166 azkaban]# scp /usr/share/zoneinfo/Asia/Shanghai  root@s169:/etc/localtime
Shanghai   
複製程式碼

5. 修改配置

5.1 修改服務端配置
5.1.1 /webserver/conf目錄下的azkaban.properties(我之前將服務端的解壓檔案改名為webserver)
#Azkaban Personalization Settings
azkaban.name=Test
azkaban.label=My Local Azkaban
azkaban.color=#FF3601
azkaban.default.servlet.path=/index
web.resource.dir=web/
default.timezone.id=Asia/Shanghai

#Azkaban UserManager class
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

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

# Velocity dev mode
velocity.dev.mode=false

# Azkaban Jetty server properties.
jetty.maxThreads=25
jetty.ssl.port=8443
jetty.port=8081
jetty.keystore=keystore
jetty.password=jiaoroot
jetty.keypassword=jiaoroot
jetty.truststore=keystore
jetty.trustpassword=jiaoroot

# Azkaban Executor settings
executor.port=12321

# mail settings
mail.sender=844072586@qq.com
mail.host=smtp.qq.com
job.failure.email=
job.success.email=

lockdown.create.projects=false

cache.directory=cache
複製程式碼

主要修改時區+mysql配置+SSL密碼和檔案路徑+郵箱配置。不貼註釋了,一看就懂。

5.1.2. 修改/conf/目錄下的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">
        
        <role name="admin" permissions="ADMIN" />
        <role name="metrics" permissions="METRICS"/>
</azkaban-users>
複製程式碼
5.2 執行伺服器配置

修改/executor/conf目錄下的azkaban.properties

#Azkaban
default.timezone.id=Asia/Shanghai

# Azkaban JobTypes Plugins
azkaban.jobtype.plugin.dir=plugins/jobtypes

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

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

# Azkaban Executor settings
executor.maxThreads=50
executor.port=12321
executor.flow.threads=30
複製程式碼

6. 執行

6.1 啟動web伺服器

webserver/bin目錄下,執行[root@s166 webserver]# nohup bin/azkaban-web-start.sh 1>/tmp/azstd.out 2>/tmp/azerr.out &啟動服務。

小技巧:先別記著用nohup執行,不然報錯不能夠及時的反饋,應該在嘗試執行通過後再去嘗試用nohup來執行。[root@s166 executor]# bin/azkaban-executor-start.sh

我大概見到的一些報錯是:

  1. /bin/目錄下沒有keystore檔案——需要把它複製到bin下
  2. 找不到各種配置檔案—– 我在配置檔案中將這些檔案配置成絕對路徑。
6.2 啟動執行伺服器

/executor/bin/目錄下執行[root@s166 webserver]# bin/azkaban-web-start.sh

6.3 瀏覽器訪問https://s166:8443/
Azkaban 簡單入門

如果你看到這樣的畫面,證明你錯了,沒有在根目錄下執行,而是習慣性的在bin目錄下執行啟動檔案,所以它的很多css都載入不到。

這才是正確的開啟方式

用設定的賬號密碼登入。

Azkaban 簡單入門

7. Azkaban實戰

7.1 單一job示例
  1. 建立job描述檔案
vim command.job

#command.job
type=command                                                    
command=echo fantj666
複製程式碼
  1. 將job資原始檔打包成zip檔案
    zip command.job

  2. 通過azkaban的web管理平臺建立project並上傳job壓縮包
    首先建立project

    建立工程
    上傳檔案
    執行日誌
7.2 多job工作流flow
  1. 建立有依賴關係的多個job描述
    第一個job:foo.job
# foo.job
type=command
command=echo foo
複製程式碼

第二個job:bar.job依賴foo.job

# bar.job
type=command
dependencies=foo
command=echo bar
複製程式碼
  1. 將所有job資原始檔打到一個zip包中
  2. 上傳zip包並啟動
  3. 檢視job log
    job list
    foo job log
    bar job log
7.3 操作hadoop
  1. vim fs.job
# fs.job
type=command
command=/home/fantj/hadoop/bin/hadoop fs -lsr /
複製程式碼
  1. 打包成zip上傳
  2. 啟動job並檢視lob
    Azkaban 簡單入門
7.4 操作hive

hive指令碼test.sql

use default;
drop table aztest;
create table aztest(id int,name string,age int) row format delimited fields terminated by `,` ;
load data inpath `/aztest/hiveinput` into table aztest;
create table azres as select * from aztest;
insert overwrite directory `/aztest/hiveoutput` select count(1) from aztest; 
複製程式碼

job檔案hivef.job

# hivef.job
type=command
command=/home/fantj/hive/bin/hive -f `test.sql`
複製程式碼

打zip包-上傳-執行-查log

Azkaban 簡單入門