Pyspark CI CD 管道

Pyspark CI CD pipeline

有人为 pyspark 作业构建了 CI CD 管道吗?有人可以分享任何示例项目吗?或者关于如何做到这一点的任何想法。我们目前部署的所有代码都是 AWS S3 和 运行 在 EMR 上使用 --files、--pyfiles 参数进行 spark-submit。有没有办法将所有内容捆绑到一个 zip 文件中并部署作业?或者有什么更好的方法吗?

我可以分享一些关于使用 Jenkins 将 pyspark 部署到 GCP Dataproc 的经验。 您需要处理三个步骤:

  1. 使用 Jenkins 触发 shell 脚本创建 dataproc spark 集群(在你的情况下是 emr-spark-submit-step
  2. 用两种方法在 spark 集群中设置你的 python 库:

    2-1。使用带有依赖库的自定义图像安装 conda。

    2-2。存档你的 python 依赖库并上传到 s3,然后分配给 --pyfiles

  3. 使用 Jenkins 提交你的 pyspark 作业

以下是示例脚本:

#!/bin/bash

MASTER="spark://<master ip>:7077"
NAME="sample-pyspark"

PY_FILE="jobs.zip"
CMD="main.py --job sampleTask \
     --job-args profile=gcp"


SPARK_SUBMIT=$(which spark-submit)

export PYSPARK_PYTHON=/opt/pvmax-ml/miniconda3/envs/pyspark/bin/python

SUBMIT_COMMAND="$SPARK_SUBMIT \
                --master $MASTER \
                --deploy-mode client \
                --driver-memory 4g \
                --executor-memory 4g \
                --executor-cores 2 \
                --conf spark.app.name=$NAME \
                --conf spark.dynamicAllocation.enabled=true \
                --conf spark.network.timeout=120s \
                --conf spark.sql.broadcastTimeout=7200 \
                --conf spark.executor.heartbeatInterval=60 \
                --conf spark.rdd.compress=true \
                --conf spark.driver.maxResultSize=8g \
                --conf spark.rpc.message.maxSize=256 \
                --conf "spark.driver.extraJavaOptions=-Dfile.encoding=utf-8" \
                --py-files $PY_FILE \
                $CMD
                "


echo "$SUBMIT_COMMAND"

eval "$SUBMIT_COMMAND"