探索開源工作流引擎Azkaban在MRS中的實踐
摘要:本文主要介紹如何在華為雲上從0-1搭建azkaban並指導使用者如何提交作業至MRS。
本文分享自華為雲社群《開源工作流引擎Azkaban在MRS中的實踐》,作者:啊喔YeYe。
環境輸入
實踐版本:Apache azkaban 4.0.0 (以單機版舉例,叢集版本配置過程類似),MRS 3.1.0 普通叢集。
Azkaban 外掛地址
Azkaban 官網
Azkaban 原始碼地址
安裝azkaban-solo-server
Azkaban不提供二進位制包,需要使用者下載原始碼編譯打包,獲取到“azkaban-solo-server.zip”和“azkaban-db.zip”。
1、環境準備。
- 在華為雲購買Linux彈性雲伺服器ECS,用於安裝執行MRS叢集客戶端和Azkaban,並繫結彈性公網IP。
- 在彈性雲伺服器ECS上安裝執行MRS叢集客戶端,例如安裝目錄為“/opt/client”。
- 準備資料表,參考MySQL教程。
- 安裝MySQL並授予本機訪問許可權。注意:Azkaban 4.0.0版本預設適配MySQL 5.1.28版本。
- 建立Azkaban資料庫,解壓“azkaban-db.zip”獲取“create-all-sql-*.sql”,並初始化。
2、上傳安裝包並解壓
- 上傳“azkaban-solo-server.zip”至“/opt/azkaban”目錄
- 執行以下命令解壓並刪除安裝包
unzip azkaban-solo-server.zip
rm -f unzip azkaban-solo-server.zip
3、修改配置檔案“azkaban-solo-server/conf/azkaban.properties”
配置埠根據實際情況修改,“jetty.port”和“mysql.port”埠號可使用預設值
jetty.port=8081 database.type=mysql mysql.port=3306 mysql.host=x.x.x.x mysql.database=azkaban mysql.user=xxx mysql.password=xxx
4、啟動azkaban-solo-server
source /opt/client/bigdata_env cd /opt/azkaban/azkaban-solo-server sh bin/start-solo.sh
5、訪問Azkaban WEB UI
在瀏覽器輸入“http://ECS彈性IP:port”網址,進入Azkaban WebUI登入介面,輸入使用者資訊登入Azkaban服務。
說明:
預設埠(port):8081;
使用者名稱/密碼:azkaban/azkaban;
使用者賬號配置檔案: /opt/azkaban/azkaban-solo-server/conf/azkaban-users.xml
azkaban-hdfs-viewer plugin配置指導
連線HDFS需要使用者下載原始碼編譯獲取“az-hdfs-viewer.zip”,並已完成安裝azkaban-solo-server。
1、環境準備
- 配置Azkaban使用者,新增supergroup使用者組授予訪問HDFS許可權
- 在HDFS的配置檔案“core-stie.xml”中增加Azkaban代理使用者
a. 登入Manager頁面,選擇“叢集 > 服務 > HDFS > 配置 > 全部配置 > HDFS(服務) > 自定義”
b. 在引數檔案“core-site.xml”中新增如下配置項:
c. 配置完成後,單擊左上角“儲存”
d. 選擇“概覽 > 更多 > 重啟服務”輸入密碼後重啟HDFS服務
2、上傳安裝包並解壓
- 上傳“az-hdfs-viewer.zip”至“/opt/azkaban/azkaban-solo-server/plugins/viewer”目錄
- 執行以下命令解壓並刪除安裝包
unzip az-hdfs-viewer.zip
rm -f az-hdfs-viewer.zip
- 重新命名解壓後的檔名為"hdfs"
mv az-hdfs-viewer hdfs
3、修改並儲存配置檔案
- 修改"azkaban-solo-server/plugins/viewer/hdfs/conf/plugin.properties"檔案中的代理使用者為步驟1中配置的Azkaban代理使用者。修改"execute-as-user"的存放目錄為Azkaban安裝目錄,如"opt/azkaban/azkaban-solo-server"。
viewer.name=HDFS viewer.path=hdfs viewer.order=1 viewer.hidden=false viewer.external.classpaths=extlib/* viewer.servlet.class=azkaban.viewer.hdfs.HdfsBrowserServlet hadoop.security.manager.class=azkaban.security.HadoopSecurityManager_H_2_0 azkaban.should.proxy=false proxy.user=azkaban // mrs叢集中配置的azkaban代理使用者名稱 allow.group.proxy=true file.max.lines=1000 #Specifying the error message we want user to get when they don't have permissionsviewer.access_denied_message=The folder you are trying to access is protected. execute.as.user=false // execute-as-user存放目錄 azkaban.native.lib=/opt/azkaban/azkaban-solo-server
若不存在該檔案需手動建立並配置以上內容
4、拷貝HDFS外掛所需包至"/opt/azkaban/azkaban-solo-server/extlib"目錄
cp /opt/client/HDFS/hadoop/share/hadoop/hdfs/*.jar /opt/azkaban/azkaban-solo-server/extlib cp /opt/client/HDFS/hadoop/share/hadoop/client/hadoop-client-api-3.1.1-mrs-2.0.jar /opt/azkaban/azkaban-solo-server/extlib cp /opt/client/HDFS/hadoop/share/hadoop/common/*.jar /opt/azkaban/azkaban-solo-server/extlib
不同MRS版本所需Hadoop相關版本不同,通過find /opt/client查詢目
5、檢查目錄結構
目錄結構應當為:
- azkaban-solo-server - bin - conf - extlib (hadoop相關外掛第三方包) - lib - logs - plugins - jobtypes(job外掛目錄) - commonprivate.properties - hive - plugin.properties - private.properties - hadoopJava - plugin.properties - private.properties - viewer - hdfs - conf - plugin.properties - lib (az-hdfs-viewer.zip解壓後的lib) - temp - web
6、重啟Azkaban-solo-server服務
cd /opt/azkaban/azkaban-solo-server sh bin/shutdown-solo.sh sh bin/start-solo.sh
7、訪問HDFS Browser
- 在瀏覽器輸入“http://ECS彈性IP:8081”網址,進入Azkaban WebUI登入介面,輸入使用者資訊登入Azkaban服務
- 單擊"HDFS"
plugins-jobtypes hadoop-job 部署執行
安裝azkaban-solo-server完成後,再部署驗證hadoop-job
1、環境準備
- 獲取"azkaban-plugins-3.0.0.zip"壓縮包
- 編譯獲取azkaban提供的hadoopjava-wordcount例項程式包“az-hadoop-jobtype-plugin.jar”
2、上傳外掛配置檔案
- 解壓"azkaban-plugins-3.0.0.zip" 獲取"azkaban-plugins-3.0.0\plugins\jobtype\jobtypes"下"hadoopJava"資料夾
- 將“hadoopJava”資料夾上傳至“/plugin”目錄。目錄不存在則需新建
3、修改配置檔案"azkaban-solo-server/plugins/jobtypes/commonprivate.properties"
# set execute-as-user execute.as.user=false hadoop.security.manager.class=azkaban.security.HadoopSecurityManager_H_2_0 azkaban.should.proxy=false obtain.binary.token=false proxy.user=azkaban // MRS叢集中配置的Azkaban代理使用者名稱 allow.group.proxy=true // execute-as-user存放目錄 azkaban.native.lib=/opt/azkaban/azkaban-solo-server # hadoop hadoop.home=/opt/client/HDFS/hadoop //opt/client為MRS叢集客戶端安裝目錄 hive.home=/opt/client/Hive/Beeline spark.home=/opt/client/Spark/spark hadoop.classpath=${hadoop.home}/etc/hadoop,${hadoop.home}/share/hadoop/common/*,${hadoop.home}/share/hadoop/common/lib/*,${hadoop.home}/share/hadoop/hdfs/*,${hadoop.home}/share/hadoop/hdfs/lib/*,${hadoop.home}/share/hadoop/yarn/*,${hadoop.home}/share/hadoop/yarn/lib/*,${hadoop.home}/share/hadoop/mapreduce/*,${hadoop.home}/share/hadoop/mapreduce/lib/* jobtype.global.classpath=${hadoop.home}/etc/hadoop,${hadoop.home}/share/hadoop/common/*,${hadoop.home}/share/hadoop/common/lib/*,${hadoop.home}/share/hadoop/hdfs/*,${hadoop.home}/share/hadoop/hdfs/lib/*,${hadoop.home}/share/hadoop/yarn/*,${hadoop.home}/share/hadoop/yarn/lib/*,${hadoop.home}/share/hadoop/mapreduce/*,${hadoop.home}/share/hadoop/mapreduce/lib/*
4、示例程式驗證
- 準備測試資料"input.txt"檔案,檔案內容可參考如下格式進行自定義,存放路徑如"/opt/input.txt"
Ross male 33 3674 Julie male 42 2019 Gloria female 45 3567 Carol female 36 2813
- 通過HDFS客戶端將測試資料"input.txt"上傳至"hdfs /tmp/azkaban_test"
a. 以客戶端安裝使用者,登入安裝客戶端的節點
b. 執行以下命令,切換到客戶端安裝目錄 cd /opt/client
c. 執行以下命令配置環境變數 source bigdata_env
d. 執行HDFS Shell命令上傳檔案 hdfs dfs -put /opt/input.txt /tmp/azkaban_test - 使用者在本地編寫並儲存“wordcount.job”檔案,內容如下
type=hadoopJava job.extend=false job.class=azkaban.jobtype.examples.java.WordCount classpath=./lib/*,/opt/azkaban-solo-server-0.1.0-SNAPSHOT/lib/* force.output.overwrite=true input.path=/tmp/azkaban_test output.path=/tmp/azkaban_test_out
- 在瀏覽器輸入“http://ECS彈性IP:port”網址,進入Azkaban WebUI登入介面,輸入使用者資訊登入Azkaban服務,提交job執行驗證
Spark command job—參考客戶端命令
spark任務有兩種執行方式,一種是command方式,另一種是spark jobtype方式。
- Command方式:需要指定spark_home為/opt/client/Spark/spark/
在MRS叢集客戶端節點可以通過echo $SPARK_HOME獲取實際Spark安裝地址。
設定azkanban所在ECS全域性環境變數,新增source {MRS客戶端}後需要重啟azkaban才可生效 - jobtype方式:參考plugins-jobtypes hadoop-job 部署執行。