全部產品
Search
文件中心

DataWorks:Shell節點

更新時間:Nov 09, 2024

Shell節點支援標準Shell文法,不支援互動性文法。

使用限制

  • Shell節點支援標準Shell文法,不支援互動性文法。

  • Shell節點支援Serverless資源群組(推薦)或舊版獨享調度資源群組執行。如需購買使用Serverless資源群組,詳情請參見新增和使用Serverless資源群組

  • Serverless資源群組上運行Shell節點時,如果您需要訪問的目標端有白名單限制,請添加Serverless資源群組對應IP至目標端應用。

  • 請勿在Shell裡啟動大量子進程,由於目前Shell節點沒有資源限制,該操作可能會影響運行在該調度資源群組上的其它任務運行。

說明

如果您在開發工作單位時,需要特定的開發環境支援,可使用DataWorks提供的自訂鏡像功能,定製化構建任務執行所需的組件鏡像。更多資訊,請參見鏡像管理

前提條件

已建立商務程序。資料開發(DataStudio)基於商務程序執行具體開發操作,因此建立節點前需先建立商務程序,詳情請參見建立商務程序

建立通用Shell節點

  1. 進入資料開發頁面。

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

  2. 滑鼠移至上方至建立表徵圖,單擊建立節點 > 通用 > Shell,在建立節點對話方塊輸入節點名稱及路徑。

  3. 單擊確認,完成節點的建立。

Shell節點使用資源

在DataWorks節點使用資源時,需要先將資源上傳至DataWorks,並通過節點引用資源的方式,將資源載入入節點運行環境後,才可以在節點中使用資源。具體操作如下。

建立資源

DataWorks支援通過建立資源或上傳已有資源兩種方式,產生DataWorks中需使用的資源,使用哪種方式請以各類型資源的實際建立介面為準。

目前可在DataWorks建立MaxCompute及EMR(E-MapReduce)資源,詳情請參見建立並使用MaxCompute資源建立和使用EMR資源

說明

資源需要提交後才可被節點引用。若生產任務需使用該資源,還需將該資源發布至生產環境。詳情請參見發布任務

節點中引用資源

您可通過引用資源的方式在節點內使用資源時,節點成功引用資源後在節點代碼最上方會顯示@resource_reference{"資源名稱"}注釋代碼。

引用步驟如下:

  1. 開啟建立的Shell節點,進入節點編輯頁面。

  2. 在資料開發左側分類樹下找到已上傳的資源。

  3. 按右鍵該資源,選擇引用資源,則該資源將被引用至當前節點中。

    您可在節點編輯頁面,通過編寫代碼運行該資源。

使用資源

Shell節點使用調度參數

通用Shell節點中的變數不允許自訂命名,只能以$1、$2、$3...命名(參數序號由小到大,依次遞增),當參數的數量大於10時,請使用${10}的方式聲明變數。配置及使用調度參數,詳情請參見配置並使用調度參數,更多調度參數的賦值方式,請參見調度參數概述

配置參數如上圖,在參數賦值地區為參數賦值,再進入代碼調用地區定義內建參數$1,自訂參數$2、$3。參數賦值樣本如下:

  • 內建參數$1賦值取業務時間:$bizdate

  • 自訂參數$2賦值取業務時間:${yyyymmdd}

  • 自訂參數$3賦值取業務時間: $[yyyymmdd]

說明

通用Shell節點僅支援使用運算式的方式為參數賦值。參數間使用一個空格隔開,並且參數取值與定義參數時的順序對應。例如,Shell節點定義的第一個參數為$1,則參數賦值地區序號第一的賦值內容$bizdate即為$1的參數取值。

如何判斷Shell自訂指令碼任務是否執行成功

指令碼運行成功或者失敗是根據如下進程退出碼來進行判斷的:

  • 退出碼0:表示成功。

  • 退出碼-1:表示進程被終止。

  • 退出碼2:需要平台自動重跑一次任務。

  • 其它退出碼:表示失敗。

一個Shell任務,如果第一條命令是無效命令,那麼最終結果肯定是異常的,這時後面輸入一條能有效啟動並執行命令,結果會是成功的,具體樣本如下:

#!/bin/bash
curl http://xxxxx/asdasd
echo "nihao"

這個任務在平台上最終成功運行,因為該指令碼是正常退出的。

這時,把上述命令做一個修改,最終樣本如下:

#!/bin/bash
curl http://xxxxx/asdasd
if [[ $? == 0 ]];then  
    echo "curl success"
else  
    echo "failed"  
    exit 1
fi
echo "nihao"

這樣最終這個指令碼會運行失敗。

通過Shell指令碼裡面訪問OSSUtils

OSSUtils使用路徑、全路徑,預設有安裝。

  • /home/admin/usertools/tools/ossutil64

  • OSSUtils常用命令可參考:常用命令

配置使用者名稱密碼config可自行配置,比如將config基於營運助手將設定檔上傳配置到該目錄下:/home/admin/usertools/tools/myconfig

[Credentials]
        language = CH
        endpoint = oss.aliyuncs.com
        accessKeyID = your_accesskey_id
        accessKeySecret = your_accesskey_secret
        stsToken = your_sts_token
        outputDir = your_output_dir
        ramRoleArn = your_ram_role_arn

命令格式如下:

#!/bin/bash
/home/admin/usertools/tools/ossutil64 --config-file  /home/admin/usertools/tools/myconfig  cp oss://bucket/object object
if [[ $? == 0 ]];then
    echo "access oss success"
else
    echo "failed"
    exit 1
fi
echo "finished"

後續操作

若Shell節點需要周期性調度,您需要定義節點的調度屬性,並通過任務發布流程將任務發布至生產環境。配置節點調度屬性,詳情請參見配置節點調度屬性,發布任務至生產環境,詳情請參見發布任務

相關文檔

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

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