שימוש במאגרי תגים מותאמים אישית

ב-Managed Service for Apache Spark ללא שרת, עומסי העבודה פועלים בתוך קונטיינרים של Docker. הקונטיינר מספק את סביבת זמן הריצה לתהליכי ה-driver וה-executor של עומס העבודה. כברירת מחדל, Managed Service for Apache Spark משתמש בקובץ אימג' של קונטיינר שכולל את חבילות ברירת המחדל של Spark, ‏Java, ‏Python ו-R שמשויכות לגרסת הפצה של סביבת זמן ריצה. ‫batches API של Managed Service for Apache Spark מאפשר להשתמש בקובץ אימג' של קונטיינר בהתאמה אישית במקום בקובץ ברירת המחדל. בדרך כלל, קובץ אימג' של קונטיינר בהתאמה אישית מוסיף יחסי תלות של עומס עבודה ב-Spark ב-Java או ב-Python, שלא מסופקים על ידי קובץ האימג' של הקונטיינר שמוגדר כברירת מחדל. חשוב: אל תכללו את Spark בקובץ האימג' של הקונטיינר בהתאמה אישית. Managed Service for Apache Spark יטמיע את Spark בקונטיינר בזמן הריצה.

שליחת עומס עבודה באצווה של Spark באמצעות קובץ אימג' של קונטיינר בהתאמה אישית

gcloud

כדי לציין את קובץ האימג' של הקונטיינר בהתאמה אישית כששולחים עומס עבודה של Spark באצווה, משתמשים בפקודה gcloud dataproc batches submit spark עם הדגל --container-image.

gcloud dataproc batches submit spark \
    --container-image=custom-image, for example, "gcr.io/my-project-id/my-image:1.0.1" \
    --region=region \
    --jars=path to user workload jar located in Cloud Storage or included in the custom container \
    --class=The fully qualified name of a class in the jar file, such as org.apache.spark.examples.SparkPi \
    -- add any workload arguments here

הערות:

  • ‫Custom-image: מציינים את קובץ האימג' של הקונטיינר בהתאמה אישית באמצעות הפורמט הבא של שם קובץ האימג' ב-Container Registry: ‏{hostname}/{project-id}/{image}:{tag}, לדוגמה, "gcr.io/my-project-id/my-image:1.0.1". הערה: אתם צריכים לארח את קובץ האימג' של הקונטיינר בהתאמה אישית ב-Container Registry או ב-Artifact Registry (GAR). ‫(Managed Service for Apache Spark לא יכול לאחזר קונטיינרים ממאגרים אחרים).
  • ‫--jars: מציינים נתיב לעומס עבודה של משתמש שנכלל בקובץ האימג' של הקונטיינר בהתאמה אישית או שנמצא ב-Cloud Storage, לדוגמה file:///opt/spark/jars/spark-examples.jar או gs://my-bucket/spark/jars/spark-examples.jar.
  • אפשרויות אחרות לפקודות של אצווה: אתם יכולים להוסיף דגלים אופציונליים אחרים לפקודות של אצווה, למשל כדי להשתמש בשרת היסטוריה מתמיד (PHS). הערה: שרת ה-PHS חייב להיות באזור שבו אתם מריצים את עומסי העבודה באצווה.
  • ‫workload arguments: אפשר להוסיף כל ארגומנט של עומס עבודה על ידי הוספת "--" בסוף הפקודה, ואחריו את הארגומנטים של עומס העבודה.

REST

קובץ האימג' של הקונטיינר בהתאמה אישית מסופק דרך השדה RuntimeConfig.containerImage כחלק מבקשת API מסוג batches.create.

בדוגמה הבאה מוסבר איך להשתמש בקונטיינר בהתאמה אישית כדי לשלוח עומס עבודה באצווה באמצעות Managed Service for Apache Spark batches.create API.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט ב-Google Cloud
  • ‫region: region
  • ‫custom-container-image: מציינים את קובץ האימג' של הקונטיינר בהתאמה אישית באמצעות הפורמט הבא למתן שמות לקובצי אימג' ב-Container Registry: ‏{hostname}/{project-id}/{image}:{tag}, לדוגמה, "gcr.io/my-project-id/my-image:1.0.1". הערה: אתם צריכים לארח את הקונטיינר בהתאמה אישית ב-Container Registry או ב-Artifact Registry. ‫(Managed Service for Apache Spark לא יכול לאחזר קונטיינרים ממאגרים אחרים).
  • ‫jar-uri: מציינים נתיב לקובץ JAR של עומס עבודה שנכלל בקובץ האימג' של הקונטיינר בהתאמה אישית או שנמצא ב-Cloud Storage, לדוגמה, "/opt/spark/jars/spark-examples.jar" או "gs:///spark/jars/spark-examples.jar".
  • class: השם המלא של מחלקה בקובץ ה-JAR, למשל "org.apache.spark.examples.SparkPi".
  • אפשרויות אחרות: אתם יכולים להשתמש בשדות אחרים של משאבי עומס עבודה באצווה, למשל בשדה sparkBatch.args כדי להעביר ארגומנטים לעומס העבודה (מידע נוסף זמין במסמכי התיעוד של המשאב Batch). כדי להשתמש בשרת היסטוריה מתמיד (PHS), קראו את המאמר הגדרת שרת היסטוריה מתמיד. הערה: שרת ה-PHS חייב להיות באזור שבו אתם מריצים את עומסי העבודה באצווה.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://dataproc.googleapis.com/v1/projects/project-id/locations/region/batches

תוכן בקשת JSON:

{
  "runtimeConfig":{
    "containerImage":"custom-container-image
  },
  "sparkBatch":{
    "jarFileUris":[
      "jar-uri"
    ],
    "mainClass":"class"
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

{
"name":"projects/project-id/locations/region/batches/batch-id",
  "uuid":",uuid",
  "createTime":"2021-07-22T17:03:46.393957Z",
  "runtimeConfig":{
    "containerImage":"gcr.io/my-project/my-image:1.0.1"
  },
  "sparkBatch":{
    "mainClass":"org.apache.spark.examples.SparkPi",
    "jarFileUris":[
      "/opt/spark/jars/spark-examples.jar"
    ]
  },
  "runtimeInfo":{
    "outputUri":"gs://dataproc-.../driveroutput"
  },
  "state":"SUCCEEDED",
  "stateTime":"2021-07-22T17:06:30.301789Z",
  "creator":"account-email-address",
  "runtimeConfig":{
    "properties":{
      "spark:spark.executor.instances":"2",
      "spark:spark.driver.cores":"2",
      "spark:spark.executor.cores":"2",
      "spark:spark.app.name":"projects/project-id/locations/region/batches/batch-id"
    }
  },
  "environmentConfig":{
    "peripheralsConfig":{
      "sparkHistoryServerConfig":{
      }
    }
  },
  "operation":"projects/project-id/regions/region/operation-id"
}

יצירת קובץ אימג' בהתאמה אישית של קונטיינר

קובצי אימג' של קונטיינרים בהתאמה אישית ב-Managed Service for Apache Spark הם קובצי אימג' של Docker. אתם יכולים להשתמש בכלים ליצירת קובצי אימג' של Docker כדי ליצור קובצי אימג' של קונטיינרים בהתאמה אישית, אבל קובצי האימג' צריכים לעמוד בתנאים מסוימים כדי להתאים ל-Managed Service for Apache Spark. בקטעים הבאים מוסברים התנאים האלה.

מערכת הפעלה

אתם יכולים לבחור כל קובץ אימג' בסיסי של מערכת הפעלה בשביל קובץ האימג' של הקונטיינר בהתאמה אישית.

המלצה: השתמשו בתמונות ברירת המחדל של Debian 12, לדוגמה debian:12-slim, כי הן נבדקו כדי למנוע בעיות תאימות.

שירותים

בקובץ האימג' של הקונטיינר בהתאמה אישית, צריך לכלול את חבילות השירות הבאות שנדרשות להרצת Spark:

  • procps
  • tini

כדי להריץ את XGBoost מ-Spark (Java או Scala), צריך לכלול את libgomp1

משתמש במאגר התגים

‫Managed Service for Apache Spark מריץ קונטיינרים בתור משתמש Linux ‏spark עם מזהה UID ‏1099 ומזהה GID ‏1099. המערכת מתעלמת מהוראות USER שמוגדרות בקובצי Docker של קובצי אימג' של קונטיינרים בהתאמה אישית בזמן הריצה. משתמשים ב-UID וב-GID להרשאות של מערכת הקבצים. לדוגמה, אם מוסיפים קובץ jar ב-/opt/spark/jars/my-lib.jar בתמונה כתלות של עומס עבודה, צריך לתת למשתמש spark הרשאת קריאה לקובץ.

סטרימינג של תמונות

בדרך כלל, Managed Service for Apache Spark מתחיל עומס עבודה שדורש קובץ אימג' של קונטיינר בהתאמה אישית על ידי הורדת קובץ האימג' המלא לדיסק. זה יכול לגרום לעיכוב בזמן ההפעלה, במיוחד ללקוחות עם תמונות גדולות.

במקום זאת, אתם יכולים להשתמש בסטרימינג של תמונות, שיטה שבה נתוני התמונות נשלפים לפי הצורך. כך אפשר להתחיל את עומס העבודה בלי לחכות להורדה של כל קובץ האימג', וכך לשפר את זמן ההפעלה. כדי להפעיל סטרימינג של תמונות, צריך להפעיל את Container File System API. אתם צריכים גם לאחסן את קובצי האימג' של הקונטיינרים ב-Artifact Registry, והמאגר של Artifact Registry צריך להיות באותו אזור של עומס העבודה ב-Managed Service for Apache Spark, או במספר אזורים שתואמים לאזור שבו פועל עומס העבודה. אם Managed Service for Apache Spark לא תומך בקובץ האימג' או ששירות הסטרימינג של קובצי האימג' לא זמין, ההטמעה של הסטרימינג מורידה את קובץ האימג' כולו.

שימו לב שאנחנו לא תומכים באפשרויות הבאות בסטרימינג של תמונות:

במקרים כאלה, Managed Service for Apache Spark שולף את כל קובץ האימג' לפני שהוא מתחיל את עומס העבודה.

דרישות נוספות

  • אם אתם משתמשים ב-VPC Service Controls כדי להגן על קובצי האימג' של הקונטיינרים, ובנוסף אתם משתמשים בסטרימינג של קובצי אימג', אתם צריכים לכלול בגבולות הגזרה לשירות גם את Image streaming API‏ (containerfilesystem.googleapis.com).

  • אם עומס העבודה של Spark לא משתמש בחשבון השירות שמוגדר כברירת מחדל, צריך לוודא שלחשבון השירות בהתאמה אישית יש את התפקיד Service Usage Consumer ‏(roles/serviceusage.serviceUsageConsumer) ב-IAM בפרויקט שמארח את קובץ האימג' של הקונטיינר.

Spark

אל תכללו את Spark בקובץ האימג' של הקונטיינר בהתאמה אישית. בזמן הריצה, Managed Service for Apache Spark טוען קובצי בינארי והגדרות של Spark מהמארח לקונטיינר: קובצי הבינארי נטענים לספרייה /usr/lib/spark וההגדרות נטענות לספרייה /etc/spark/conf. בזמן הריצה, Managed Service for Apache Spark מחליף את הקבצים הקיימים בספריות האלה.

סביבת זמן ריצה של Java

אל תכללו סביבת זמן ריצה של Java‏ (JRE) משלכם בקובץ האימג' של הקונטיינר בהתאמה אישית. בזמן הריצה, Managed Service for Apache Spark טוען את OpenJDK מהמארח לקונטיינר. אם תכללו JRE בקובץ האימג' של הקונטיינר בהתאמה אישית, המערכת תתעלם ממנו.

חבילות Java

אתם יכולים לכלול קובצי jar כתלויות של עומס עבודה ב-Spark בקובץ האימג' של הקונטיינר בהתאמה אישית, ולהגדיר את משתנה הסביבה SPARK_EXTRA_CLASSPATH כך שיכלול את קובצי ה-jar. ‫Managed Service for Apache Spark יוסיף את הערך של משתנה הסביבה ב-classpath של תהליכי Spark JVM. המלצה: צריך לשים קובצי JAR בספרייה /opt/spark/jars ולהגדיר את SPARK_EXTRA_CLASSPATH לערך /opt/spark/jars/*.

אפשר לכלול את קובץ ה-JAR של עומס העבודה בקובץ האימג' של הקונטיינר בהתאמה אישית, ואז להפנות אליו באמצעות נתיב מקומי כששולחים את עומס העבודה, לדוגמה file:///opt/spark/jars/my-spark-job.jar (דוגמה לכך מופיעה במאמר שליחת עומס עבודה באצווה של Spark באמצעות קובץ אימג' של קונטיינר בהתאמה אישית).

חבילות Python

כברירת מחדל, Managed Service for Apache Spark טוען סביבת Conda שנוצרה באמצעות מאגר OSS Conda-Forge מהמארח לספרייה /opt/managed-spark/conda בקונטיינר בזמן הריצה. ‫PYSPARK_PYTHON מוגדר לערך /opt/managed-spark/conda/bin/python. ספריית הבסיס שלו, /opt/managed-spark/conda/bin, כלולה ב-PATH.

אתם יכולים לכלול את סביבת Python עם חבילות בספרייה אחרת בקובץ האימג' של הקונטיינר בהתאמה אישית, למשל ב-/opt/conda, ולהגדיר את משתנה הסביבה PYSPARK_PYTHON ל-/opt/conda/bin/python.

קובץ האימג' של הקונטיינר בהתאמה אישית יכול לכלול מודולים אחרים של Python שלא נכללים בסביבת Python, למשל סקריפטים של Python עם פונקציות בסיסיות. מגדירים את משתנה הסביבה PYTHONPATH כך שיכלול את הספריות שבהן נמצאים המודולים.

סביבת R

אתם יכולים להתאים אישית את סביבת R בקובץ האימג' של הקונטיינר בהתאמה אישית, באחת מהדרכים הבאות:

  • משתמשים ב-Conda כדי לנהל ולהתקין חבילות R מהערוץ conda-forge.
  • מוסיפים מאגר R למערכת ההפעלה Linux של קובץ האימג' של הקונטיינר, ומתקינים חבילות R באמצעות מנהל החבילות של מערכת ההפעלה Linux (ראו אינדקס חבילות התוכנה של R).

כשמשתמשים באחת מהאפשרויות, צריך להגדיר את משתנה הסביבה R_HOME כך שיצביע על סביבת ה-R בהתאמה אישית. חריג: אם אתם משתמשים ב-Conda גם כדי לנהל את סביבת R וגם כדי להתאים אישית את סביבת Python, אתם לא צריכים להגדיר את משתנה הסביבה R_HOME. הוא מוגדר באופן אוטומטי על סמך משתנה הסביבה PYSPARK_PYTHON.

דוגמה ליצירת קובץ אימג' של קונטיינר בהתאמה אישית

בקטע הזה מופיעות דוגמאות ליצירת קובצי אימג' של קונטיינרים בהתאמה אישית, כולל דוגמאות לDockerfiles ואחריהן פקודות build. דוגמה אחת כוללת את ההגדרות המינימליות שנדרשות כדי ליצור קובץ אימג'. הדוגמה השנייה כוללת דוגמאות להגדרות נוספות, כולל ספריות Python ו-R.

המלצה על מיקום משותף של ארכיטקטורה

כדי לוודא שהקונטיינר יופעל במהירות באמצעות Google Cloud(Container File System API) ולמנוע עמלות על העברת נתונים בין אזורים, השירותים הבאים צריכים להיות ממוקמים באותו אזור:

  • Artifact Registry
  • קטגוריה של Cloud Storage
  • עומס עבודה באצווה של Managed Service for Apache Spark

שלב 1: הגדרת הסביבה

פותחים את הטרמינל או את Google Cloud Shell ומגדירים את משתני הסביבה הבאים כדי לפשט את תהליך הפריסה.

export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="us-east1"
export REPO_NAME="spark-images"
export BUCKET_NAME="spark-jobs-bucket-${PROJECT_ID}-${REGION}"

שלב 2: הגדרת קובץ Docker

הגדרות מינימליות

# Recommendation: Use Debian 12.
FROM debian:12-slim

# Suppress interactive prompts.
ENV DEBIAN_FRONTEND=noninteractive

# Install utilities required by Spark scripts.
RUN apt update && apt install -y procps tini libjemalloc2

# Enable jemalloc as default memory allocator.
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2

# Create the 'spark' group/user.
# The GID and UID must be 1099. Home directory is required.
RUN groupadd -g 1099 spark
RUN useradd -u 1099 -g 1099 -d /home/spark -m spark

USER spark
      

הגדרות נוספות

# Recommendation: Use Debian 12.
FROM debian:12-slim

# Suppress interactive prompts.
ENV DEBIAN_FRONTEND=noninteractive

# Install utilities required by Spark scripts.
RUN apt update && apt install -y procps tini libjemalloc2

# Enable jemalloc as default memory allocator
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2

# Install utilities required by XGBoost for Spark.
RUN apt install -y procps libgomp1

# Install and configure Miniconda3.
ENV CONDA_HOME=/opt/miniforge3
ENV PYSPARK_PYTHON=${CONDA_HOME}/bin/python
ENV PATH=${CONDA_HOME}/bin:${PATH}
ADD https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh .
RUN bash Miniforge3-Linux-x86_64.sh -b -p /opt/miniforge3 \
  && ${CONDA_HOME}/bin/conda config --system --set always_yes True \
  && ${CONDA_HOME}/bin/conda config --system --set auto_update_conda False \
  && ${CONDA_HOME}/bin/conda config --system --set channel_priority strict
# Packages ipython and ipykernel are required if using custom conda and want to
# use this container for running notebooks.
RUN ${CONDA_HOME}/bin/mamba install ipython ipykernel jupyter

# Install Google Cloud SDK.
RUN ${CONDA_HOME}/bin/mamba install -n base google-cloud-sdk

# Install Conda packages.
#
# The following packages are installed in the default image.
# Recommendation: include all packages.
#
# Use mamba to quickly install packages.
RUN ${CONDA_HOME}/bin/mamba install -n base \
    accelerate \
    bigframes \
    cython \
    deepspeed \
    evaluate \
    fastavro \
    fastparquet \
    gcsfs \
    google-cloud-aiplatform \
    google-cloud-bigquery-storage \
    google-cloud-bigquery[pandas] \
    google-cloud-bigtable \
    google-cloud-container \
    google-cloud-datacatalog \
    google-cloud-dataproc \
    google-cloud-datastore \
    google-cloud-language \
    google-cloud-logging \
    google-cloud-monitoring \
    google-cloud-pubsub \
    google-cloud-redis \
    google-cloud-spanner \
    google-cloud-speech \
    google-cloud-storage \
    google-cloud-texttospeech \
    google-cloud-translate \
    google-cloud-vision \
    langchain \
    lightgbm \
    koalas \
    matplotlib \
    mlflow \
    nltk \
    numba \
    numpy \
    openblas \
    orc \
    pandas \
    pyarrow \
    pynvml \
    pysal \
    pytables \
    python \
    pytorch-cpu \
    regex \
    requests \
    rtree \
    scikit-image \
    scikit-learn \
    scipy \
    seaborn \
    sentence-transformers \
    sqlalchemy \
    sympy \
    tokenizers \
    transformers \
    virtualenv \
    xgboost

# Install pip packages.
RUN ${PYSPARK_PYTHON} -m pip install \
    spark-tensorflow-distributor \
    torcheval

# Install R and R libraries.
RUN ${CONDA_HOME}/bin/mamba install -n base \
    r-askpass \
    r-assertthat \
    r-backports \
    r-bit \
    r-bit64 \
    r-blob \
    r-boot \
    r-brew \
    r-broom \
    r-callr \
    r-caret \
    r-cellranger \
    r-chron \
    r-class \
    r-cli \
    r-clipr \
    r-cluster \
    r-codetools \
    r-colorspace \
    r-commonmark \
    r-cpp11 \
    r-crayon \
    r-curl \
    r-data.table \
    r-dbi \
    r-dbplyr \
    r-desc \
    r-devtools \
    r-digest \
    r-dplyr \
    r-ellipsis \
    r-evaluate \
    r-fansi \
    r-fastmap \
    r-forcats \
    r-foreach \
    r-foreign \
    r-fs \
    r-future \
    r-generics \
    r-ggplot2 \
    r-gh \
    r-glmnet \
    r-globals \
    r-glue \
    r-gower \
    r-gtable \
    r-haven \
    r-highr \
    r-hms \
    r-htmltools \
    r-htmlwidgets \
    r-httpuv \
    r-httr \
    r-hwriter \
    r-ini \
    r-ipred \
    r-isoband \
    r-iterators \
    r-jsonlite \
    r-kernsmooth \
    r-knitr \
    r-labeling \
    r-later \
    r-lattice \
    r-lava \
    r-lifecycle \
    r-listenv \
    r-lubridate \
    r-magrittr \
    r-markdown \
    r-mass \
    r-matrix \
    r-memoise \
    r-mgcv \
    r-mime \
    r-modelmetrics \
    r-modelr \
    r-munsell \
    r-nlme \
    r-nnet \
    r-numderiv \
    r-openssl \
    r-pillar \
    r-pkgbuild \
    r-pkgconfig \
    r-pkgload \
    r-plogr \
    r-plyr \
    r-praise \
    r-prettyunits \
    r-processx \
    r-prodlim \
    r-progress \
    r-promises \
    r-proto \
    r-ps \
    r-purrr \
    r-r6 \
    r-randomforest \
    r-rappdirs \
    r-rcmdcheck \
    r-rcolorbrewer \
    r-rcpp \
    r-rcurl \
    r-readr \
    r-readxl \
    r-recipes \
    r-recommended \
    r-rematch \
    r-remotes \
    r-reprex \
    r-reshape2 \
    r-rlang \
    r-rmarkdown \
    r-rodbc \
    r-roxygen2 \
    r-rpart \
    r-rprojroot \
    r-rserve \
    r-rsqlite \
    r-rstudioapi \
    r-rvest \
    r-scales \
    r-selectr \
    r-sessioninfo \
    r-shape \
    r-shiny \
    r-sourcetools \
    r-spatial \
    r-squarem \
    r-stringi \
    r-stringr \
    r-survival \
    r-sys \
    r-teachingdemos \
    r-testthat \
    r-tibble \
    r-tidyr \
    r-tidyselect \
    r-tidyverse \
    r-timedate \
    r-tinytex \
    r-usethis \
    r-utf8 \
    r-uuid \
    r-vctrs \
    r-whisker \
    r-withr \
    r-xfun \
    r-xml2 \
    r-xopen \
    r-xtable \
    r-yaml \
    r-zip

ENV R_HOME=/usr/lib/R

# Add extra Python modules.
ENV PYTHONPATH=/opt/python/packages
RUN mkdir -p "${PYTHONPATH}"

# Add extra jars.
ENV SPARK_EXTRA_JARS_DIR=/opt/spark/jars/
ENV SPARK_EXTRA_CLASSPATH='/opt/spark/jars/*'
RUN mkdir -p "${SPARK_EXTRA_JARS_DIR}"

# Uncomment below and replace EXTRA_JAR_NAME with the jar file name.
# COPY "EXTRA_JAR_NAME" "${SPARK_EXTRA_JARS_DIR}"

# Create the 'spark' group/user.
# The GID and UID must be 1099. Home directory is required.
RUN groupadd -g 1099 spark
RUN useradd -u 1099 -g 1099 -d /home/spark -m spark

USER spark
      

שלב 3: פקודות Build ו-Push

מריצים את הפקודות האלה כדי ליצור את קובץ האימג' של הקונטיינר ולהעלות אותו ל-Artifact Registry באמצעות Cloud Build.

  1. יוצרים את הקטגוריה של Cloud Storage:

    gcloud storage buckets create gs://${BUCKET_NAME} --project=${PROJECT_ID} \
      --location=${REGION}
    
  2. יוצרים את המאגר ב-Artifact Registry:

    gcloud artifacts repositories create ${REPO_NAME} \
      --repository-format=docker --location=${REGION} --description="Custom Dataproc Serverless images"
    
  3. יוצרים את קובץ האימג' ודוחפים אותו באמצעות Cloud Build:

    gcloud builds submit --tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/spark-custom:latest .
    

שלב 4: שליחת המשימה

כדי למנוע בעיות של שינויים בגרסאות, פורסים את המשימה על ידי הגדרת סביבת זמן הריצה --version=2.3. בסביבות ייצור, מומלץ לספק את גרסת התמונה במקום את התג :latest.

  • הרשאות: ודאו שלחשבון השירות המתאים יש את התפקיד roles/artifactregistry.reader במאגר של Artifact Registry (מומלץ) או בפרויקט שמארח את קובץ האימג' של הקונטיינר. זה חשוב במיוחד אם קובץ האימג' מתארח בפרויקט שונה מזה שבו פועל עומס העבודה.
gcloud dataproc batches submit pyspark \
  file:///usr/lib/spark/examples/src/main/python/pi.py \
  --region=${REGION} \
  --project=${PROJECT_ID} \
  --version=2.3 \
  --container-image=${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/spark-custom:latest \
  -- 10