為了滿足特定業務需求,您可以在DataWorks中建立EMR Shell節點。通過編輯自訂Shell指令碼,對資料處理、調用Hadoop組件、操作檔案等進階功能進行使用。本文介紹了在DataWorks裡配置和使用EMR Shell節點,以便您編輯和運行Shell任務。
前提條件
開始進行節點開發前,若您需要定製組件環境,此時即可基於官方鏡像
dataworks_emr_base_task_pod建立自訂鏡像,並在資料開發中使用鏡像。例如:在建立自訂鏡像時替換Spark Jar包或是依賴特定的
庫、檔案或jar包。已建立阿里雲EMR叢集,並註冊EMR叢集至DataWorks。操作詳情請參見新版資料開發:綁定EMR計算資源。
(可選,RAM帳號需要)進行任務開發的RAM帳號已被添加至對應工作空間中,並具有開發或空間管理員(許可權較大,謹慎添加)角色許可權,新增成員的操作詳情請參見為工作空間增加空間成員。
如果您使用的是主帳號,則可忽略該添加操作。
使用限制
僅支援使用Serverless資源群組(推薦)或獨享調度資源群組運行該類型任務,若在資料開發時需使用鏡像,則必須使用Serverless資源群組。
DataLake資料湖叢集或自訂叢集若要在DataWorks管理中繼資料,需先在叢集側配置EMR-HOOK。配置EMR-HOOK,詳情請參見配置Hive的EMR-HOOK。
說明若未在叢集側配置EMR-HOOK,則無法在DataWorks中即時展示中繼資料、產生審計日誌、展示血緣關係、開展EMR相關治理任務。
spark-submit方式提交的任務,deploy-mode推薦使用cluster模式,不建議使用client模式。
EMR Shell節點是運行在DataWorks調度資源群組,而非EMR叢集的,您可以使用一些EMR組件命令,但無法直接讀取EMR上資源情況。如果要引用資源,則需要先上傳DataWorks資源。詳情請參見資源管理。
EMR Shell節點不支援運行Python檔案,請使用Shell節點運行。
操作步驟
在EMR Shell節點編輯頁面,執行如下開發操作。
開發Shell代碼
您可以根據不同情境需求選擇適合您的操作方案:
方案一:先上傳資源後引用EMR JAR資源
DataWorks也支援您從本地先上傳資源至Data Studio,再引用資源。如果您使用的是DataLake(新版資料湖)叢集,則可通過如下步驟引用EMR JAR資源,若EMR Shell節點依賴的資源較大,則無法通過DataWorks頁面上傳。您可將資源存放至HDFS上,然後在代碼中進行引用。
建立EMR JAR資源。
詳情請參見資源管理。將準備初始資料及JAR資源套件中產生的JAR包儲存在JAR資源的存放目錄
emr/jars下。單擊點擊上傳按鈕,上傳JAR資源。選擇儲存路徑、資料來源及資源群組。
單擊儲存按鈕進行儲存。

引用EMR JAR資源。
開啟建立的EMR Shell節點,停留在代碼編輯頁面。
在左側導覽列的資源管理中找到待引用資源(樣本為
onaliyun_mr_wordcount-1.0-SNAPSHOT.jar),右鍵選擇引用資源。選擇引用後,當EMR Shell節點的代碼編輯頁面出現如下引用成功提示時,表明已成功引用代碼資源。此時,需要執行下述命令。如下命令涉及的資源套件、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中的一個具體的對象(檔案名稱或路徑)。
使用樣本
配置EMR Shell調度參數
在Shell編輯地區開發工作單位代碼,您可在代碼中使用${變數名}的方式定義變數,並在節點編輯頁面右側調度配置的調度參數中為該變數賦值。實現調度情境下代碼的動態傳參,調度參數使用詳情,請參考調度參數支援格式,樣本如下。
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資訊。
執行Shell任務
在調試配置選擇配置計算資源和資源群組。
說明您還可以根據任務執行所需的資源情況來調度 CU。預設CU為
0.25。您可以根據任務情況選擇配置鏡像資訊。
訪問公用網路或VPC網路環境的資料來源需要使用與資料來源測試連通性成功的調度資源群組。詳情請參見網路連通方案。
在工具列單擊運行Shell任務。
如需定期執行節點任務,請根據業務需求配置調度資訊。配置詳情請參見節點調度。
節點任務配置完成後,需對節點進行發布。詳情請參見節點/工作流程發布。
任務發布後,您可以在營運中心查看周期任務的運行情況。詳情請參見營運中心入門。
相關文檔
瞭解如何在EMR Shell節點使用Python 2或Python 3命令運行Python指令碼:詳情請參見Shell類型節點運行Python指令碼。
瞭解如何在EMR Shell節點使用OSSUtils工具:詳情請參見Shell類型節點使用ossutil工具。