全部產品
Search
文件中心

DataWorks:建立EMR Shell節點

更新時間:Nov 09, 2024

為了滿足特定業務需求,您可以在DataWorks中建立EMR Shell節點。通過編輯自訂Shell指令碼,對資料處理、調用Hadoop組件、操作檔案等進階功能進行使用。本文介紹了在DataWorks裡配置和使用EMR Shell節點,以便您編輯和運行Shell任務。

前提條件

  • 已建立阿里雲EMR叢集,並註冊EMR叢集至DataWorks。操作詳情請參見註冊EMR叢集至DataWorks

  • (可選,RAM帳號需要)進行任務開發的RAM帳號已被添加至對應工作空間中,並具有開發空間管理員(許可權較大,謹慎添加)角色許可權,新增成員的操作詳情請參見為工作空間增加空間成員

  • 已購買Serverless資源群組並完成資源群組配置,包括綁定工作空間、網路設定等,詳情請參見新增和使用Serverless資源群組

  • 資料開發(DataStudio)中已建立商務程序。

    資料開發(DataStudio)基於商務程序對不同開發引擎進行具體開發操作,所以您建立節點前需要先建立商務程序,操作詳情請參見建立商務程序

  • 在DataWorks資源群組本地運行Python指令碼時,代碼需要調用第三方包,需要根據任務使用的資源群組不同,採用不同方式在資源群組上準備第三方包環境:

    • Serverless資源群組(推薦):通過鏡像管理安裝第三方包,詳情請參見鏡像管理

    • 獨享調度資源群組:通過營運助手安裝第三方包,詳情請參見營運助手

使用限制

  • 僅支援使用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節點

  1. 進入資料開發頁面。

    登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的資料開發與治理 > 資料開發,在下拉框中選擇對應工作空間後單擊進入資料開發

  2. 建立EMR Shell節點。

    1. 按右鍵目標商務程序,選擇建立節點 > EMR > EMR Shell

      說明

      您也可以滑鼠移至上方至建立,選擇建立節點 > EMR > EMR Shell

    2. 建立節點對話方塊中,輸入名稱,並選擇引擎執行個體節點類型路徑。單擊確認,進入EMR Shell節點編輯頁面。

      說明

      節點名稱支援大小寫字母、中文、數字、底線(_)和小數點(.)。

步驟二:開發EMR Shell任務

在EMR Shell節點編輯頁面雙擊已建立的節點,您可以根據不同情境需求選擇適合您的操作方案:

方案一:先上傳資源後引用EMR JAR資源

DataWorks也支援您從本地先上傳資源至DataStudio,再引用資源。如果您使用的是DataLake(新版資料湖)叢集,則可通過如下步驟引用EMR JAR資源,若EMR Shell節點依賴的資源較大,則無法通過DataWorks頁面上傳。您可將資源存放至HDFS上,然後在代碼中進行引用。

  1. 建立EMR JAR資源。

    建立EMR JAR資源,詳情請參見建立和使用EMR資源。樣本將本文《準備初始資料及JAR資源套件》中產生的JAR包儲存在JAR資源的存放目錄emr/jars下。首次使用需要選擇一鍵授權,然後單擊點擊上傳按鈕,上傳JAR資源。建立JAR資源

  2. 引用EMR JAR資源。

    1. 開啟建立的EMR Shell節點,停留在代碼編輯頁面。

    2. EMR > 資源節點下,找到待引用資源(樣本為onaliyun_mr_wordcount-1.0-SNAPSHOT.jar),右鍵選擇引用資源引用資源

    3. 選擇引用後,當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中的一個具體的對象(檔案名稱或路徑)。

使用樣本

  1. 在OSS Bucket中上傳樣本檔案。本文以emr_shell_test.sh為例,樣本檔案內容如下:

    #!/bin/sh
    echo "Hello, DataWorks!"
  2. 在EMR Shell節點中直接引用OSS資源。

    sh ossref://oss-cn-shanghai.aliyuncs.com/test-oss-of-dataworks/emr_shell_test.sh
    說明

    oss-cn-shanghai.aliyuncs.comendpointtest-oss-of-dataworksBucket名稱,emr_shell_test.shobject檔案名稱。

    運行結果如下,即可看到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任務

  1. 在工具列單擊進階運行表徵圖,在參數對話方塊選擇已建立的調度資源群組,單擊運行

    說明
    • 訪問公用網路或VPC網路環境的資料來源需要使用與資料來源測試連通性成功的調度資源群組。詳情請參見網路連通方案

    • 如果您後續執行任務需要修改使用的資源群組,您可單擊帶參運行進階運行表徵圖,選擇需要更換的調度資源群組。

  2. 單擊儲存表徵圖,儲存編寫的SQL語句。

  3. (可選)煙霧測試 (Smoke Test)。

    如果您希望在開發環境進行煙霧測試 (Smoke Test),可在執行節點提交或節點提交後執行煙霧測試 (Smoke Test),操作詳情請參見執行煙霧測試 (Smoke Test)

步驟三:配置節點調度

如您需要周期性執行建立的節點任務,可單擊節點編輯頁面右側的調度配置,根據業務需求配置該節點任務的調度資訊。配置詳情請參見任務調度屬性配置概述

說明

您需要設定節點的重跑屬性依賴的上遊節點,才可以提交節點。

步驟四:發布節點任務

節點任務配置完成後,需執行提交發佈動作,提交發布後節點即會根據調度配置內容進行周期性運行。

  1. 單擊工具列中的儲存表徵圖,儲存節點。

  2. 單擊工具列中的提交表徵圖,提交節點任務。

    提交時需在提交對話方塊中輸入變更描述,並根據需要選擇是否在節點提交後執行程式碼檢閱。

    說明
    • 您需設定節點的重跑屬性依賴的上遊節點,才可提交節點。

    • 程式碼檢閱可對任務的代碼品質進行把控,防止由於任務代碼有誤,未經審核直接發布上線後出現任務報錯。如進行程式碼檢閱,則提交的節點代碼必須通過評審人員的審核才可發布,詳情請參見程式碼檢閱

如您使用的是標準模式的工作空間,任務提交成功後,需單擊節點編輯頁面右上方的發布,將該任務發布至生產環境執行,操作請參見發布任務

後續步驟

任務提交發布後,會基於節點的配置周期性運行,您可單擊節點編輯介面右上方的營運,進入營運中心查看周期任務的調度運行情況。詳情請參見查看並管理周期任務

相關文檔

瞭解如何在EMR Shell節點使用Python 2或Python 3命令運行Python指令碼:詳情請參見Shell類型節點運行Python指令碼

瞭解如何在EMR Shell節點使用OSSUtils工具:詳情請參見Shell類型節點使用OSSUtils工具