全部產品
Search
文件中心

DataWorks:鏡像管理

更新時間:Jun 21, 2024

如果您在通用型資源群組(新版資源群組)部署任務時,需要特定開發環境(Python、Shell、第三方包依賴等)支援,鏡像管理功能能夠定製化構建包含所有必要元件的鏡像,不僅滿足任務執行條件,還最佳化了工作流程的可靠性和維護性,實現資料處理的無縫高效運行。

前提條件

  • 已建立通用型資源群組(新版資源群組),該功能需要與通用型資源群組配合使用。通用型資源群組的更多詳情,請參見新增和使用新版資源群組

    說明
    • 新版資源群組目前處於逐步灰階發布階段,如果您需要使用但所處地區暫未發布,請提交工單聯絡技術支援人員開放。

    • 新版資源群組支援的地區:華北2(北京)、華東2(上海)、華南1(深圳)、華東1(杭州)、中國(香港)、華北3(張家口)、新加坡、馬來西亞(吉隆坡)、印尼(雅加達)、日本(東京)、德國(法蘭克福)、英國(倫敦)、美國(矽谷)、美國(維吉尼亞)。

  • 通用型資源群組綁定的VPC需要具備公網訪問能力,具體配置詳情,請參見使用公網NAT GatewaySNAT功能訪問互連網

  • 已擁有AliyunDataWorksFullAccessModifyResourceGroup權限原則。授權詳情請參見產品及控制台許可權控制詳情:RAM Policy

操作步驟

步驟一:查看DataWorks官方鏡像

  1. 登入DataWorks控制台,切換至DataWorks工作空間所在地區後,單擊左側導覽列的鏡像管理

  2. 查看DataWorks官方鏡像,目前支援如下鏡像:

    • DataWorks Shell節點官方鏡像:支援Shell任務類型。

    • DataWorks PYODPS節點官方鏡像:支援PyODPS 2PyODPS 3任務類型。

    • DataWorks EMR datalake 5.15.1版本官方鏡像:支援EMR SparkEMR Spark SQLEMR SHELL任務類型。

      說明

      該鏡像支援EMR新版資料湖叢集5.15.1版本的任務提交。

    image

步驟二:建立自訂鏡像

  1. 您可以通過如下方式建立自訂鏡像:

    • DataWorks官方鏡像頁簽,找到自訂鏡像所需的基礎官方鏡像,單擊操作列的建立自訂鏡像

    • 自訂鏡像頁簽,單擊建立鏡像

  2. 在建立鏡像頁面,配置如下參數。

    參數

    說明

    鏡像名稱

    自訂鏡像的名稱。

    鏡像描述

    自訂鏡像的說明。

    參考型別

    固定為DataWorks官方鏡像,目前僅支援基於DataWorks官方鏡像建立自訂鏡像。

    鏡像命名空間

    固定為DataWorks Default

    鏡像倉庫

    固定為DataWorks Default

    鏡像名稱/ID

    DataWorks官方鏡像,支援選擇:

    • dataworks_shell_task_pod:DataWorks Shell節點官方鏡像。

    • dataworks_pyodps_task_pod:DataWorks PYODPS節點官方鏡像。

    • dataworks_emr_datalake_5.151_task_pod:DataWorks EMR datalake 5.15.1版本官方鏡像。

    可見範圍

    支援配置自訂鏡像的可見範圍,包括僅建立者可見全員可見

    使用子產品

    當前自訂鏡像僅支援用於資料開發

    支援任務類型

    • DataWorks Shell節點官方鏡像:支援Shell任務類型。

    • DataWorks PYODPS節點官方鏡像:支援PyODPS 2PyODPS 3任務類型。

    • DataWorks EMR datalake 5.15.1版本官方鏡像:支援EMR SparkEMR Spark SQLEMR SHELL任務類型。

    安裝包

    按需添加需要的第三方包。支援Python2、Python3、Yum和Script方式。

  3. 單擊確定

步驟三:發布鏡像

  1. 自訂鏡像頁簽,查看並找到已建立的自訂鏡像。

  2. 單擊操作列的發布

  3. 選擇測試資源群組後,單擊測試結果右側的測試

    說明

    測試資源群組請選擇通用型資源群組。

    image

  4. 測試成功後,單擊發布

說明
  • 只有測試成功的鏡像才發行就緒。

  • 如果長時間測試不通過,請檢查測試資源群組綁定的VPC是否具備公網訪問能力,為VPC配置公網,請參見使用公網NAT GatewaySNAT功能訪問互連網

  • 如果測試失敗,您可以在目標自訂鏡像的操作列單擊image > 修改,修改鏡像配置。

步驟四:使用鏡像

  1. 自訂鏡像頁簽,查看並找到發行的自訂鏡像。

  2. 在目標鏡像操作列單擊image > 修改歸屬工作空間,為自訂鏡像綁定歸屬工作空間。

    image

  3. 在資料開發功能中找到目標任務節點,單擊右側調度配置,選擇發行並綁定了當前工作空間的自訂鏡像

    image

  4. 儲存並提交修改。

    說明

    資料開發中修改的鏡像不會同步到生產環境中,您需要通過發布任務將任務發布後,才能在生產環境中生效。

配置樣本

情境說明

假設需要對MaxCompute表中的某一列資料進行分詞,然後將分詞結果存入另一張表中,用於下遊調度節點使用。

可以使用此方案,在自訂鏡像中預裝jieba分詞工具包,然後通過PyODPS任務使用該鏡像對錶資料進行分詞處理並儲存結果至新表,無縫整合至下遊調度流程。

操作步驟

  1. 建立測試資料。

    1. 建立MaxCompute資料來源。並在DataWorks資料開發中綁定已建立的MaxCompute資料來源。

    2. 在資料開發中,建立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, '天生我材必有用,千金散盡還複來。');
    3. 儲存並發布。

  2. 建立自訂鏡像。

    參見步驟二:建立自訂鏡像,關鍵參數如下:

    • 鏡像名稱/ID:選擇dataworks_pyodps_task_pod,DataWorks PYODPS節點官方鏡像。

    • 支援任務類型:選擇PyODPS 3

    • 安裝包:選擇Python3jieba

  3. 發布自訂鏡像並修改歸屬專案空間。具體請參見步驟三:發布鏡像步驟四:使用鏡像

  4. 在調度任務中使用自訂鏡像。

    1. 在資料開發中,建立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)
    2. 在右側調度配置中,設定如下關鍵參數:

      • 調度參數:參數名bday,參數值為$[yyyymmdd]

      • 調度資源群組:選擇通用型資源群組。

      • 鏡像:選擇發行並綁定了當前工作空間的自訂鏡像。

    3. 儲存並帶參運行。

    4. (可選)建立臨時查詢,使用如下SQL查詢產出表中資料是否有資料。

      SELECT * FROM participle_tb WHERE ds=<分區日期>;

      image

    5. 將PyODPS節點發布至生產環境。

      說明

      資料開發中修改的鏡像不會同步到生產環境中,您需要通過發布任務將任務發布後,才能在生產環境中生效。

相關文檔