Dataflow Flex Template启动故障求助:重复作业名与依赖安装失败
Dataflow Flex Template自定义SDK容器镜像启动异常排查记录
我尝试启动Dataflow Flex Template时,为缩短Worker启动时间预先构建了自定义SDK容器镜像,过程中遇到以下问题:
- 未指定
sdk_container_image但提供requirements.txt时:Flex Template成功启动并构建执行图,但Worker因无权限安装私有包无法启动,出现Dataflow作业停滞、无Worker活动、依赖安装失败的错误。 - 指定预安装依赖的
sdk_container_image后:Dataflow作业启动,但未在当前作业中运行流水线,而是尝试以同名启动新流水线作业,触发DataflowJobAlreadyExistsError(重复作业名)错误。 - 为流水线指定第二个job_name后:流水线在独立作业中成功启动,但原Flex Template作业因轮询结果文件超时失败;流水线最后一步因内存不足导致SDK harness断开连接而失败。
- 使用DataflowRunner本地启动流水线时:可在单个作业名下成功运行。
相关文件与命令
Flex模板Dockerfile
FROM gcr.io/dataflow-templates-base/python39-template-launcher-base # 创建工作目录 ARG WORKDIR=/flex RUN mkdir -p ${WORKDIR} WORKDIR ${WORKDIR} # 由于Apache Beam基础镜像在2.24版本的变更,必须手动安装libffi-dev依赖 RUN apt-get update && apt-get install -y libffi-dev && rm -rf /var/lib/apt/lists/* COPY ./ ./ ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/launch_pipeline.py" # 安装流水线依赖 RUN pip install --no-cache-dir --upgrade pip setuptools wheel RUN pip install --no-cache-dir apache-beam[gcp]==2.41.0 RUN pip install --no-cache-dir -r requirements.txt ENTRYPOINT [ "/opt/google/dataflow/python_template_launcher" ]
Worker Dockerfile
# 构建Worker镜像 FROM apache/beam_python3.9_sdk:2.41.0 WORKDIR /worker COPY ./requirements.txt ./ RUN pip install --no-cache-dir --upgrade pip setuptools wheel RUN pip install --no-cache-dir -r requirements.txt
构建模板命令
gcloud dataflow flex-template build $TEMPLATE_LOCATION \ --image "$IMAGE_LOCATION" \ --sdk-language "PYTHON" \ --metadata-file "metadata.json"
启动模板命令
gcloud dataflow flex-template run ddjanke-local-flex \ --template-file-gcs-location=$TEMPLATE_LOCATION \ --project=$PROJECT \ --service-account-email=$EMAIL \ --parameters=[OTHER_ARGS...],sdk_container_image=$WORKER_IMAGE \ --additional-experiments=use_runner_v2
内容的提问来源于stack exchange,提问作者ddjanke
相关产品推荐
相关产品推荐

