天天看點

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  在排程 hadoop 的相關作業時,有以下幾種方式:

基于 linux 系統級别的 crontab。

java 應用級别的 quartz。

第三方的排程系統。

自行開發 hadoop 應用排程系統。

  對于前兩種,使用 crontab 和 quartz 是基本可以滿足業務需求,但有其弊端。在 job 數量龐大的情況下,crontab

腳本的編寫,變得異常複雜。其排程的過程也不能透明化,讓管理變得困難。quartz 雖然不用編寫腳本,實作對應的排程 api

即可,然其排程過程不透明,不涵蓋 job 運作詳情。需自行開發其功能。

  azkaban 托管在 github 上,屬于開源産品。它由以下幾部分組成:

web server

executor server

mysql

plugins(hdfs,jobtype,hadoopsecuritymanager,jobsummary,pigvisualizer,reportal)

  在介紹完其核心子產品後,我們如何使用這樣一個排程系統,來排程我們所編寫好的應用。下面,筆者将詳細為大家介紹如何來完成這部分工作。

  首先,azkaban 是一個獨立的系統,不需要依賴 hadoop 叢集環境。我們可以用單獨的節點來建構這樣一個排程系統。但是根據系統本身的需要,依賴以下環境:

jdk

  在準備好安裝包後,我們開始去部署相關安裝包。

  首先,我們要在 mysql 中建立 azkaban 的資料庫,操作内容如下所示:

1

<code>mysql&gt;</code><code>create</code> <code>database</code> <code>azkaban;</code>

  然後,我們建立所需要的表,内容如下:

<code>mysql&gt;source ${azkaban_home}/sql/</code><code>create</code><code>-</code><code>all</code><code>-sql-2.5.0.sql;</code>

  sql 檔案在你安裝包 azkaban-sql-script-2.5.0.tar.gz 中,找到 create-all-sql-2.5.0.sql 執行即可。執行成功後,會在 azkaban 的資料庫下,生成以下表:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  接下來是安裝 web server,解壓其安裝包,然後在 conf 目錄下配置相關檔案即可:

azkaban.properties

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

<code>#azkaban personalization settings</code>

<code>azkaban.name=test</code>

<code>azkaban.label=my local azkaban</code>

<code>azkaban.color=</code><code>#ff3601</code>

<code>azkaban.default.servlet.path=</code><code>/index</code>

<code>web.resource.</code><code>dir</code><code>=</code><code>/home/hadoop/azkaban/server/web/web/</code>

<code>#default.timezone.id=america/los_angeles</code>

<code>default.timezone.</code><code>id</code><code>=asia</code><code>/shanghai</code>

<code>#azkaban usermanager class</code>

<code>user.manager.class=azkaban.user.xmlusermanager</code>

<code>user.manager.xml.</code><code>file</code><code>=</code><code>/home/hadoop/azkaban/server/web/conf/azkaban-users</code><code>.xml</code>

<code>#loader for projects</code>

<code>executor.global.properties=conf</code><code>/global</code><code>.properties</code>

<code>azkaban.project.</code><code>dir</code><code>=projects</code>

<code>#plugins</code>

<code>viewer.plugin.</code><code>dir</code><code>=</code><code>/home/hadoop/azkaban/server/web/plugins/viewer/hdfs</code>

<code>#viewer.plugin.dir=hdfs</code>

<code>#viewer.plugins=hdfs</code>

<code>database.</code><code>type</code><code>=mysql</code>

<code>mysql.port=3306</code>

<code>mysql.host=nna</code>

<code>mysql.database=azkaban</code>

<code>mysql.user=root</code>

<code>mysql.password=root</code>

<code>mysql.numconnections=100</code>

<code># velocity dev mode</code>

<code>velocity.dev.mode=</code><code>false</code>

<code># azkaban jetty server properties.</code>

<code>jetty.maxthreads=25</code>

<code>jetty.ssl.port=8443</code>

<code>jetty.port=8081</code>

<code>jetty.keystore=</code><code>/home/hadoop/azkaban/server/web/conf/keystore</code>

<code>jetty.password=password</code>

<code>jetty.keypassword=password</code>

<code>jetty.truststore=</code><code>/home/hadoop/azkaban/server/web/conf/keystore</code>

<code>jetty.trustpassword=password</code>

<code># azkaban executor settings</code>

<code>executor.port=12321</code>

<code># mail settings</code>

<code>[email protected]</code>

<code>mail. password=xxxxx</code>

<code>lockdown.create.projects=</code><code>false</code>

<code>cache.directory=cache</code>

  另外,azkaban 需要使用到 keystore,在 ${azkaban_web_server}/conf 下運作如下指令,内容如下所示:

<code>keytool -keystore keystore -</code><code>alias</code> <code>azkaban -genkey -keyalg rsa</code>

  啟動之前先在 ${azkaban_web_server} 目錄下建立 logs 目錄,進入 ${azkaban_web_server} 目錄,運作如下指令:

<code>..</code><code>/bin/azkaban-web-start</code>

  成功啟動,出現以下截圖資訊:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  然後,輸入在浏覽器中 https://your_host:8443 出現以下界面:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  接着輸入使用者名和密碼:azkaban/azkaban 便可進入到排程系統中。

   web server 隻是提供可視化,要想排程我們所編寫的應用,需要依賴 executor 服務。在 ${azkaban_executor}/conf 下配置以下内容:

<code>#azkaban</code>

<code>default.timezone.</code><code>id</code><code>=america</code><code>/los_angeles</code>

<code># azkaban jobtypes plugins</code>

<code>azkaban.jobtype.plugin.</code><code>dir</code><code>=plugins</code><code>/jobtypes</code>

<code>executor.maxthreads=50</code>

<code>executor.flow.threads=30</code>

  然後執行以下指令即可:

<code>azkaban-executor-start.sh</code>

  下面給大家介紹使用流程,首先,我們在 web server 的 web console 上建立一個項目,如下圖所示:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  然後,點選上傳按鈕,将我們編寫好的應用進行打包上傳。這裡 wordcount 為例子。如下圖所示:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  在 wordcount.zip 檔案中,包含兩個檔案,一個是我們編寫需要執行的 jar 檔案,另一個是對 jar 檔案進行描述的 job 檔案,即:wordcount.job,其内容涉及如下:

<code>type</code><code>=javaprocess</code>

<code>java.class=cn.java.hello</code>

  這裡筆者隻是做了最小化配置,指明執行類型,和 java 的 mainclass。

  在 executor flow 中可以設定,告警通知者,在執行完成,或是失敗的時候通知應用開發者,讓其知曉執行進度,如下所示:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  如上圖,我們點選 schedule 按鈕,可以設定排程的時間。如下圖所示:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  在排程子產品,現實該項目任務的排程資訊,如下圖所示:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  在上圖中,我們還可以設定 sla 告警子產品,在執行 job 的過程中,若是任務超出限定時間,會将告警資訊通知所這是的人。如下圖所示:

Hadoop - Azkaban 作業排程1.概述2.内容3.Flow4.總結5.結束語

  另外,我們可以在 executing 子產品檢視正在執行的 job,在 history 子產品下可以檢視已執行完成的 job。若是需要使用 azkaban 來檢視 hdfs 檔案系統的結構目錄,添加對應的插件即可。這裡就不多贅述了。

  這裡需要注意的是,由于我們所編寫的應用會上傳到 mysql 存儲,這裡需要設定 mysql 的 max_allowed_packet 變量,在 /etc/my.cnf 中進行配置,内容如下所示:

<code>[mysqld]</code>

<code>max_allowed_packet=1024m</code>

  然後重新開機 mysql 的服務即可。另外,官方釋出的 azkaban-2.5 版本,路徑設定有問題,解決方式有兩種:第一,按照錯誤提示,配置對應的路徑;第二,修改源碼中的路徑讀取代碼,然後重新打包編譯。

  這篇部落格就和大家分享到這裡,如果大家在研究學習的過程當中有什麼問題,可以加群進行讨論或發送郵件給我,我會盡我所能為您解答,與君共勉!

繼續閱讀