如果運行在Serverless資源群組上的任務需要特定的開發環境(例如第三方庫依賴),您可以建立一個整合必要開發包與依賴的自訂鏡像,然後在運行任務時,指定Serverless資源群組作為執行資源,並指定該鏡像作為運行環境。
前提條件
已建立Serverless資源群組。該功能需要與Serverless資源群組配合使用,Serverless資源群組的更多詳情,請參見新增和使用Serverless資源群組。
(可選)如果任務啟動並執行環境需要依賴位於公網的第三方包,則Serverless資源群組綁定的VPC需要具備公網訪問能力,具體配置詳情,請參見使用公網NAT GatewaySNAT功能訪問互連網。
已擁有AliyunDataWorksFullAccess或ModifyResourceGroup權限原則。授權詳情請參見產品及控制台許可權控制詳情:RAM Policy。
使用限制
該功能僅支援與新Serverless資源群組配合使用。
說明如果您使用舊版獨享調度資源群組運行PyODPS任務節點時,需要依賴第三方包,可使用營運助手,具體請參見獨享調度資源群組配置第三方包。
不同DataWorks版本,支援建立的自訂鏡像最大個數存在限制:
基礎版和標準版:10個。
專業版:50個。
企業版:100個。
僅專業版以上版本支援鏡像構建能力。
每個地區最多支援兩個鏡像同時構建。
操作步驟
步驟一:查看DataWorks官方鏡像
登入DataWorks控制台,切換至DataWorks工作空間所在地區後,單擊左側導覽列的鏡像管理。
查看DataWorks官方鏡像,目前支援如下鏡像:
DataWorks Shell節點官方鏡像:支援
Shell
任務類型。DataWorks PYODPS節點官方鏡像:支援
PyODPS 2
和PyODPS 3
任務類型。DataWorks EMR datalake 5.15.1版本官方鏡像:支援
EMR Spark
、EMR Spark SQL
和EMR SHELL
任務類型。說明該鏡像支援EMR新版資料湖叢集5.15.1版本的任務提交。
步驟二:建立自訂鏡像
官方鏡像作為預配置的基礎鏡像,為特定任務類型提供了標準化的執行環境。自訂鏡像在此基礎上進一步擴充了功能性和靈活性。您可以根據實際應用情境基於這些基礎鏡像進行個人化擴充,實現功能的按需定製,提升了資料處理任務的執行效率與靈活性。
您可以通過如下方式建立自訂鏡像:
在DataWorks官方鏡像頁簽,找到自訂鏡像所需的基礎官方鏡像,單擊操作列的建立自訂鏡像。
在自訂鏡像頁簽,單擊建立鏡像。
在建立鏡像頁面,配置如下參數。
參數
說明
鏡像名稱
自訂鏡像的名稱。
鏡像描述
自訂鏡像的說明。
參考型別
固定為DataWorks官方鏡像,目前僅支援基於DataWorks官方鏡像建立自訂鏡像。
鏡像命名空間
固定為DataWorks Default。
鏡像倉庫
固定為DataWorks Default。
鏡像名稱/ID
DataWorks官方鏡像,支援選擇:
dataworks_shell_task_pod:DataWorks Shell節點官方鏡像。
dataworks_pyodps_task_pod:DataWorks PYODPS節點官方鏡像。
dataworks_emr_datalake_5.15.1_task_pod:DataWorks EMR datalake 5.15.1版本官方鏡像。
可見範圍
支援配置自訂鏡像的可見範圍,包括僅建立者可見和全員可見。
使用子產品
當前自訂鏡像僅支援用於資料開發。
支援任務類型
DataWorks Shell節點官方鏡像:支援
Shell
任務類型。DataWorks PYODPS節點官方鏡像:支援
PyODPS 2
和PyODPS 3
任務類型。DataWorks EMR datalake 5.15.1版本官方鏡像:支援
EMR Spark
、EMR Spark SQL
和EMR SHELL
任務類型。
安裝包
按需添加需要的第三方包。支援以下方式:
快捷安裝:在安裝包下拉選擇框選擇
Python2
、Python3
、Yum
,可以直接選擇需要安裝的環境、資源。手動輸入:在安裝包下拉選擇框選擇
Script
。可通過Script命令框手動輸入安裝命令。您可選擇以下手動輸入樣本命令下載第三方包。pip樣本命令:
pip install xx
,支援Python2使用。pip3樣本命令:
/home/tops/bin/pip3 install 'urllib3<2.0'
,支援Python3使用。yum樣本命令:
yum install -y git
。wget樣本命令:
wget git
。
單擊確定。
步驟三:發布鏡像
在自訂鏡像頁簽,查看並找到已建立的自訂鏡像。
單擊操作列的發布。
選擇測試資源群組後,單擊測試結果右側的測試。
說明測試資源群組請選擇Serverless資源群組。
測試成功後,單擊發布。
只有測試成功的鏡像才發行就緒。
如果您配置的自訂鏡像是從公網擷取第三方包,且長時間測試不通過,請檢查測試資源群組綁定的VPC是否具備公網訪問能力,為VPC配置公網,請參見使用公網NAT GatewaySNAT功能訪問互連網。
如果測試失敗,您可以在目標自訂鏡像的操作列單擊
,修改鏡像配置。
步驟四:修改鏡像歸屬空間
在自訂鏡像頁簽,查看並找到發行的自訂鏡像。
在目標鏡像操作列單擊
,為自訂鏡像綁定歸屬工作空間。
步驟五:使用鏡像
進入資料開發頁面。
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的 ,在下拉框中選擇對應工作空間後單擊進入資料開發。
在資料開發功能中找到待測試自訂鏡像的任務節點,單擊右側調度配置,配置資源屬性:
調度資源群組:選擇Serverless資源群組。
說明為確保任務節點順利運行,請確保調度資源群組與發布鏡像時選擇的測試資源群組一致。
鏡像:選擇發行並綁定了當前工作空間的自訂鏡像。
儲存並提交修改。
說明資料開發中修改的鏡像不會同步到生產環境中,您需要通過發布任務將任務發布後,才能在生產環境中生效。
步驟六:構建持久化鏡像
完成步驟五後,您已經可以正常在業務中使用自訂鏡像,但每次運行任務節點時,DataWorks都會重新部署鏡像環境,下載第三方包。該情境下會增加節點已耗用時間且可能承擔更多的計算費用,因此,DataWorks支援將自訂鏡像構建為持久化鏡像,無需每次都重新部署鏡像環境,每次運行任務節點時使用同一個鏡像環境,不僅確保了運行環境的一致性,還有效節省了任務已耗用時間、計算成本和流量成本。
具體配置步驟如下:
登入DataWorks控制台,切換至DataWorks工作空間所在地區後,單擊左側導覽列的鏡像管理。
在自訂鏡像頁簽,查看並找到發行的自訂鏡像。
在目標鏡像操作列單擊
,將自訂鏡像構建為持久化鏡像。在彈出的請選擇構建鏡像的資源群組對話方塊中,配置構建鏡像使用的資源群組,然後單擊繼續。
配置樣本
情境說明
假設需要對MaxCompute表中的某一列資料進行分詞,然後將分詞結果存入另一張表中,用於下遊調度節點使用。
可以使用此方案,在自訂鏡像中預裝jieba分詞工具包,然後通過PyODPS任務使用該鏡像對錶資料進行分詞處理並儲存結果至新表,無縫整合至下遊調度流程。
操作步驟
建立測試資料。
建立MaxCompute資料來源,並在DataWorks資料開發中綁定已建立的MaxCompute資料來源。詳情請參見建立MaxCompute資料來源。
在資料開發中,建立ODPS節點,建立測試表並添加測試資料。
說明如下樣本使用了調度參數,請在右側調度配置中設定參數名為
bday
,參數值為$[yyyymmdd]
。-- 建立測試表 CREATE TABLE IF NOT EXISTS custom_img_test_tb ( c_customer_id BIGINT NOT NULL, c_customer_text STRING NOT NULL, PRIMARY KEY (c_customer_id) ) COMMENT 'TABLE COMMENT' PARTITIONED BY (ds STRING COMMENT '分區') LIFECYCLE 90; -- 向表中插入測試資料 INSERT INTO custom_img_test_tb PARTITION (ds='${bday}') (c_customer_id, c_customer_text) VALUES (1, '晚來天欲雪,能飲一杯無?'), (2, '月落烏啼霜滿天,江楓漁火對愁眠。'), (3, '山重水複疑無路,柳暗花明又一村。'), (4, '春眠不覺曉,處處聞啼鳥。'), (5, '靜夜思,床前明月光,疑是地上霜。'), (6, '海上生明月,天涯共此時。'), (7, '舊時王謝堂前燕,飛入尋常百姓家。'), (8, '一行白鷺上青天,窗含西嶺千秋雪。'), (9, '人生得意須盡歡,莫使金樽空對月。'), (10, '天生我材必有用,千金散盡還複來。');
儲存並發布。
建立自訂鏡像。
參見步驟二:建立自訂鏡像,關鍵參數如下:
鏡像名稱/ID:選擇
dataworks_pyodps_task_pod
,DataWorks PYODPS節點官方鏡像。支援任務類型:選擇
PyODPS 3
。安裝包:選擇
Python3
和jieba
。
發布自訂鏡像並修改歸屬專案空間。具體請參見步驟三:發布鏡像和步驟四:修改鏡像歸屬空間。
在調度任務中使用自訂鏡像。
在資料開發中,建立PyODPS3節點,配置如下內容:
import jieba from odps import ODPS from odps.models import TableSchema as Schema, Column, Partition # 讀取表資料 table = o.get_table('custom_img_test_tb') partition_spec = f"ds={args['bday']}" with table.open_reader(partition=partition_spec) as reader: records = [record for record in reader] # 對提取的文本進行分詞 participles = [' | '.join(jieba.cut(record['c_customer_text'])) for record in records] # 建立目標表 if not o.exist_table("participle_tb"): schema = Schema(columns=[Column(name='word_segment', type='string', comment='分詞結果')], partitions=[Column(name='ds', type='string', comment='分區欄位')]) o.create_table("participle_tb", schema) # 寫入分詞結果到目標表 # 定義輸出分區和表 output_partition = f"ds={args['bday']}" output_table = o.get_table("participle_tb") # 如果分區不存在,先建立分區 if not output_table.exist_partition(output_partition): output_table.create_partition(output_partition) # 將分詞結果寫入表 record = output_table.new_record() with output_table.open_writer(partition=output_partition, create_partition=True) as writer: for participle in participles: record['word_segment'] = participle writer.write(record)
在右側調度配置中,設定如下關鍵參數:
調度參數:參數名
bday
,參數值為$[yyyymmdd]
。調度資源群組:選擇Serverless資源群組,與發布鏡像時選擇的測試資源群組相同。
鏡像:選擇發行並綁定了當前工作空間的自訂鏡像。
儲存並帶參運行。
(可選)建立臨時查詢,使用如下SQL查詢產出表中是否有資料。
SELECT * FROM participle_tb WHERE ds=<分區日期>;
將PyODPS節點發布至生產環境。
說明資料開發中修改的鏡像不會同步到生產環境中,您需要通過發布任務將任務發布後,才能在生產環境中生效。
將自訂鏡像構建為持久化鏡像。具體請參見步驟六:構建持久化鏡像。
相關文檔
使用自訂鏡像時,調度資源群組必須配置為Serverless資源群組,Serverless資源群組的更多資訊,請參見新增和使用Serverless資源群組。
PyODPS的更多用法,請參見PyODPS概述。
資料開發中更多參數配置說明,請參見任務調度屬性配置概述。