[英]Python apache beam dataflow worker-startup error: Failed to install packages: failed to install SDK: exit status 2
[英]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
,並且嘗試這樣做失敗了。
要解決此問題:
workflow
。 這是谷歌向我展示的最新版本。或者
pip install workflow
。這兩種方法都應該安裝所需的包。 安裝后,該特定錯誤消息應該消失。
希望這個回答對你有幫助!
你的里程可能會有所不同,但對我來說,以上都沒有奏效(Python 3.7)。
相反,解決方案似乎是在requirements.txt
文件中包含我的依賴項,然后在setup.py
中setup.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.