Dataflow Flex模板启动失败:Pip安装遇网络不可达错误
问题核心
启动Google Cloud Dataflow Flex模板时,管道图生成阶段触发Pip下载依赖的操作,因网络不可达引发NewConnectionError,最终导致subprocess.CalledProcessError(Pip返回非零状态码1)。
排查步骤
- 检查Dataflow工作节点的VPC网络:确认工作节点所在子网是否有对外访问权限,防火墙规则是否阻断了到PyPI源(如pypi.org:443)的出站流量
- 测试依赖下载可行性:在同VPC的虚拟机上执行
pip install -r requirements.txt,验证是否能正常拉取依赖,排除源本身故障 - 核对模板网络配置:确认Flex模板构建/启动时是否指定了正确的VPC/子网,是否开启了Private Google Access(针对无公网IP的节点)
- 检查代理设置:如果环境使用代理,确认Dataflow工作节点是否继承了正确的代理配置,避免因代理缺失导致网络不通
解决方法
- 开放出站网络权限:在VPC防火墙中添加规则,允许工作节点向
pypi.org的443端口发起出站请求;测试环境可直接允许所有HTTPS出站流量 - 切换内部PyPI源:如果VPC限制公网访问,搭建内部PyPI镜像,修改
requirements.txt或在启动模板时添加--extra-index-url <内部源地址>参数,指定从内部源拉取依赖 - 启用Private Google Access:若工作节点使用无公网IP的子网,开启该子网的Private Google Access,让节点通过Google内部网络访问PyPI服务
- 预安装依赖到模板镜像:构建Flex模板的Docker镜像时,在Dockerfile中提前执行
pip install -r requirements.txt,把依赖打包进镜像,彻底避免运行时动态下载依赖的网络问题
相关信息示例
核心错误日志:
subprocess.CalledProcessError: Command '['pip', 'install', '-r', '/tmp/requirements.txt']' returned non-zero exit status 1.
NewConnectionError: Failed to establish a new connection: [Errno 113] No route to host
requirements.txt配置示例:
apache-beam[gcp]2.46.0
pandas2.0.3
模板构建命令示例:
gcloud dataflow flex-template build gs://your-bucket/templates/flex-template.json \ --image-gcr-path gcr.io/your-project/dataflow-template:latest \ --sdk-language PYTHON \ --flex-template-base-image PYTHON39 \ --metadata-file metadata.json \ --requirements-file requirements.txt
模板运行命令示例:
gcloud dataflow flex-template run "job-name" \ --template-file-gcs-location gs://your-bucket/templates/flex-template.json \ --region us-central1 \ --service-account-email your-service-account@your-project.iam.gserviceaccount.com
内容的提问来源于stack exchange,提问作者ShubhGurukul
相关产品推荐
相关产品推荐

