探索開源工作流引擎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 部署執行。
- 帶你掌握 C 中三種類成員初始化方式
- 實踐GoF的設計模式:工廠方法模式
- DCM:一個能夠改善所有應用資料互動場景的中介軟體新秀
- 手繪圖解java類載入原理
- 關於加密通道規範,你真正用的是TLS,而非SSL
- 程式碼重構,真的只有複雜化一條路嗎?
- 解讀分散式排程平臺Airflow在華為雲MRS中的實踐
- 透過例項demo帶你認識gRPC
- 帶你聚焦GaussDB(DWS)儲存時遊標使用
- 傳統到敏捷的轉型中,誰更適合做Scrum Master?
- 輕鬆解決研發知識管理難題
- Java中觀察者模式與委託,還在傻傻分不清
- 如何使用Python實現影象融合及加法運算?
- 什麼是強化學習?
- 探索開源工作流引擎Azkaban在MRS中的實踐
- GaussDB(DWS) NOT IN優化技術解密:排他分析場景400倍效能提升
- Java中觀察者模式與委託,還在傻傻分不清
- Java中的執行緒到底有哪些安全策略
- 一圖詳解java-class類檔案原理
- Java中的執行緒到底有哪些安全策略