溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Azkaban是什么

發(fā)布時間:2021-12-10 13:44:38 來源:億速云 閱讀:147 作者:小新 欄目:云計算

這篇文章將為大家詳細講解有關Azkaban是什么 ,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

1、Azkaban是什么 
     我們在工作中應該都遇到過這樣的場景:有一個任務,這個任務可以劃分成多個較小的任務完成,之所以進行劃分是因為小任務之間可以并發(fā)的進行,例如是一個shell腳本執(zhí)行的命令吧,大任務A可以劃分成B、C、D、E四個子任務(腳本)完成,而B和C是可以同時進行的,D依賴B和C的輸出,E又依賴D的輸出,于是我們一般的做法可能就是開兩個終端同時執(zhí)行B和C,等兩個都執(zhí)行完成之后再執(zhí)行D,接著在執(zhí)行E。整個執(zhí)行的過程都需要我們參與,但是整個的執(zhí)行過程類似一個有向無環(huán)圖,每一個子任務的執(zhí)行可以看作整個任務的一個流,我們可以同時從沒有入度的節(jié)點開始執(zhí)行,任何沒有流向(兩個節(jié)點之間沒有通路)關系節(jié)點都可以并行得執(zhí)行,人為的控制難免就有點力不從心了(因為很多任務都需要在深夜執(zhí)行,一般我們都是寫腳本并設置cron),這時候我們需要的就是一個工作流調度器。      Azkaban就是完成這種任務的(其實主要還是用于對hadoop生態(tài)圈的任務的支持),它是由Linkedin實現(xiàn)并開源的,主要用于在一個工作流內以一個特定的順序運行一組工作和流程,它的配置是通過簡單的key:value對的方式,通過配置中的dependencies來設置依賴關系,這個依賴關系必須是無環(huán)的,否則會被視為無效的工作流。      Azkaban有如下功能特點:

  • Web用戶界面

  • 方便上傳工作流

  • 方便設置任務之間的關系

  • 調度工作流

  • 認證/授權(權限的工作)

  • 能夠殺死并重新啟動工作流

  • 模塊化和可插拔的插件機制

  • 項目工作區(qū)

  • 工作流和任務的日志記錄和審計

我覺得這些都是一些主流的工作流調度器應該支持的功能,我覺得azkaban的web頁面做得比較好,這樣可以大大降低管理成本,它支持的任務調度類型是基于插件的,這也就使得我們可以實現(xiàn)自己的插件來完成特定的需求。另外,它還能夠在任務完成、失敗、成功的時候發(fā)送email,支持SLA設置等功能,總體來說,功能還是很強大的。 
2、安裝部署 
     azkaban分為三個組建:mysql服務器、web服務器和executor服務器,其中mysql用于存儲一些項目以及執(zhí)行計劃(所有任務的屬性信息、執(zhí)行計劃、執(zhí)行的結果以及輸出),每次執(zhí)行情況等信息;web服務器使用Jetty對外提供web服務,是用戶可以通過web頁面方便的管理;執(zhí)行服務器是負責具體的工作流的提交,執(zhí)行,可以啟動多個執(zhí)行服務器,它們通過mysql數(shù)據(jù)庫來協(xié)調任務的執(zhí)行。

Azkaban是什么

首先需要從官網(wǎng)上下載各個模塊,都是二進制的安裝包格式,當然也可以使用源碼編譯,下載地址:http://azkaban.github.io/downloads.html 接下來的安裝過程可以參考:http://blog.javachen.com/2014/08/25/install-azkaban/ 因為web客戶端是通過https的方式進行訪問的,所以這里需要創(chuàng)建一個keystore證書文件,使用命令:keytool -keystore keystore -alias jetty -genkey -keyalg RSA,按照提示輸入需要的信息,最后輸入的”輸入 <jetty> 的密鑰口令“可以和密鑰庫口令一樣,并且需要在web服務器的配置文件azkaban.properties中修改Jetty服務器的屬性,其中 jetty.keystore=keystore jetty.password=redhat jetty.keypassword=redhat jetty.truststore=keystore jetty.trustpassword=redhat 設置為你生成的證書文件的信息。接著就可以在瀏覽器中輸入https://ip:8443訪問azkaban了(登錄的用戶名和密碼是在web服務器的user配置文件中設置的,這里我們使用的是admin)。 

3、測試 
     這里我們進行簡單的測試,由于azkaban原生是支持shell命令(所以也就可以支持shell腳本以及python等其他腳本程序)的,所以可以使用簡單的shell命令進行測試,我們創(chuàng)建4個子任務,每一個子任務的配置都是任務名.job文件。它們的配置如下: test.job
type=command
command=sleep 3
command.1=echo "Hello World" 
start.job

type=command
command=sleep 5
command.1=echo "start execute" 
sleep.job
type=command
dependencies=test, start
command=sleep 10 
finish.job
type=command
dependencies=sleep
command=echo "finish" 這里通過dependencies屬性來標識該任務依賴的任務,可以有一個或者多個,通過","分割,這些任務的type都是command,azkaban也支持其它類型的命令類型,有些需要安裝插件才能支持。 然后我們將這四個job文件放在一個目錄下壓縮成一個zip文件,在Azkaban的web界面的首頁可以通過”Create Project“按鈕來創(chuàng)建新的一個工作流,輸入必要的信息之后會進入到project界面,我們可以通過upload上傳我們要執(zhí)行的任務流,可以重復upload進行覆蓋。但是之前的任務流的執(zhí)行結果不會被覆蓋。如果工作流的配置有問題(例如出現(xiàn)相互依賴),上傳會不成功,但是沒有看到提示。等待壓縮文件上傳成功之后,我們可以通過界面查看各個任務的依賴關系圖:

Azkaban是什么

可以通過”Execute Flow“按鈕來啟動一個工作流的一次執(zhí)行,點擊之后會進入配置界面,包括其中包括”Flow View“、”Notification“、”Failure Options“、”Concurrent“、”Flow Parameters“,另外還需要注意的是左下角的Schedule按鈕,這里可以設置工作流的定時執(zhí)行。注意,這里是每一次工作流執(zhí)行的時候都需要設置的,目前沒有看到保存歷史設置的情況,當然如果希望重復之前執(zhí)行的一次設置的話可以找到之前的那次執(zhí)行,然后再次運行(這時候還是需要進入配置頁面,但是會保存那次運行的配置)。其中需要注意的是在”Failure Options“和”Concurrent“中的配置,他們分別配置了在工作流中一個任務執(zhí)行失敗之后的處理和這個project的多次執(zhí)行流(多次Execute)如果存在并行時的處理。我們在這里不進行配置,直接執(zhí)行命令: 提交之后會提示本次執(zhí)行的id(我覺得這里通過一個可識別的字符串進行標示會更好一些),這個id是全局唯一的,也就是說多個project的每一次執(zhí)行都會遞增得到新的exec id。 執(zhí)行完成之后,可以通過web界面查看每一個任務流的執(zhí)行結果以及每一個子任務的執(zhí)行結果。

Azkaban是什么

在Graph標簽下可以查看每一個任務執(zhí)行的情況、當前執(zhí)行到哪一個任務了,F(xiàn)low Log中會實時得輸出工作流的運行日志,點擊每一個子任務可以查看子任務的運行狀態(tài)以及實時輸出的日志信息,總體來說還是非常方便的。 
這里涉及的幾個概念:project、flow和job,首先一個project是一個要執(zhí)行任務的整體,它可以包含多個flow,每一個project可以上傳一個.zip的文件,flow之間是相互獨立的,但是有一個總的flow,這個flow可能引用其他的flow作為它執(zhí)行的一部分(相當于總flow的一個子job,但是這個job是一個flow)。每一個flow包含多個job,這些job是相互獨立的,通過job文件中dependencies設置依賴關系,每一個flow的結束job可以作為這個flow的標識(flow名),我們可以通過這樣的方式將一個flow作為一個job加入到另外的flow中: jobGroup.job  type=flow
flow.name=finish
dependencies=realStart finish是之前定義的flow的標識(因為它是終止job),這個flow作為一個job可以設置其他的依賴關系,下面是一個包含子flow的任務依賴圖:

Azkaban是什么

我覺得之所以要設計成這樣是為了將每個flow獨立出來,方便flow的重用。 
4、用戶管理 
azkaban中有用戶和用戶組的概念,用戶和用戶組以及權限的配置信息保存在配置文件azkaban-users.xml中,認證的方式是由azkaban.user.XmlUserManager來實現(xiàn)的,具體的配置可以在azkaban.properties(web服務器的conf下)進行配置:

ParameterDefault
user.manager.classazkaban.user.XmlUserManager
user.manager.xml.fileazkaban-users.xml

我們在azkaban-users.xml可以配置三類內容:user、group和role,user項可以配置username、password、roles、group信息,分別配置用戶名、密碼、用戶的權限以及所屬的組;group項可以配置name和roles,分別用于配置組名和這個組使用的權限;role定義了權限信息,可以配置name和permissions,分別表示規(guī)則名和賦予的權限信息。azkaban支持的權限包括:

PermissionsValues
ADMIN可以做任務事情,包括給其他用戶添加、修改權限
READ只能訪問每一個project的內容和日志信息
WRITE可以在已創(chuàng)建的project上傳、修改任務的屬性,可以刪除任何的project
EXECUTE允許用戶執(zhí)行任何的任務流
SCHEDULE允許用戶添加、刪除任何任務流的調度信息
CREATEPROJECTS在禁止創(chuàng)建project的情況下仍允許創(chuàng)建新的project

這里的權限設置沒有細化到每一個user在每一個project中,每一個用戶所擁有的權限可以在每一個project下面執(zhí)行相同的操作,另外用戶和用戶組之間的權限信息還不是很明確,如果使用用戶組作為權限的分配單位(即一個用戶組下的所有用戶擁有相同的權限),每個用戶再次指定權限就有點多余了。 

關于“Azkaban是什么 ”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI