如何让 extra_package 选项适用于 Dataflow Flex 模板?

问题描述 投票:0回答:2

我有一个 Dataflow Flex 模板,我正在尝试运行它,它必须安装一个私人存储库。我遵循了 Beam 文档here,它表示使用 --extra_package 管道选项来指定 tarball 的路径,而 Dataflow 文档here表示将该选项指定为元数据文件中的参数:

{
    "description": "Dataflow flex template test",
    "name": "dataflow-flex-test",
    "parameters": [
        {
            "name": "kafka_topic",
            "label": "kafka_topic",
            "helpText": "Specify a confluent kafka topic to read from."
        },
        {
            "name": "extra_package",
            "label": "extra_package",
            "helpText": "Specify a local package."
        }
    ]
}

这是我的运行命令:

gcloud dataflow flex-template run ${JOB_NAME} \
--template-file-gcs-location ${GCS_PATH}/templates/${TEMPLATE_TAG}/${TEMPLATE_NAME}.json \
--region ${GCP_REGION} \
--staging-location ${GCS_PATH}/staging \
--temp-location ${GCS_PATH}/temp \
--subnetwork ${SUBNETWORK} \
--parameters kafka_topic=${KAFKA_TOPIC} \
--parameters extra_package=${PACKAGE}

其中 package 只是我的包的名称 位于同一目录中。当我运行模板时,我得到:

ModuleNotFoundError: No module named <my_module>

我想知道 Flex 模板是否支持 extra_package 选项?我查看了日志,extra_package 在启动参数中,但它似乎什么也没做。我还检查了包含 SDK tarball、腌制主会话等的临时存储桶 - 当我认为它应该存在时,它也不存在。如何安装我的私人存储库以用于 Dataflow 作业?谢谢你。

python google-cloud-dataflow apache-beam
2个回答
0
投票

我通过忽略 --extra_package 命令行选项并使用 $FLEX_TEMPLATE_PYTHON_EXTRA_PACKAGES 环境变量在 Dockerfile 中指定我的自定义包来实现此工作。这正确地将其安装在工人身上。我在目录中使用了 tar.gz 文件以及我的 Dockerfile。


0
投票

这对我有用......确保 Dockerfile 从我的项目根目录引用 setup.py (在我的例子中是 /template )

#Dockerfile
ENV FLEX_TEMPLATE_PYTHON_SETUP_FILE="/template/setup.py"

然后确保 setup.py 使用相对路径列出我的子目录模块:

#setup.py
import setuptools
from setuptools import find_packages

setuptools.setup(
    packages=find_packages() +
    find_packages(where="./models") +
    find_packages(where="./pardo") +
    find_packages(where="./utils"),
    install_requires=[],
    name="Dataflow stuff"
)
© www.soinside.com 2019 - 2024. All rights reserved.