Dataflow flex-template作业执行Timeout in polling result file错误如何解决
你关于基础镜像未默认设置ENTRYPOINT的判断是正确的,你显式指定ENTRYPOINT的操作符合Dataflow Flex模板的要求,这部分配置没有问题。
下面是你可能遗漏的配置点及修复方案:
运行时网络连通性校验
你在构建镜像阶段使用了公司代理拉取依赖,但是运行阶段完全清空了代理配置,如果你的Dataflow作业运行在公司内部VPC环境下,访问谷歌云服务仍需要走代理或者配置私有访问通路:- 确认作业所在VPC已开启私有谷歌访问(Private Google Access),允许VPC内实例不经过公网访问谷歌云服务
- 若必须使用代理访问公网,不要清空运行时的代理环境变量,保留你配置的
http_proxy、https_proxy、no_proxy参数,避免作业实例无法访问GCS存储桶 - 可以用同VPC下的测试VM拉取你的镜像启动后,执行
gsutil ls 你报错的GCS路径验证连通性,若该命令也超时则可确认是网络问题
证书适配配置缺失
你已经将公司CA证书导入系统证书库,但Python生态下的各类HTTP客户端可能默认使用内置CA证书,不会读取系统证书库,会导致访问GCS接口时证书校验失败触发超时,在Dockerfile中添加如下环境变量即可:ENV REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt ENV GRPC_DEFAULT_SSL_ROOTS_FILE_PATH=/etc/ssl/certs/ca-certificates.crt依赖缓存目录权限问题
你将依赖预下载到/tmp/dataflow-requirements-cache目录,默认情况下该目录仅root用户有读写权限,而Dataflow作业默认使用非root用户运行,会因为无法读取缓存依赖导致启动超时,在Dockerfile中添加一行修正权限即可:RUN chmod -R 755 /tmp/dataflow-requirements-cache版本兼容性问题
你使用的apache-beam 2.32.0最高仅支持Python3.8,若你使用的基础镜像是最新的python3-template-launcher-base(默认Python版本为3.9+),会出现版本不兼容导致作业进程启动失败,将基础镜像替换为和你本地DirectRunner运行环境Python版本一致的官方镜像即可,比如本地用Python3.8的话修改第一行为:FROM gcr.io/dataflow-templates-base/python38-template-launcher-base:latest提交参数校验
提交Flex模板作业时必须显式指定--sdk_container_image参数为你打包上传到镜像仓库的镜像地址,若未指定该参数,Dataflow会使用默认SDK镜像,不会加载你打包的代码和依赖,也会触发该超时错误。
内容的提问来源于stack exchange,提问作者aaron02

