为啥使用“--requirements_file”将依赖项上传到 GCS?

Posted

技术标签:

【中文标题】为啥使用“--requirements_file”将依赖项上传到 GCS?【英文标题】:Why using "--requirements_file" uploads dependencies onto GCS?为什么使用“--requirements_file”将依赖项上传到 GCS? 【发布时间】:2019-12-14 09:42:15 【问题描述】:

我目前正在使用这些参数生成一个模板:

        --runner DataflowRunner \
        --requirements_file requirements.txt \
        --project $GOOGLE_PROJECT_ID \
        --output $GENERATED_FILES_PATH/staging \
        --staging_location=$GENERATED_FILES_PATH/staging \
        --temp_location=$GENERATED_FILES_PATH/temp \
        --template_location=$GENERATED_FILES_PATH/templates/calculation-template \

SDK 正在将requirements.txt 中指定的依赖项上传到暂存部分的 GCS。我不明白...对我来说,使用这种文件将允许工作人员直接从官方 pip 注册表中提取依赖项,而不是从我的 GCS 中提取依赖项,对吧?

这使得运行这个命令很长时间,因为它需要上传包:/

任何解释为什么会发生?也许我做错了什么?

谢谢,

【问题讨论】:

【参考方案1】:

我相信这样做是为了让 Dataflow 工作器启动过程更加高效和一致(无论是在最初还是在自动缩放时)。如果没有这个,每次 Dataflow 工作人员启动时,该工作人员都必须直接连接到 PyPI 以查找最新匹配的依赖项版本。取而代之的是,一组依赖项在管道启动时暂存,并在整个管道执行过程中始终安装在工作人员中。

【讨论】:

这种行为是否得到保证?我没有在文档中看到它。这种实现将依赖项暂存到 GCS 而不是从 Internet 中提取,对 Dataflow 工作人员的网络功能产生了影响。

以上是关于为啥使用“--requirements_file”将依赖项上传到 GCS?的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 glTranslatef?为啥不直接更改渲染坐标?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥在参数周围使用 /*、*/ 以及为啥在提取数组长度时使用 >>>? [复制]

为啥我们使用 hadoop mapreduce 进行数据处理?为啥不在本地机器上做呢?

为啥 CoreGui Roblox 锁定在 DataModel 中,为啥受信任的用户不能使用 CoreScripts?

为啥有人应该在 git commit 之前使用 git add?或者为啥有人应该使用 git add 呢?