簡體   English   中英

Cloud Dataflow Python:安裝包失敗:安裝工作流失敗

[英]Cloud Dataflow Python: Failed to install packages: failed to install workflow

我正在嘗試在 DataflowRunner 上測試我的數據流管道。 我的代碼總是卡在 1 小時 1 分鍾並說:數據流似乎卡住了。 在挖掘 Dataflow stackdriver 的堆棧跟蹤時,我遇到了錯誤,指出Failed to install packages: failed to install workflow: exit status 1 我看到其他堆棧溢出消息說這可能是由於 pip 包不兼容造成的。 這導致我的工人啟動總是失敗。

這是我當前的 setup.py。 有人可以幫我理解我所缺少的。 作業 ID 為 2018-02-09_08_22_34-6196858167817670597。

設置文件

from setuptools import setup, find_packages


requires = [
            'numpy==1.14.0',
            'google-cloud-storage==1.7.0',
            'pandas==0.22.0',
            'sqlalchemy-vertica[pyodbc,turbodbc,vertica-python]==0.2.5',
            'sqlalchemy==1.2.2',
            'apache_beam[gcp]==2.2.0',
            'google-cloud-dataflow==2.2.0'
            ]

setup(
    name="dataflow_pipeline_dependencies",
    version="1.0.0",
    description="Beam pipeline for flattening ism data",
    packages=find_packages(),
    install_requires=requires
)

setup.py所需的包中包含“工作流”包。 包含后錯誤解決。

from setuptools import setup, find_packages


requires = [
            'numpy==1.14.0',
            'google-cloud-storage==1.7.0',
            'pandas==0.22.0',
            'sqlalchemy-vertica[pyodbc,turbodbc,vertica-python]==0.2.5',
            'sqlalchemy==1.2.2',
            'apache_beam[gcp]==2.2.0',
            'google-cloud-dataflow==2.2.0',
            'workflow' # Include this line
            ]

setup(
    name="dataflow_pipeline_dependencies",
    version="1.0.0",
    description="Beam pipeline for flattening ism data",
    packages=find_packages(),
    install_requires=requires
)

所以我發現在這種情況下工作流不是 pypi 包,而是由包含源代碼的 Dataflow 創建的 .tar 的名稱。 Dataflow 將壓縮您的源代碼並在您的暫存環境中創建一個工作流.tar 文件,然后它會嘗試運行 pip install workflow.tar。 如果此安裝出現任何問題,它將無法將軟件包安裝到工作人員上。

我的問題通過一些事情得到解決:1) 我在我的需求中添加了 6==1.10.0,正如我從以下內容中發現的:工作流失敗。 原因:(35af2d4d3e5569e4):Dataflow 似乎卡住了,最新版本的 6 存在問題。 2) 我意識到 sqlalchemy-vertica 和 sqlalchemy 不同步並且存在依賴版本問題。 因此,我消除了對兩者的需求,並找到了一個不同的 vertica 客戶端。

在處理大量 Python 包以及如何管理所有版本、不兼容性以及每個人的需求和需求方面,我不是天才。

但是,我可以閱讀錯誤消息。

在您的情況下,消息顯示“無法安裝工作流” 在快速谷歌搜索后,我發現“工作流程”實際上是一個 Python 包。

因此,錯誤只是抱怨您尚未安裝workflow ,並且嘗試這樣做失敗了。

要解決此問題

  • 從此PyPI鏈接安裝workflow 這是谷歌向我展示的最新版本。

或者

  • 執行常規的pip install workflow

這兩種方法都應該安裝所需的包。 安裝后,該特定錯誤消息應該消失。

希望這個回答對你有幫助!

你的里程可能會有所不同,但對我來說,以上都沒有奏效(Python 3.7)。

相反,解決方案似乎是在requirements.txt文件中包含我的依賴項,然后在setup.pysetup.py其他所有內容。 重要的是我沒有將requirements.txt行加載到install_requires屬性中。 無論我是否這樣做,包括workflow與否, install_requires似乎都會導致我出現此錯誤。

相反,我的setup.py根本沒有指定依賴項。 在運行管道時,我同時提供了--requirements_file--setup_file參數。 這為我解決了這個問題,並且管道的構建和啟動方式存在顯着差異,因為依賴項以這種方式存儲在暫存位置,而之前不是。

例如:

設置文件

import setuptools

setuptools.setup(
    name='my_pipeline',
    version='0.0.0',
    packages=setuptools.find_packages()
)

要求.txt

google-cloud-bigquery==1.24.0
google-cloud-storage==1.25.0
jinja2==2.11.1
[...etc...]

run_pipeline.sh

#!/usr/bin/env bash

[...code to set vars...]

if [ "${1}" = "dataflow" ]; then
  RUNNER="--runner DataflowRunner"
fi

python "${PIPELINE_FILE}" \
    --output "${OUTPUT}" \
    --project myproject \
    --region us-west1 \
    --temp_location "${TEMP}" \
    --staging_location "${STAGING}" \
    --no_use_public_ips \
    --requirements_file requirements.txt \
    --setup_file "./setup.py" \
    ${RUNNER}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM