利用Azkaban來完成大數(shù)據(jù)的任務調度

Azkaban簡介

Azkaban是一款有LinkedIn開源的任務調度系統(tǒng),使用該系統(tǒng)可以完成任務的定時調度,執(zhí)行,任務分片等操作。
官方是這么介紹的:

zkaban was implemented at LinkedIn to solve the problem of Hadoop job dependencies.We had jobs that needed to run in order, from ETL jobs to data analytics products.
Initially a single server solution, with the increased number of Hadoop users over the years, Azkaban has evolved to be a more robust solution.

azkaban在linkedIn內部經常被用來作ETL和大數(shù)據(jù)分析相關的任務調度。
相對于我們比較熟悉的crontab命令,azkaban可以認為是一種更高級的,能夠支持任務的分片與自動執(zhí)行,同時封裝有基于jetty的web ui的這么一款專業(yè)的任務調度系統(tǒng)。于此同時,國內也有比較著名的當當網開源的一款任務調度系統(tǒng),elasticjob.
不過,相對于azkaban,筆者更喜歡使用azkaban,因為其web ui界面更加直觀,能夠看到不同的job之間的依賴關系,同這這個任務調度系統(tǒng)也更輕量化。

Azkaban的架構

azkaban使用java開發(fā),封裝了jetty作為輕量的web服務器,使用web ui來操控,web ui能夠直觀地看到不同的任務之間的依賴關系,azkaban可以單點部署,也可以雙機部署,對于一般的情況,單點部署就足夠了。
他的架構示意圖官方是這么給出的:


image.png

官方是這么介紹的:

Azkaban consists of 3 key components:
Relational Database (MySQL)
AzkabanWebServer
AzkabanExecutorServer

在我們很多工程情況下,webserver 就是 executor server,這樣就是單點部署,同時,需要我們安裝mysql作為持久化的數(shù)據(jù)庫。

Azkaban做什么?

我們用azkaban主要解決的業(yè)務場景是:

  1. 對日志等原始數(shù)據(jù)進行ETL
  2. 將ETL后的數(shù)據(jù)存儲起來,可以是mongodb,也可以是hbase等
  3. 對數(shù)據(jù)進行分析
  4. 任務完成或失敗通知管理員

這樣,我們就可以利用azkaban來進行任務調度,主要應用場景就是離線計算了。
在上面,我們已經知道了,大數(shù)據(jù)離線計算相關內容是存在一種依賴關系的,最簡單的例子是先要ETL,然后才能進行分析。
Azkaban可以在我們睡覺的時候,幫我們完成日志的ETL和自動分析任務的創(chuàng)建和監(jiān)控,無人值守,方便輕松。

Azkaban安裝

mysql

首先得安裝Mysql,然后配置mysql,下面按照官方的步驟,進行修改如下:
首先登錄到mysql shell,然后輸入密碼:

mysql -uroot -p

Create a database for Azkaban. For example:

創(chuàng)建數(shù)據(jù)庫,名為azkaban

mysql> CREATE DATABASE azkaban;

Create a database user for Azkaban. For example:

Example database creation command. The user name doesn’t need to be ‘azkaban’
創(chuàng)建用戶名和密碼

mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
例如:
CREATE USER 'azkaban'@'%' IDENTIFIED BY 'azkaban';

Set user permissions on the database.

Create a user for Azkaban if one hasn’t been made, and give the user INSERT, SELECT, UPDATE, DELETE permission on all tables in the Azkaban db.
Replace db, username with the ones created by the previous steps.
設置權限

mysql> GRANT all ON <database>.* to '<username>'@'%' WITH GRANT OPTION;
例如:
GRANT all ON azkaban.* to 'azkaban'@'%' WITH GRANT OPTION;

Configure Packet Size may need to be configured.

MySQL may have, by default, a ridiculously low allowable packet size. To increase it, you’ll need to have the property max_allowed_packet set to something higher, say 1024M.
To configure this in linux, open /etc/my.cnf. Somewhere after mysqld, add the following:
配置/etc/my.cnf 文件的參數(shù):

[mysqld]
...
max_allowed_packet=1024M

To restart MySQL, you can run…

重啟服務,配置生效

$ sudo /sbin/service mysqld restart

azkaban安裝

在git上clone一個:

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

gradle 編譯

這里說明以下,因為azkaban可能會用到node.js的npm,所以如果失敗的話可以安裝下node.js,由于我的server安裝過node.js環(huán)境,我不知道不安裝是否會失敗。

  # Build Azkaban
  ./gradlew build

  # Build and install distributions
  ./gradlew installDist

進入到編譯后的文件夾

在azkaban源代碼的根目錄下,注意我說的是源代碼的根目錄下,這個文件路徑有點兒惡心,別找錯了:

cd ./azkaban-solo-server/build/install/azkaban-solo-server

之后這個路徑我們就是我們相對路徑的參考路徑了,下面稱之為 azkaban-solo-server 目錄,切記!

這個文件路徑是單機部署編譯出來的,從solo這個單詞也能看出來,我們執(zhí)行節(jié)點和web server節(jié)點都是同一個,對于很多情況,這種就足夠了。

配置azkaban

在這個 azkaban-solo-server 目錄下,找到conf目錄,cd進去,修改幾個文件:

azkaban.properties加入以下內容
database.type=mysql
mysql.port=3306
mysql.host=localhost
mysql.database=azkaban
mysql.user=azkaban
mysql.password=azkaban
mysql.numconnections=100

這個是Mysql的配置信息,根據(jù)自己的情況修改

azkaban-users.xml

這個里面是WEB UI默認登錄的用戶名和密碼,看情況改,easy!
默認的用戶名和密碼都是azkaban

還有一個很重要的文件也要修改!

azkaban-solo-server目錄下,修改相對路徑這個配置文件

vi ./plugins/jobtypes/commonprivate.properties 

加入:

memCheck.enabled=false

因為:
azkaban默認要求機器是3G及以上的,我們很多情況的vps都達不到這個水平,我們必須修改這個配置,否則任務將一直為running狀態(tài)!

azkaban運行

在在azkaban-solo-server目錄下,運行:

./bin/azkaban-solo-start.sh 

注意:
一定要在這個路徑下運行,因為這個shell中很多用的都是相對路徑,如果不在這個路徑下運行,mysql數(shù)據(jù)庫會初始化失敗的喔~

之所以沒用nohup運行,是為了看看是不是會報錯,如果有報錯,后續(xù)根據(jù)異常情況好方便排查!
如果要關閉任務,也運行:

./bin/azkaban-solo-shutdown.sh 

任務提交

web ui的默認端口號是8081,通過這個端口號訪問web ui.
登錄到web ui之后,會有任務創(chuàng)建,這個倒是沒什么,就是后面要求Upload一個任務,這里注意下:

upload的文件是zip壓縮的壓縮包,在壓縮包中可以包含多個任務,表示任務文件的擴展名是.job
然后,多個job文件打包在一起,這些job文件的格式是:

eg. demo.job

type=command
#用command來執(zhí)行shell腳本,這個腳本放到壓縮包里打包,注意路徑
command=sh /job/analysis.sh
dependencies=etl

etl.job

type=command
#這個command當然也可以是python腳本啦
command=python /root/demo/etl.py
#這里也可以是任務執(zhí)行機器的絕對路徑
#無依賴

然后,把上面需要的job文件,sh文件等等打成一個zip壓縮包,上傳,即可看到生成一個DAG,這個DAG就是我們要調度的任務.
web ui一共也沒幾個按鈕,就那么些功能,剩下的隨便點點就知道都怎么用了~

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容