Pyspark CI CD 管道
Pyspark CI CD pipeline
有人为 pyspark 作业构建了 CI CD 管道吗?有人可以分享任何示例项目吗?或者关于如何做到这一点的任何想法。我们目前部署的所有代码都是 AWS S3 和 运行 在 EMR 上使用 --files、--pyfiles 参数进行 spark-submit。有没有办法将所有内容捆绑到一个 zip 文件中并部署作业?或者有什么更好的方法吗?
我可以分享一些关于使用 Jenkins 将 pyspark 部署到 GCP Dataproc 的经验。
您需要处理三个步骤:
- 使用 Jenkins 触发 shell 脚本创建 dataproc spark 集群(在你的情况下是 emr-spark-submit-step)
用两种方法在 spark 集群中设置你的 python 库:
2-1。使用带有依赖库的自定义图像安装 conda。
2-2。存档你的 python 依赖库并上传到 s3,然后分配给 --pyfiles
使用 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"
有人为 pyspark 作业构建了 CI CD 管道吗?有人可以分享任何示例项目吗?或者关于如何做到这一点的任何想法。我们目前部署的所有代码都是 AWS S3 和 运行 在 EMR 上使用 --files、--pyfiles 参数进行 spark-submit。有没有办法将所有内容捆绑到一个 zip 文件中并部署作业?或者有什么更好的方法吗?
我可以分享一些关于使用 Jenkins 将 pyspark 部署到 GCP Dataproc 的经验。 您需要处理三个步骤:
- 使用 Jenkins 触发 shell 脚本创建 dataproc spark 集群(在你的情况下是 emr-spark-submit-step)
用两种方法在 spark 集群中设置你的 python 库:
2-1。使用带有依赖库的自定义图像安装 conda。
2-2。存档你的 python 依赖库并上传到 s3,然后分配给 --pyfiles
使用 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"