全部產品
Search
文件中心

DataWorks:在PyODPS節點中調用第三方包

更新時間:Dec 18, 2024

本文為您介紹在依賴普通的Python指令碼和開源第三方包的情境下,如何使用DataWorks PyODPS節點調用第三方包。

背景資訊

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

  • 如果您的PyODPS任務需要訪問特殊的網路環境(如VPC網路或IDC網路中的資料來源或服務等),請使用Serverless資源群組或舊版獨享調度資源群組,並參考網路連通方案打通資源群組與目標環境的網路連通。

  • PyODPS文法及更多資訊請參見PyODPS文檔

  • PyODPS節點分為PyODPS 2和PyODPS 3兩種,二者的區別在於底層Python語言版本不同。PyODPS 2底層Python語言版本為Python 2,PyODPS 3底層Python語言版本為Python 3,請您根據實際使用的Python語言版本建立PyODPS節點。更多建立PyODPS節點資訊,請參見開發PyODPS 2任務開發PyODPS 3任務

使用限制

  • DataWorks建議您在PyODPS節點內擷取到本地處理的資料不超過50 MB,該操作受限於DataWorks執行資源的不同規格處理的本機資料過多並超出作業系統閾值時可能發生OOM(Got killed)錯誤。請避免在PyODPS節點中寫入過多的資料處理代碼。詳情請參見PyODPS概述

  • 如果您發現有Got killed報錯,即表明記憶體使用量超限,進程被中止。因此,請盡量避免本地的資料操作。通過PyODPS發起的SQL和DataFrame任務(除to_pandas外)不受此限制。

  • 使用獨享調度資源群組時,非自訂函數代碼可以使用平台預裝的NumPy和Pandas。不支援其他帶有二進位代碼的第三方包。

  • 由於相容性原因,在DataWorks中,options.tunnel.use_instance_tunnel預設設定為False。如果需要全域開啟instance tunnel,需要手動將該值設定為True。

依賴普通的Python指令碼

  1. 進入資料開發頁面。

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

  2. 建立Python資源。

    1. DataStudio(資料開發)頁面,滑鼠移至上方至建立表徵圖,單擊建立資源 > Python

      您也可以展開商務程序目錄下的目標商務程序,按右鍵MaxCompute,選擇建立資源 > Python

    2. 建立資源對話方塊中,輸入名稱(樣本為pyodps_packagetest.py)。

      重要

      資源名稱只能包含中文、字母、數字、點、底線(_)、減號(-),且必須加尾碼名.py

    3. 單擊建立

    4. 在建立的Python資源中,輸入需要引用的Python指令碼,樣本如下。

      # import os
      # print os.getcwd()
      # print os.path.abspath('.')
      # print os.path.abspath('..')
      # print os.path.abspath(os.curdir)
      
      def printname():
          print 'test2'
      print 123
    5. 單擊工具列中的提交表徵圖。

  3. 建立PyODPS 2節點。

    1. 展開商務程序目錄下的目標商務程序,按右鍵MaxCompute,選擇建立節點 > PyODPS 2

    2. 建立節點對話方塊中,輸入名稱(樣本為pyodps_testpackage)。

      說明

      節點名稱必須是大小寫字母、中文、數字、底線(_)和小數點(.),且不能超過128個字元。

    3. 單擊確認

  4. 開啟PyODPS 2節點的編輯頁面,按右鍵目標Python資源名稱,選擇引用資源

    引用後,PyODPS 2節點中會自動寫入引用語句##@resource_reference{"pyodps_packagetest.py"}

    pyodps插圖

  5. 在PyODPS 2節點內輸入引用Python指令碼的代碼,樣本如下。

    ##@resource_reference{"pyodps_packagetest.py"} #用於引用之前建立的Python資源,該語句必須添加。
    
    import sys
    import os
    sys.path.append(os.path.dirname(os.path.abspath('pyodps_packagetest.py'))) #引入資源至工作空間。
    import pyodps_packagetest #引用資源,資源名需要刪除尾碼.py。
    pyodps_packagetest.printname() #調用方法。
  6. 單擊工具列中的運行表徵圖,在頁面下方的作業記錄地區查看結果。

    查看結果

依賴開源的三方包

如果您依賴一個開源的第三方包,可根據所使用的資源群組不同,按需選擇。

說明

您可以在工作空間詳情頁查看目標工作空間綁定的資源群組類型,從而確定使用哪種方式安裝依賴包,具體方法如下:

  1. 登入DataWorks執行個體列表頁,在頂部切換地區,然後找到目標工作空間,單擊操作列的詳情,進入工作空間詳情頁。

  2. 在左側導覽列單擊資源群組,查看已綁定資源群組的用途

    • 如果為通用型,則表示使用的Serverless資源群組。

    • 如果為資料調度,則表示使用的獨享調度資源群組。

Serverless資源群組(通用型資源群組)配置第三方包

Serverless資源群組支援自訂鏡像,您可以根據需要,在建立自訂鏡像時,選擇所需的第三方包進行安裝。然後在PyODPS任務的調度配置中,使用此鏡像。

配置說明

在建立鏡像頁面,按需配置需要的第三方包。建立鏡像的更多參數,請參見建立自訂鏡像

關鍵參數:

  • 鏡像名稱/IDdataworks_pyodps_task_pod

  • 支援任務類型:按需選擇PyODPS2PyODPS3

  • 安裝包:按需選擇需要使用的第三方包,可以按需選擇安裝方式,例如Python2、Python3、Yum或Script。

說明

更多詳細配置,請參見自訂鏡像配置樣本

獨享調度資源群組配置第三方包(不推薦)

說明

隨著產品演化,獨享調度資源群組已不再推薦使用,建議您使用Serverless資源群組。Serverless資源群組的更多資訊,請參見使用Serverless資源群組

該方法使用獨享調度資源群組,需要在獨享調度資源群組的營運助手中安裝第三方包,詳情請參見營運助手

  1. 登入DataWorks執行個體列表頁,在頂部切換地區,然後找到目標工作空間,單擊操作列的詳情,進入工作空間詳情頁。

  2. 在左側導覽列單擊資源群組,找到已綁定的獨享調度資源群組,單擊操作列的image > 營運助手,然後在營運助手右上方單擊建立命令

  3. 您可以在快捷安裝環境命令類型中,按需選擇需要安裝的包,也可以在手動輸入類型中,輸入安裝命令進行安裝。如沒有您需要的第三方包,請提交工單處理。

  4. 安裝了需要的三方包後,使用import命令匯入對應包即可使用。例如,通過營運助手安裝了oss2這個Python依賴包後,您可以在PyODPS 3節點中使用import oss2語句匯入oss2依賴包並使用。

安裝命令參考

如果使用自訂鏡像的Script或營運助手的手動輸入方式配置安裝命令,則可以參考如下命令安裝:

  • 如果依賴PyODPS 2節點,請執行如下命令。

    pip install <需要安裝的包>
    說明

    執行命令後,如果提示需要升級PIP版本,請執行命令pip install --upgrade pip

  • 如果依賴PyODPS 3節點,請執行如下命令。

    /home/tops/bin/pip3 install <需要安裝的包>
    說明
    • 執行命令後,如果提示需要升級PIP版本,請執行命令/home/tops/bin/pip3 install --upgrade pip

    • 如果出現報錯/home/admin/usertools/tools/cmd-0.sh:行3: /home/tops/bin/python3: 沒有那個檔案或目錄,請提交工單申請開啟許可權。