為了滿足特定業務需求,您可以在DataWorks中創建EMR Shell節點。通過編輯自定義Shell腳本,對數據處理、調用Hadoop組件、操作文件等高級功能進行使用。本文介紹了在DataWorks里配置和使用EMR Shell節點,以便您編輯和運行Shell任務。
前提條件
已創建阿里云EMR集群,并注冊EMR集群至DataWorks。操作詳情請參見注冊EMR集群至DataWorks。
(可選,RAM賬號需要)進行任務開發的RAM賬號已被添加至對應工作空間中,并具有開發或空間管理員(權限較大,謹慎添加)角色權限,添加成員的操作詳情請參見為工作空間添加空間成員。
已購買Serverless資源組并完成資源組配置,包括綁定工作空間、網絡配置等,詳情請參見新增和使用Serverless資源組。
數據開發(DataStudio)中已創建業務流程。
數據開發(DataStudio)基于業務流程對不同開發引擎進行具體開發操作,所以您創建節點前需要先新建業務流程,操作詳情請參見創建業務流程。
在DataWorks資源組本地運行Python腳本時,代碼需要調用第三方包,需要根據任務使用的資源組不同,采用不同方式在資源組上準備第三方包環境:
使用限制
僅支持使用Serverless資源組(推薦)或獨享調度資源組運行該類型任務。
DataLake或自定義集群若要在DataWorks管理元數據,需先在集群側配置EMR-HOOK。若未配置,則無法在DataWorks中實時展示元數據、生成審計日志、展示血緣關系、開展EMR相關治理任務。配置EMR-HOOK,詳情請參見配置Hive的EMR-HOOK。
spark-submit方式提交的任務,deploy-mode推薦使用cluster模式,不建議使用client模式。
EMR Shell節點是運行在DataWorks調度資源組,而非EMR集群的,您可以使用一些EMR組件命令,但無法直接讀取EMR上資源情況。如果要引用資源,則需要先上傳DataWorks資源。詳情請參見上傳EMR資源。
步驟一:創建EMR Shell節點
進入數據開發頁面。
登錄DataWorks控制臺,切換至目標地域后,單擊左側導航欄的 ,在下拉框中選擇對應工作空間后單擊進入數據開發。
新建EMR Shell節點。
右鍵單擊目標業務流程,選擇
。說明您也可以鼠標懸停至新建,選擇
。在新建節點對話框中,輸入名稱,并選擇引擎實例、節點類型及路徑。單擊確認,進入EMR Shell節點編輯頁面。
說明節點名稱支持大小寫字母、中文、數字、下劃線(_)和小數點(.)。
步驟二:開發EMR Shell任務
在EMR Shell節點編輯頁面雙擊已創建的節點,您可以根據不同場景需求選擇適合您的操作方案:
(推薦)先從本地上傳資源至DataStudio,再引用資源,詳情請參見方案一:先上傳資源后引用EMR JAR資源。
使用OSS REF方式引用OSS資源,詳情請參見方案二:直接引用OSS資源。
方案一:先上傳資源后引用EMR JAR資源
DataWorks也支持您從本地先上傳資源至DataStudio,再引用資源。如果您使用的是DataLake(新版數據湖)集群,則可通過如下步驟引用EMR JAR資源,若EMR Shell節點依賴的資源較大,則無法通過DataWorks頁面上傳。您可將資源存放至HDFS上,然后在代碼中進行引用。
創建EMR JAR資源。
創建EMR JAR資源,詳情請參見創建和使用EMR資源。示例將本文《準備初始數據及JAR資源包》中生成的JAR包存儲在JAR資源的存放目錄emr/jars下。首次使用需要選擇一鍵授權,然后單擊點擊上傳按鈕,上傳JAR資源。
引用EMR JAR資源。
打開創建的EMR Shell節點,停留在代碼編輯頁面。
在
節點下,找到待引用資源(示例為onaliyun_mr_wordcount-1.0-SNAPSHOT.jar
),右鍵選擇引用資源。選擇引用后,當EMR Shell節點的代碼編輯頁面顯示
##@resource_reference{""}
格式的語句,表明已成功引用代碼資源。此時,需要執行下述命令。如下命令涉及的資源包、Bucket名稱、路徑信息等為本文示例的內容,使用時,您需要替換為實際使用的信息。##@resource_reference{"onaliyun_mr_wordcount-1.0-SNAPSHOT.jar"} onaliyun_mr_wordcount-1.0-SNAPSHOT.jar cn.apache.hadoop.onaliyun.examples.EmrWordCount oss://onaliyun-bucket-2/emr/datas/wordcount02/inputs oss://onaliyun-bucket-2/emr/datas/wordcount02/outputs
說明EMR Shell節點編輯代碼時不支持注釋語句。
方案二:直接引用OSS資源
當前節點可通過OSS REF的方式直接引用OSS資源,在運行EMR節點時,DataWorks會自動加載代碼中的OSS資源至本地使用。該方式常用于“需要在EMR任務中運行JAR依賴”、“EMR任務需依賴腳本”等場景。引用格式如下:
ossref://{endpoint}/{bucket}/{object}
endpoint:OSS對外服務的訪問域名。Endpoint為空時,僅支持使用與當前訪問的EMR集群同地域的OSS,即OSS的Bucket需要與EMR集群所在地域相同。
Bucket:OSS用于存儲對象的容器,每一個Bucket有唯一的名稱,登錄OSS管理控制臺,可查看當前登錄賬號下所有Bucket。
object:存儲在Bucket中的一個具體的對象(文件名稱或路徑)。
使用示例
在OSS Bucket中上傳示例文件。本文以
emr_shell_test.sh
為例,示例文件內容如下:#!/bin/sh echo "Hello, DataWorks!"
在EMR Shell節點中直接引用OSS資源。
sh ossref://oss-cn-shanghai.aliyuncs.com/test-oss-of-dataworks/emr_shell_test.sh
說明oss-cn-shanghai.aliyuncs.com
為endpoint,test-oss-of-dataworks
為Bucket名稱,emr_shell_test.sh
為object文件名。運行結果如下,即可看到
emr_shell_test.sh
文件的輸出結果:... >>> [2024-10-24 15:46:01][INFO ][CommandExecutor ]: Process ready to execute. command: sh ./emr_shell_test.sh >>> [2024-10-24 15:46:01][INFO ][CommandExecutor ]: Command state update to RUNNING >>> [2024-10-24 15:46:01][INFO ][CommandExecutor ]: Process start to execute... Process Output>>> Hello, DataWorks! ...
配置EMR Shell調度參數
在SQL編輯區域開發任務代碼,您可在代碼中使用${變量名}的方式定義變量,并在節點編輯頁面右側導航欄的調度配置>調度參數中為該變量賦值。實現調度場景下代碼的動態傳參,調度參數使用詳情,請參考調度參數支持的格式,示例如下。
DD=`date`;
echo "hello world, $DD"
##可以結合調度參數使用
echo ${var};
如果您使用的是DataLake(新版數據湖)集群,則還支持如下命令行。
Shell命令:
/usr/bin
及/bin
下的Shell命令。例如,ls、echo等。Yarn組件:hadoop、hdfs、yarn。
Spark組件:spark-submit。
Sqoop組件:sqoop-export、sqoop-import、sqoop-import-all-tables等。
使用該組件時,您需要在RDS白名單中添加資源組的IP信息。
執行SQL任務
步驟三:配置節點調度
如您需要周期性執行創建的節點任務,可單擊節點編輯頁面右側的調度配置,根據業務需求配置該節點任務的調度信息。配置詳情請參見任務調度屬性配置概述。
您需要設置節點的重跑屬性和依賴的上游節點,才可以提交節點。
步驟四:發布節點任務
節點任務配置完成后,需執行提交發布操作,提交發布后節點即會根據調度配置內容進行周期性運行。
單擊工具欄中的圖標,保存節點。
單擊工具欄中的圖標,提交節點任務。
提交時需在提交對話框中輸入變更描述,并根據需要選擇是否在節點提交后執行代碼評審。
說明您需設置節點的重跑屬性和依賴的上游節點,才可提交節點。
代碼評審可對任務的代碼質量進行把控,防止由于任務代碼有誤,未經審核直接發布上線后出現任務報錯。如進行代碼評審,則提交的節點代碼必須通過評審人員的審核才可發布,詳情請參見代碼評審。
如您使用的是標準模式的工作空間,任務提交成功后,需單擊節點編輯頁面右上方的發布,將該任務發布至生產環境執行,操作請參見發布任務。
后續步驟
任務提交發布后,會基于節點的配置周期性運行,您可單擊節點編輯界面右上角的運維,進入運維中心查看周期任務的調度運行情況。詳情請參見查看并管理周期任務。
相關文檔
了解如何在EMR Shell節點使用Python 2或Python 3命令運行Python腳本:詳情請參見Shell類型節點運行Python腳本。
了解如何在EMR Shell節點使用OSSUtils工具:詳情請參見Shell類型節點使用OSSUtils工具。