שירות מנוהל ל-Apache Spark serverless מריץ עומסי עבודה בתוך קונטיינרים של Docker. הקונטיינר מספק את סביבת זמן הריצה לתהליכי מנהל ההתקן וההרצה של עומס העבודה. כברירת מחדל, Managed Service for Apache Spark משתמש בקובץ אימג' של קונטיינר שכולל את חבילות ברירת המחדל של Spark, Java, Python ו-R שמשויכות לגרסת הפצה של זמן ריצה. ה-API של batches של Managed Service for Apache Spark מאפשר לכם להשתמש בקובץ אימג' של קונטיינר בהתאמה אישית במקום בקובץ ברירת המחדל. בדרך כלל, תמונה מותאמת אישית של קונטיינר מוסיפה תלות של Java או Python בעומס עבודה של Spark, שלא מסופקת על ידי תמונת ברירת המחדל של הקונטיינר. חשוב: אל תכללו את Spark בקובץ האימג' של הקונטיינר המותאם אישית. שירות Managed Service for Apache Spark יטען את Spark בקונטיינר בזמן הריצה.
שליחת עומס עבודה של Spark batch באמצעות קובץ אימג' של קונטיינר בהתאמה אישית
gcloud
משתמשים בפקודה gcloud dataproc batches submit spark עם הדגל --container-image כדי לציין את קובץ האימג' המותאם אישית של הקונטיינר כששולחים עומס עבודה של Spark batch.
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
הערות:
- קובץ אימג' בהתאמה אישית: מציינים את קובץ האימג' של הקונטיינר בהתאמה אישית באמצעות הפורמט הבא של שמות תמונות ב-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. - אפשרויות נוספות לפקודת batches: אפשר להוסיף עוד דגלים אופציונליים לפקודה batches, לדוגמה, כדי להשתמש בשרת היסטוריה מתמשך (PHS). הערה: ה-PHS צריך להיות ממוקם באזור שבו מריצים עומסי עבודה של אצווה.
- ארגומנטים של עומס העבודה: אפשר להוסיף ארגומנטים של עומס העבודה על ידי הוספת '--' בסוף הפקודה, ואחריה הארגומנטים של עומס העבודה.
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:
procpstini
כדי להריץ XGBoost מ-Spark (Java או Scala), צריך לכלול את libgomp1
משתמש במאגר
Managed Service for Apache Spark מפעיל קונטיינרים כמשתמש spark Linux עם 1099 UID ו-1099 GID. המערכת מתעלמת מהוראות USER שמוגדרות בקובצי Dockerfile של אימג' מותאם אישית של מאגר בזמן הריצה. שימוש ב-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 לא תומך בתמונה או ששירות הסטרימינג של התמונה לא זמין, ההטמעה של הסטרימינג שלנו מורידה את כל התמונה.
שימו לב: אנחנו לא תומכים בסטרימינג של תמונות בפורמטים הבאים:
- תמונות עם שכבות ריקות או שכבות כפולות
- תמונות שמשתמשות במניפסט תמונות מגרסה 2, סכימה מגרסה 1
במקרים כאלה, Managed Service for Apache Spark מושך את כל התמונה לפני שהוא מתחיל את עומס העבודה.
דרישות נוספות
אם תמונות הקונטיינרים שלכם מוגנות על ידי VPC Service Controls ואתם משתמשים בהזרמת תמונות, אתם צריכים לכלול בגבולות גזרה לשירות גם את Image streaming API (
containerfilesystem.googleapis.com).אם עומס העבודה של Spark לא משתמש בחשבון השירות שמוגדר כברירת מחדל, צריך לוודא שלחשבון השירות המותאם אישית יש את תפקיד ה-IAM Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer) בפרויקט שמארח את קובץ האימג' של הקונטיינר.
Spark
אל תכללו את Spark בקובץ האימג' המותאם אישית של הקונטיינר. בזמן הריצה, Managed Service for Apache Spark מטמיע קבצים בינאריים והגדרות של Spark מהמארח אל תוך הקונטיינר: הקבצים הבינאריים מוטמעים בספרייה /usr/lib/spark וההגדרות מוטמעות בספרייה /etc/spark/conf. קובצי קיימים בספריות האלה מוחלפים על ידי Managed Service for Apache Spark בזמן הריצה.
סביבת זמן ריצה של Java
אל תכללו את סביבת זמן הריצה של Java (JRE) שלכם בתמונת מאגר ה-Docker המותאם אישית. בזמן הריצה, Managed Service for Apache Spark מטמיע את OpenJDK מהמארח בקונטיינר. אם תכללו JRE בקובץ אימג' של קונטיינר מותאם אישית, המערכת תתעלם ממנו.
חבילות Java
אתם יכולים לכלול קובצי jar כתלות בעומס העבודה של Spark בקובץ אימג' של קונטיינר מותאם אישית שלכם, ולהגדיר את משתנה הסביבה SPARK_EXTRA_CLASSPATH כך שיכלול את קובצי ה-jar. Managed Service for Apache Spark יוסיף את ערך משתנה הסביבה
לנתיב המחלקה של תהליכי Spark JVM. המלצה: כדאי להציב קובצי JAR בספרייה /opt/spark/jars ולהגדיר את SPARK_EXTRA_CLASSPATH ל-/opt/spark/jars/*.
אפשר לכלול את קובץ ה-JAR של עומס העבודה בקובץ אימג' של קונטיינר מותאם אישית, ואז להפנות אליו באמצעות נתיב מקומי כששולחים את עומס העבודה, לדוגמה file:///opt/spark/jars/my-spark-job.jar (דוגמה מופיעה במאמר שליחת עומס עבודה של Spark batch באמצעות קובץ אימג' של קונטיינר מותאם אישית).
חבילות 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 לדוגמה, ואחריהן פקודות ליצירה. דוגמה אחת כוללת את ההגדרה המינימלית שנדרשת כדי ליצור תמונה. הדוגמה השנייה כוללת דוגמאות להגדרות נוספות, כולל ספריות Python ו-R.
המלצה לגבי מיקום משותף של ארכיטקטורה
כדי להבטיח אתחול מהיר של קונטיינרים באמצעות Google CloudImage streaming (Container File System API) ולמנוע עמלות על העברת נתונים בין אזורים, כל השירותים הבאים צריכים להיות ממוקמים באותו אזור:
- Artifact Registry
- קטגוריה של Cloud Storage
- עומס עבודה של עיבוד ברצף (batch processing) ב-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: הגדרת Dockerfile
הגדרות מינימליות
# 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
# 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: יצירה ושליחה של פקודות
מריצים את הפקודות האלה כדי ליצור את קובץ אימג' של קונטיינר ולהעלות אותו ל-Artifact Registry באמצעות Cloud Build.
יוצרים את הקטגוריה של Cloud Storage:
gcloud storage buckets create gs://${BUCKET_NAME} --project=${PROJECT_ID} \ --location=${REGION}יוצרים את מאגר Artifact Registry:
gcloud artifacts repositories create ${REPO_NAME} \ --repository-format=docker --location=${REGION} --description="Custom Dataproc Serverless images"יוצרים את קובץ האימג' ושולחים אותו באמצעות Cloud Build:
gcloud builds submit --tag ${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO_NAME}/spark-custom:latest .
שלב 4: שליחת המשרה
כדי למנוע בעיות של סטיות בגרסאות, מגדירים את זמן הריצה --version=2.3 כשפורסים את העבודה. בסביבות ייצור, מומלץ לספק את גרסת התמונה במקום התג :latest.
- הרשאות: מוודאים שלחשבון השירות המתאים יש את התפקיד **Artifact Registry Reader** (
roles/artifactregistry.reader) במאגר Artifact Registry (מומלץ) או בפרויקט שמארח את קובץ אימג' של קונטיינר. זה חשוב במיוחד אם התמונה מתארחת בפרויקט אחר שבו פועל עומס העבודה.- לגרסאות של סביבת זמן ריצה שקודמות לגרסה
3.0, צריך לתת את ההרשאה הזו לחשבון השירות של שירות ההפעלה של עומס העבודה או הסשן.- בגרסאות של סביבת זמן הריצה
3.0ואילך, צריך להעניק את ההרשאה הזו לחשבון השירות של סוכן השירות של Dataproc מנהל המשאבים Node.
- בגרסאות של סביבת זמן הריצה
- לגרסאות של סביבת זמן ריצה שקודמות לגרסה
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