全部產品
Search
文件中心

Realtime Compute for Apache Flink:使用Python依賴

更新時間:Sep 13, 2024

您可以在Flink Python作業中使用自訂的Python虛擬環境、第三方Python包、JAR包和資料檔案等,本文為您介紹如何在Python作業中使用這些依賴。

背景資訊

本文通過以下情境為您介紹如何使用Python依賴:

使用自訂的Python虛擬環境

說明

VVR 4.x僅支援3.7版本的Python虛擬環境,VVR 6.x及以上的版本無此限制,您可以使用更高版本的Python虛擬環境。

Python支援構建虛擬環境,每個Python虛擬環境都有一套完整的Python運行環境,並且可以在這套虛擬環境中安裝一系列的Python依賴包。下文為您介紹如何準備Python的虛擬環境。

  1. 準備Python的虛擬環境。

    1. 在本地準備setup-pyflink-virtual-env.sh指令碼,其內容如下。

    2. set -e
      # 下載Python 3.10 miniconda.sh指令碼。
      wget "https://repo.continuum.io/miniconda/Miniconda3-py310_24.7.1-0-Linux-x86_64.sh" -O "miniconda.sh"
      
      # 為Python 3.10 miniconda.sh指令碼添加執行許可權。
      chmod +x miniconda.sh
      
      # 建立Python的虛擬環境。
      ./miniconda.sh -b -p venv
      
      # 啟用Conda Python虛擬環境。
      source venv/bin/activate ""
      
      # 安裝PyFlink依賴。
      # update the PyFlink version if needed
      pip install "apache-flink==1.17.2"
      
      # 關閉Conda Python虛擬環境。
      conda deactivate
      
      # 刪除緩衝的包。
      rm -rf venv/pkgs
      
      # 將準備好的Conda Python虛擬環境打包。
      zip -r venv.zip venv
      說明

      本文以作業為VVR 8.x,Python 3.10為例為您介紹,如果您需要使用其他VVR版本或安裝其他版本的Python的虛擬環境,則需要修改以下兩個參數:

      • miniconda.sh指令碼資訊:修改為您的目標版本地址資訊。

      • apache-flink:修改為您作業使用的VVR版本對應的Flink版本,Flink版本查看方法請參見如何查看當前作業的Flink版本?

    3. 在本地準備build.sh指令碼,其內容如下。

      #!/bin/bash
      set -e -x
      
      sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
      sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
      
      yum install -y zip wget
      
      cd /root/
      bash /build/setup-pyflink-virtual-env.sh
      mv venv.zip /build/
    4. 在命令列,執行如下命令,完成python虛擬環境的安裝。

      docker run -it --rm -v $PWD:/build  -w /build quay.io/pypa/manylinux2014_x86_64 ./build.sh

      執行完該命令後,會產生一個名字為venv.zip的檔案,本樣本為Python 3.10的虛擬環境。

      您也可以修改上述指令碼,在虛擬環境中安裝所需的第三方Python包。

  2. 在Python作業中使用Python虛擬環境。

    1. 登入Realtime Compute控制台

    2. 單擊目標工作空間操作列下的控制台

    3. 在左側導覽列,單擊檔案管理,上傳venv.zip檔案。

    4. 營運中心 > 作業營運頁面,單擊目標作業名稱。

    5. 部署詳情頁簽基礎配置地區Python Archives,選擇venv.zip檔案。

      如果SQL作業在虛擬環境中使用Python UDF,需要在運行參數配置地區的其他配置項,添加如下配置資訊。

      python.archives: oss://.../venv.zip
    6. 運行參數配置地區其他配置項,按照您作業的VVR版本添加對應的指定Python虛擬環境的安裝路徑的配置資訊。

      • vvr-6.x及以上版本

        python.executable: venv.zip/venv/bin/python
        python.client.executable: venv.zip/venv/bin/python
      • vvr-6.x以下版本

        python.executable: venv.zip/venv/bin/python

使用第三方Python包

說明

下述內容中的Zip SafePyPImanylinux屬於第三方搭建的網站,訪問時可能會存在無法開啟或訪問延遲的問題。

下面將從以下兩個情境為您介紹如何使用第三方Python包:

  • 使用可直接Import的第三方Python包

    如果您的第三方Python包是Zip Safe的,即不需要安裝即可直接在Python作業中使用。操作步驟如下:

    1. 下載可直接Import的第三方Python包。

      1. 在瀏覽器上開啟PyPI頁面。

      2. 在搜尋方塊中輸入目標第三方Python包名稱,例如apache-flink 1.12.2

      3. 在搜尋結果中,單擊目標結果名稱。

      4. 在左側導覽列,單擊Download files。

      5. 單擊檔案名稱中包含cp37-cp37m-manylinux1的包名稱進行下載。

    2. 登入Realtime Compute控制台

    3. 單擊目標工作空間操作列下的控制台

    4. 在左側導覽列,單擊檔案管理,上傳第三方Python包。

    5. 營運中心 > 作業營運頁面,單擊部署作業 > Python作業Python Libraries項,選擇所上傳的第三方Python包。

    6. 單擊儲存

  • 使用需要編譯的第三方Python包

    如果您的第三方Python包是tar.gz格式的壓縮包,或從其他地方下載的源碼包,且壓縮包的根目錄下存在setup.py檔案,則這種類型的第三方Python包通常需要先編譯才能被使用。您需要先在與Flink相容的環境下編譯第三方Python包,然後才可在Python作業中調用第三方Python包。

    推薦使用quay.io/pypa/manylinux2014_x86_64鏡像容器中的Python 3.7來編譯第三方Python包,使用該容器編譯產生的包相容絕大多數Linux環境,關於該鏡像容器的更多資訊請參見manylinux

    說明

    Python 3.7的安裝路徑為 /opt/python/cp37-cp37m/bin/python3

    下面以opencv-python-headless第三方Python包為例,介紹一下如何編譯和使用該第三方Python包。

    1. 編譯第三方Python包。

      1. 在本地準備requirements.txt檔案,其內容如下。

        opencv-python-headless
      2. 在本地準備build.sh指令碼,其內容如下。

        #!/bin/bash
        set -e -x
        
        sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
        sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
        
        yum install -y zip
        
        PYBIN=/opt/python/cp37-cp37m/bin
        #PYBIN=/opt/python/cp38-cp38/bin
        #PYBIN=/opt/python/cp39-cp39/bin
        #PYBIN=/opt/python/cp310-cp310/bin
        
        "${PYBIN}/pip" install --target __pypackages__ -r requirements.txt
        cd __pypackages__ && zip -r deps.zip . && mv deps.zip ../ && cd ..
        rm -rf __pypackages__
      3. 在CMD命令列,執行如下命令。

        docker run -it --rm -v $PWD:/build  -w /build quay.io/pypa/manylinux2014_x86_64 /bin/bash build.sh

        該命令執行完後,會產生一個名字為deps.zip的檔案,該檔案為編譯之後的第三方Python包。

        您也可以修改requirements.txt,安裝其他所需的第三方Python包。此外,requirements.txt檔案中可以指定多個Python依賴。

    2. 在Python作業中使用第三方Python包deps.zip

      1. 登入Realtime Compute控制台

      2. 單擊目標工作空間操作列下的控制台

      3. 在左側導覽列,單擊檔案管理,上傳deps.zip

      4. 營運中心 > 作業營運頁面單擊目標作業名稱,在部署詳情頁簽基礎配置地區,單擊編輯後,在Python Libraries項,選擇deps.zip

    1. 單擊儲存

使用JAR包

如果您的Flink Python作業中使用了Java類,例如作業中使用了Connector或者Java自訂函數時,可以通過如下方式來指定Connector或者Java自訂函數的JAR包。

  1. 登入Realtime Compute控制台

  2. 單擊目標工作空間操作列下的控制台

  3. 在左側導覽列,單擊檔案管理,上傳需要使用的JAR包。

  4. 營運中心 > 作業營運頁面單擊目標作業名稱,在部署詳情頁簽基礎配置地區,單擊編輯後,在附加依賴檔案項,選擇需要使用的JAR包。

  5. 運行參數配置地區其他配置項,添加配置資訊。

    假如需要依賴多個JAR包,且名字分別為jar1.jarjar2.jar,配置內容如下。

    pipeline.classpaths: 'file:///flink/usrlib/jar1.jar;file:///flink/usrlib/jar2.jar'
  6. 單擊儲存

使用資料檔案

說明

Flink暫不支援通過上傳資料檔案的方式來進行python作業調試。

下面將從兩個情境為您介紹如何使用資料檔案:

  • 通過Python Archives選項方式

    如果您的資料檔案的數量比較多時,您可以將資料檔案打包成一個ZIP包,然後通過如下方式在Python作業中使用。操作步驟如下:

    1. 登入Realtime Compute控制台

    2. 單擊目標工作空間操作列下的控制台

    3. 在左側導覽列,單擊檔案管理,上傳目標資料檔案ZIP包。

    4. 營運中心 > 作業營運頁面單擊目標作業名稱,在部署詳情頁簽基礎配置地區,單擊編輯後,Python Archives項,選擇需要使用的資料檔案ZIP包。

    5. 在Python自訂函數中,可以通過如下方式訪問資料檔案。假如資料檔案所在壓縮包名稱為mydata.zip

      def map():
          with open("mydata.zip/mydata/data.txt") as f:
          ...
  • 通過附加依賴檔案選項

    如果您的資料檔案數量比較少時,可以通過如下方式在Python作業中使用。操作步驟如下:

    1. 登入Realtime Compute控制台

    2. 單擊目標工作空間操作列下的控制台

    3. 在左側導覽列,單擊檔案管理,上傳目標資料檔案。

    4. 營運中心 > 作業營運頁面單擊目標作業名稱,在部署詳情頁簽基礎配置地區,單擊編輯後,,在附加依賴檔案項,選擇需要的資料檔案。

    5. 在Python自訂函數中,可以通過如下方式訪問資料檔案。以資料檔案名稱為data.txt為例的代碼如下。

      def map():
          with open("/flink/usrlib/data.txt") as f:
          ...

相關文檔