本文档介绍如何排查将自定义容器与 Dataflow 搭配使用时可能遇到的问题。它侧重于容器或工作器无法启动的问题。如果工作器能够启动且工作正在进行,请按照排查流水线问题中的一般指南进行操作。
在与支持团队联系之前,请确保您已排除与容器映像相关的问题:
- 按照各步骤操作以在本地测试容器映像
- 在作业日志或工作器日志中搜索错误,并将找到的所有错误与常见错误指南进行比较。
- 确保用于启动流水线的 Apache Beam SDK 版本和语言版本与自定义容器映像上的 SDK 版本匹配。
- 如果使用 Java,请确保用于启动流水线的 Java 主要版本与容器映像中安装的版本匹配。
- 如果使用的是 Python,请确保用于启动流水线的 Python 主要版本和次要版本与容器映像中安装的版本匹配,并且映像不存在冲突的依赖项。您可以运行
pip check
进行确认。
查找与自定义容器相关的工作器日志
可以使用 Logs Explorer 微调与容器相关的错误消息的 Dataflow 工作器日志:
选择日志名称。自定义容器启动错误最有可能是下列其中一项:
dataflow.googleapis.com/kubelet
dataflow.googleapis.com/docker
dataflow.googleapis.com/worker-startup
dataflow.googleapis.com/harness-startup
选择
Dataflow Step
资源并指定job_id
。
如果您看到 Error Syncing pod...
日志消息,请遵循常见的错误指南。您可以使用 Logs Explorer 通过以下查询在 Dataflow 工作器日志中查询这些日志消息:
resource.type="dataflow_step" AND jsonPayload.message:("IMAGE_URI") AND severity="ERROR"
常见问题
以下是使用自定义容器时的一些常见问题。
作业有错误或失败,因为无法拉取容器映像
Dataflow 工作器必须能够访问自定义容器映像。如果工作器因无效的网址、错误配置的凭据或缺少网络访问权限而无法拉取映像,则工作器将无法启动。
对于未启动任何工作且多个工作器无法按顺序启动的批处理作业,Dataflow 会使作业失败。否则,Dataflow 会记录错误,但不会采取进一步的操作来避免破坏长时间运行的作业状态。
如需了解如何解决此问题,请参阅“排查 Dataflow 错误”页面中的映像拉取请求失败,发生错误。
工作器无法启动或工作没有进展
有时,如果 SDK 容器因错误而无法启动,则 Dataflow 无法确定该错误是永久性错误还是严重错误。然后,Dataflow 会持续尝试重启工作器。
如果没有明显错误,但您在 dataflow.googleapis.com/kubelet
中看到 [topologymanager] RemoveContainer
INFO
级日志,则这些日志指示自定义容器映像提前退出,并且未启动长时间运行的工作器 SDK 进程。
如果工作器已成功启动,但没有发生任何工作,则错误可能会阻止 SDK 容器启动。在这种情况下,诊断建议中会显示以下错误:
Failed to start container
此外,工作器日志不包含以下行:
Executing: python -m apache_beam.runners.worker.sdk_worker_main or Executing: java ... FnHarness
这些问题的常见原因包括:
- 软件包安装问题,例如由于依赖项问题而导致的
pip
安装错误。请参阅同步 pod 时出错 ...“StartContainer”失败 - 如果使用的容器与工作器虚拟机的 CPU 架构不兼容,则您可能会看到类似于
exec format error
的错误。如需了解详情,请参阅同步 pod 时出错 ...“StartContainer”失败。 - 自定义命令参数或在 Dockerfile 中设置的
ENTRYPOINT
错误。例如,自定义ENTRYPOINT
不会启动默认启动脚本/opt/apache/beam/boot
,也不会将参数适当地传递给此脚本。如需了解详情,请参阅修改容器入口点。 - Apache Beam SDK 版本与启动环境和运行时环境不匹配时的错误。在一种故障模式下,Apache Beam SDK 流水线选项中设置的默认值可能无法识别。例如,您可能会在工作器日志中看到诸如
sdk_worker_main.py: error: argument --flink_version: invalid choice: '1.16' (choose from '1.12', '1.13', '1.14', '1.15')
之类的错误。如需修复此错误,请在容器映像中安装与启动流水线相同的 Apache Beam SDK 版本。如需了解详情,请参阅使启动环境与运行时环境兼容。