1. 程式人生 > >資料排程元件:基於Azkaban協調時序任務執行

資料排程元件:基於Azkaban協調時序任務執行

# 一、Azkaban概述 ## 1、任務時序 在資料服務的業務場景中,很常見的業務流程就是日誌檔案經過大資料分析,再向業務輸出結果資料;在該過程中會有很多工需要執行,並且很難精準把握任務執行的結束時間,但是又希望整個任務鏈儘快結束釋放資源。 ![](https://img2020.cnblogs.com/blog/1691717/202103/1691717-20210329224950483-1216775067.png) 大致執行順序如下: - 業務日誌檔案同步到HDFS檔案系統; - 經過Hadoop執行分析計算過程; - 結果資料在匯入數倉進行儲存; - 最終需要把數倉內資料同步到業務庫; 這樣的流程不必業務中任務排程,時間基本是可預估的,只要把握留足任務間隔時間即可,大資料的任務鏈路通常需要一個結束直接啟動另一個,以此降低時間成本,初入資料服務公司時,就發生過因為同步任務執行結束但是最後的個別CSV資料檔案未生成結束的案例,導致近百萬的分析資料同步更新業務庫失敗。 ## 2、Azkaban簡介 Azkaban是由Linkedin公司推出的可以管理批量工作流任務的排程器,用於在一個工作流內以一個特定的順序執行一組工作和流程。Azkaban使用job配置檔案建立任務之間的依賴關係,並提供一個易於使用的web使用者介面維護和跟蹤你的工作流。 Azkaban特點和優勢 - 提供功能清晰,簡單易用的 Web UI 介面; - 作業配置簡單,任務作業依賴關係清晰; - 提供可擴充套件的元件; - 基於Java語言開發,易於二次開發; 相比較於Oozie配置工作流的過程是編寫大量的XML配置,並且其程式碼複雜度比較高,不易於二次開發,Azkaban則顯得輕量級,功能和用法相對簡單和容易使用。 # 二、服務安裝 ## 1、核心包 **Web服務** ``` azkaban-web-server-2.5.0.tar.gz ``` **執行服務** ``` azkaban-executor-server-2.5.0.tar.gz ``` **SQL指令碼** ``` azkaban-sql-script-2.5.0.tar.gz ``` ## 2、安裝路徑 上傳上面三個安裝包,並解壓操作。 ``` [root@hop01 azkaban]# pwd /opt/azkaban [root@hop01 azkaban]# tar -zxvf azkaban-web-server-2.5.0.tar.gz [root@hop01 azkaban]# tar -zxvf azkaban-executor-server-2.5.0.tar.gz [root@hop01 azkaban]# tar -zxvf azkaban-sql-script-2.5.0.tar.gz [root@hop01 azkaban]# mv azkaban-web-2.5.0/ server [root@hop01 azkaban]# mv azkaban-executor-2.5.0/ executor ``` ## 3、MySQL匯入指令碼 ```sql [root@hop01 ~]# mysql -uroot -p123456 mysql> create database azkaban_test; mysql> use azkaban_test; mysql> source /opt/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql ``` 查看錶 ![](https://img2020.cnblogs.com/blog/1691717/202103/1691717-20210329225008899-793365445.png) ## 4、SSL配置 ``` [root@hop01 opt]# keytool -keystore keystore -alias jetty -genkey -keyalg RSA ``` 生成檔案:`keystore` 拷貝到AzkabanWeb伺服器目錄下: ``` [root@hop01 opt]# mv keystore /opt/azkaban/server/ ``` ## 5、Web服務配置 **基礎配置** ``` [root@hop01 conf]# pwd /opt/azkaban/server/conf [root@hop01 conf]# vim azkaban.properties ``` 核心修改內容:MySQL和Jetty。 ``` default.timezone.id=Asia/Shanghai # Azkaban MySQL server properties. database.type=mysql mysql.port=3306 mysql.host=localhost mysql.database=azkaban_test mysql.user=root mysql.password=123456 mysql.numconnections=100 # Azkaban Jetty server properties. jetty.maxThreads=25 jetty.ssl.port=8443 jetty.port=8081 jetty.keystore=keystore jetty.password=123456 jetty.keypassword=123456 jetty.truststore=keystore jetty.trustpassword=123456 ``` 這裡配置符合本地配置引數即可。 **使用者配置** ``` [root@hop01 conf]# vim azkaban-users.xml ``` 增加一個管理員使用者: ```xml ``` ![](https://img2020.cnblogs.com/blog/1691717/202103/1691717-20210329225026148-1491776646.png) ## 6、Executor服務配置 ``` [root@hop01 conf]# pwd /opt/azkaban/executor/conf [root@hop01 conf]# vim azkaban.properties ``` 核心修改內容:MySQL和時區。 ``` default.timezone.id=Asia/Shanghai # Azkaban MySQL server properties. database.type=mysql mysql.port=3306 mysql.host=localhost mysql.database=azkaban_test mysql.user=root mysql.password=123456 mysql.numconnections=100 ``` ## 7、啟動伺服器 **Web服務** ``` [root@hop01 bin]# pwd /opt/azkaban/server/bin [root@hop01 bin]# ll total 16 -rwxr-xr-x 1 root root 161 Apr 21 2014 azkaban-web-shutdown.sh -rwxr-xr-x 1 root root 1275 Apr 21 2014 azkaban-web-start.sh ``` 這裡分別是啟動和關閉的指令碼。 ``` [root@hop01 bin]# /opt/azkaban/server/bin/azkaban-web-start.sh ``` **Executor服務** ``` [root@hop01 bin]# /opt/azkaban/executor/bin/azkaban-executor-start.sh ``` **啟動日誌** 兩個服務的關鍵尾行日誌: ``` Azkaban Server running on ssl port 8443. Azkaban Executor Server started on port 12321 ``` **登入介面** 注意這裡是基於https協議: ``` https://hop01:8443/ ``` ![](https://img2020.cnblogs.com/blog/1691717/202103/1691717-20210329225057397-158858774.png) # 三、操作案例 ## 1、入門案例 **建立command型別job** ``` [root@hop01 flow_01]# pwd /opt/azkaban/testJob/flow_01 [root@hop01 flow_01]# vim simple.job type=command command=echo 'mySimpleJob' ``` **打成zip包** ``` [root@hop01 flow_01]# zip -q -r simpleJob.zip simple.job ``` **建立專案** ![](https://img2020.cnblogs.com/blog/1691717/202103/1691717-20210329225119972-1163199132.png) **上傳任務包** ![](https://img2020.cnblogs.com/blog/1691717/202103/1691717-20210329225132503-1288302612.png) **執行任務** ![](https://img2020.cnblogs.com/blog/1691717/202103/1691717-20210329225143914-376100200.png) ## 2、任務順序執行 **建立任務A** ``` [root@hop01 flow_02]# vim simpleA.job type=command command=echo 'simplejobA' ``` **建立任務B** ``` [root@hop01 flow_02]# vim simpleB.job type=command dependencies=simpleA command=echo 'simplejobB' ``` **打包任務** ``` [root@hop01 flow_02]# zip -q -r simpleTwoJob.zip simpleA.job simpleB.job ``` ![](https://img2020.cnblogs.com/blog/1691717/202103/1691717-20210329225157948-2110155250.png) 同樣的操作方式,兩個任務放在zip包中,通過Web服務上傳,觀察執行效果即可。 # 四、原始碼地址 ``` GitHub·地址 https://github.com/cicadasmile/big-data-parent GitEE·地址 https://gitee.com/cicadasmile/big-data-parent ``` **閱讀標籤** 【[Java基礎](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1342230680016683009#wechat_redirect)】【[設計模式](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1709518416274833422#wechat_redirect)】【[結構與演算法](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1709518416274833422#wechat_redirect)】【[Linux系統](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1334314473573744641#wechat_redirect)】【[資料庫](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1376212870744358913#wechat_redirect)】 【[分散式架構](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1327025063014596608#wechat_redirect)】【[微服務](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1460269376221200386#wechat_redirect)】【[大資料元件](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1701021199339667459#wechat_redirect)】【[SpringBoot進階](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1425309486268661760#wechat_redirect)】【[Spring&Boot基礎](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1461797173297135618#wechat_redirect)】 【[資料分析](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1695231212027428866#wechat_redirect)】【[技術導圖](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1506615482391511042#wechat_redirect)】【 [職場](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MzU4Njg0MzYwNw==&action=getalbum&album_id=1719834087936278530#wechat_redirect)】 ![](https://img2020.cnblogs.com/blog/1691717/202008/1691717-20200811231321146-174169