Pyspark CI CD конвейер - PullRequest
       15

Pyspark CI CD конвейер

0 голосов
/ 12 марта 2019

Кто-нибудь создал конвейер CI CD для заданий pyspark?Есть ли пример проекта, которым кто-то может поделиться?Или любые идеи о том, как это сделать.В настоящее время мы развертываем весь наш код AWS S3 и запускаем spark-submit в EMR с параметрами --files, --pyfiles.Есть ли способ объединить все вместе в zip-файл и развернуть задания?Или есть способы получше?

1 Ответ

2 голосов
/ 12 марта 2019

Я могу поделиться некоторыми своими опытами по использованию Jenkins для развертывания pyspark в GCP Dataproc.Есть три шага, которые вам нужно обработать:

  1. Используйте Jenkins для запуска сценария оболочки для создания искрового кластера dataproc (в вашем случае это emr-spark-submit-step )
  2. Настройте вашу библиотеку Python в Spark Cluster двумя способами:

    2-1.Используйте пользовательский образ для установки conda с зависимостью lib.

    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"
...