安裝 Python 依附元件

本頁面說明如何安裝 Python 套件,並透過幾種常見的應用程式連線至 Cloud Composer 環境。

選項

系統會使用基本環境隨附的現有 Python 依附元件安裝依附元件。

如果您的 Python 依附元件沒有外部依附元件,並且與 Cloud Composer 的依附元件沒有衝突,您可以使用 GCP 主控台、Cloud SDK 或 Cloud Composer API,從 Python Package Index安裝 Python 依附元件

如果您有其他需求,請參考下列幾種選項。

選項 適用情況
本機 Python 程式庫 Python Package Index 中找不到您的 Python 依附元件,且程式庫沒有任何外部依附元件,例如 dist-packages。
外掛程式功能 您想使用外掛程式專屬功能,例如修改 Airflow 網頁介面。
PythonVirtualenvOperator 您的 Python 依附元件可在 Python Package Index 中找到,且沒有任何外部依附元件,但您不想為所有工作站安裝您的 Python 依附元件,或是該依附元件與 Cloud Composer 所需的依附元件相衝突。
KubernetespodOperator

您需要無法透過 pip 安裝的外部依附元件 (例如 dist-packages),或是您需要位在內部 pip 伺服器的外部依附元件。

這個選項需要額外的設定和維護,因此通常建議在其他選項都行不通時再使用。

事前準備

  • 如要在 Cloud Composer 環境中安裝 Python 套件,您必須具備以下權限:composer.environments.update。詳情請參閱 Cloud Composer 存取權控管一文。
  • 需求必須遵循 PEP-508 中指定的格式,其中每項需求都要以小寫指定,且包含套件名稱和選用的額外項目和版本指定碼。
  • 如果您使用 API 安裝自訂 Python 依附元件,所有 Cloud Composer 程序都會使用新安裝的 PyPI 依附元件執行。
  • 自訂 PyPI 依附元件可能會與 Airflow 需要的依附元件產生衝突,進而降低穩定性。
  • 部署至實際工作環境前,建議您先在 Airflow 工作站容器中對您的 PyPI 套件進行本機測試

透過 PyPi 安裝 Python 依附元件

如何為環境新增、更新或刪除 Python 依附元件:

主控台

指定套件名稱和版本指定碼,如下所示:

  • "pi-python-client", "==1.1.post1"
  • "go-api-python-client", "==1.0.0.dev187"

如果套件沒有版本指定碼,請使用空白字串做為值,例如 "glob2", " "

如要存取環境的 Python 依附元件,請按照下列步驟前往「PyPi dependencies」(PyPi 依附元件) 頁面:

  1. 在 Google Cloud Platform 中開啟「Environments」(環境) 頁面。

    開啟「Environments」(環境) 頁面

  2. 按一下要安裝、更新或刪除 Python 依附元件的環境名稱

  3. 選取 [PyPi dependencies] (PyPi 依附元件) 分頁標籤。

  4. 按一下 [Edit] (編輯) 按鈕。

  5. 如何新增依附元件:

    1. 按一下 [Add dependency] (新增依附元件) 按鈕。

    2. 在「Name」(名稱) 和「Version」(版本) 欄位中,輸入程式庫的名稱和版本。

  6. 如何更新現有依附元件:

    1. 針對您要更新的程式庫,選取其「Name」(名稱) 和/或「Version」(版本) 欄位。

    2. 輸入新的值。

  7. 如何刪除依附元件:

    1. 將滑鼠游標懸停在要刪除的依附元件名稱上。

    2. 按一下隨即顯示的垃圾桶圖示。

gcloud

requirements.txt 檔案傳送至 gcloud 指令列工具。在這個檔案中,請將每個需求指定碼分行列出。

requirements.txt 檔案範例

scipy>=0.13.3
scikit-learn
nltk[machine_learning]

requirements.txt 檔案傳送至 environments.set-python-dependencies 指令來設定安裝依附元件。

gcloud composer environments update ENVIRONMENT-NAME \\
--update-pypi-packages-from-file requirements.txt \\
--location LOCATION

指令會在作業完成時終止。如要避免等候,請使用 --async 標記。

如果依附元件衝突導致更新失敗,您的環境會繼續以現有依附元件運作。如果作業成功,您就可以在 DAG 中開始使用新安裝的 Python 依附元件。

REST

使用 projects.locations.environments.patch 方法,並指定 config.softwareConfig.pypiPackages 做為 updateMask 查詢參數的前置字串。

安裝本機 Python 程式庫

如何安裝內部或本機 Python 程式庫:

  1. 將依附元件放在 dags/ 資料夾的子目錄中。如要從子目錄匯入模組,模組路徑中的每個子目錄都必須包含 __init__.py 套件標記檔案。

    在這個範例中,依附元件為 coin_module.py

    dags/
      use_local_deps.py  # A DAG file.
      dependencies/
        __init__.py
        coin_module.py
    
  2. 從 DAG 定義檔匯入依附元件。

    例如:

    from dependencies import coin_module

連線至 Flower 網頁介面

Flower 是用於搭配 Celery 叢集使用的網頁工具,並且已預先安裝在您的環境中。您可以使用其網頁 UI,監控您環境的 Apache Airflow 工作站。

如何存取 Flower:

  1. 如要確認 Kubernetes Engine 叢集資訊,請查看您的環境:

    gcloud composer environments describe ENVIRONMENT-NAME /
        --location LOCATION

    叢集會列為 gkeCluster,叢集部署區域則會列為 location

    例如:

          gcloud composer environments describe environment-name --location us-central1
          config:
            airflowUri: https://uNNNNe0aNNbcd3fff-tp.appspot.com
            dagGcsPrefix: gs://us-central1-may18-test-00a47695-bucket/dags
            gkeCluster: projects/example-project/zones/us-central1-a/clusters/us-central1-environment-name-00a47695-gke
            nodeConfig:
              diskSizeGb: 100
              location: projects/example-project/zones/us-central1-a

    在這個範例中,叢集為 us-central1-environment-name-00a47695-gke,區域為 us-central1-a。您也可以在 GCP 主控台的「Environment details」(環境詳細資料) 頁面查看這些資訊。

  2. 連線至 Kubernetes Engine 叢集:

    gcloud container clusters get-credentials CLUSTER_NAME /
    --zone CLUSTER_ZONE

    例如:

    gcloud container clusters get-credentials us-central1-environment-name-00a47695-gke --zone us-central1-a
    Fetching cluster endpoint and auth data.
    kubeconfig entry generated for us-central1-environment-name-00a47695-gke.
  3. 查看工作站 pod,並選取要用來執行 Flower 的 pod:

    kubectl get pods

    例如:

    kubectl get pods
    NAME                                 READY     STATUS    RESTARTS   AGE
    airflow-redis-67f555bdb8-n6m9k       1/1       Running   0          13d
    airflow-scheduler-6cdf4f4ff7-dm4dm   2/2       Running   0          1h
    airflow-sqlproxy-54497bd557-nlqtg    1/1       Running   0          13d
    airflow-worker-c5c4b58c7-bl5bf       2/2       Running   0          1h
    airflow-worker-c5c4b58c7-szqhm       2/2       Running   0          1h
    airflow-worker-c5c4b58c7-zhmkv       2/2       Running   0          1h

    pod 名稱與規則運算式 "airflow-(worker|scheduler)-[-a-f0-9]+") 一致。

  4. 在工作站 pod 上執行 Flower:

    kubectl exec -it POD_NAME -c airflow-worker -- celery flower /
        --broker=redis://airflow-redis-service:6379/0 --port=5555

    例如:

    kubectl exec -it airflow-worker-c5c4b58c7-zhmkv -c airflow-worker -- celery flower
    --broker=redis://airflow-redis-service:6379/0 --port=5555
    [I 180601 20:35:55 command:139] Visit me at http://localhost:5555
    [I 180601 20:35:55 command:144] Broker: redis://airflow-redis-service:6379/0
  5. 在另外的終端機工作階段中,將本機通訊埠轉送至 Flower:

    kubectl port-forward POD_NAME 5555

    例如:

    kubectl port-forward airflow-worker-c5c4b58c7-zhmkv 5555
    Forwarding from 127.0.0.1:5555 -> 5555
  6. 如要存取網頁 UI,請在本機瀏覽器中前往 http://localhost:5555

安裝 SQLAlchemy 來存取 Airflow 資料庫

SQLAlchemy 是 Python SQL 工具包和物件關聯對應工具 (ORM)。您可以安裝 SQLAlchemy 並用其存取 Cloud Composer 的 Cloud SQL 執行個體。在安裝期間,Cloud Composer 會設定 Airflow 環境變數 AIRFLOW__CORE__SQL_ALCHEMY_CONN

如何安裝 SQLAlchemy:

  1. 在環境中安裝 sqlalchemy

    gcloud composer environments update ENVIRONMENT-NAME /
        --location LOCATION /
        --update-pypi-package "sqlalchemy"
    
  2. 如要確認 Kubernetes Engine 叢集資訊,請查看您的環境:

    gcloud composer environments describe ENVIRONMENT-NAME /
        --location LOCATION
  3. 連線至 Kubernetes Engine 叢集:

    gcloud container clusters get-credentials CLUSTER_NAME /
        --zone CLUSTER_LOCATION
  4. 查看工作站 pod 並選取要連線的 pod:

    kubectl get pods
  5. 使用 SSH 連線至工作站 pod:

    kubectl exec -it POD_NAME `-- /bin/bash`

    例如:

    kubectl exec -it airflow-worker-54c6b57789-66pnr -- /bin/bash
    Defaulting container name to airflow-worker.
    Use 'kubectl describe pod/airflow-worker-54c6b57789-66pnr' to see all of the containers in this pod.
    airflow@airflow-worker-54c6b57789-66pnr:/$

  6. 使用 sqlalchemy 程式庫與 Airflow 資料庫互動:

    python
    import airflow.configuration as config
    config.conf.get('core', 'sql_alchemy_conn')
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Cloud Composer