Puoi specificare un'immagine container personalizzata da utilizzare con Dataproc su GKE . L'immagine container personalizzata deve utilizzare una delle immagini Spark di base di Dataproc su GKE base Spark images.
Utilizzare un'immagine container personalizzata
Per utilizzare un'immagine container personalizzata di Dataproc su GKE, imposta la
spark.kubernetes.container.image property quando
crei un cluster virtuale Dataproc su GKE
o invii un job Spark al cluster.
- Esempio di creazione di cluster con gcloud CLI:
gcloud dataproc clusters gke create "${DP_CLUSTER}" \ --properties=spark:spark.kubernetes.container.image=custom-image \ ... other args ... - Esempio di invio di job con gcloud CLI:
gcloud dataproc jobs submit spark \ --properties=spark.kubernetes.container.image=custom-image \ ... other args ...
Requisiti e impostazioni delle immagini container personalizzate
Immagini di base
Puoi utilizzare gli strumenti docker per creare immagini Docker personalizzate basate su una delle
immagini Spark di base di Dataproc su GKE pubblicate.
Utente del container
Dataproc su GKE esegue i container Spark come utente Linux spark con un
1099 UID e un 1099 GID. Utilizza l'UID e il GID per le autorizzazioni del file system.
Ad esempio, se aggiungi un file JAR in /opt/spark/jars/my-lib.jar nell'immagine
come dipendenza del carico di lavoro, devi concedere all'utente spark l'autorizzazione di lettura per il file.
Componenti
Java: la variabile di ambiente
JAVA_HOMErimanda alla posizione dell' installazione di Java. Il valore predefinito attuale è/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64, che è soggetto a modifiche (per informazioni aggiornate, consulta le note di rilascio di Dataproc).- Se personalizzi l'ambiente Java, assicurati che
JAVA_HOMEsia impostato sulla posizione corretta e chePATHincluda il percorso dei file binari.
- Se personalizzi l'ambiente Java, assicurati che
Python: le immagini Spark di base di Dataproc su GKE hanno Miniconda3 installato in
/opt/conda.CONDA_HOMErimanda a questa posizione,${CONDA_HOME}/binè incluso inPATHePYSPARK_PYTHONè impostato su${CONDA_HOME}/python.Se personalizzi Conda, assicurati che
CONDA_HOMErimandi alla directory principale di Conda ,${CONDA_HOME}/binsia incluso inPATH, ePYSPARK_PYTHONsia impostato su${CONDA_HOME}/python.Puoi installare, rimuovere e aggiornare i pacchetti nell'ambiente di base predefinito, o creare un nuovo ambiente, ma ti consigliamo vivamente di includere nell'ambiente tutti i pacchetti installati nell'ambiente di base dell'immagine container di base.
Se aggiungi moduli Python, ad esempio uno script Python con funzioni di utilità, all'immagine container, includi le directory dei moduli in
PYTHONPATH.
Spark: Spark è installato in
/usr/lib/sparkeSPARK_HOMErimanda a questa posizione. Spark non può essere personalizzato. Se viene modificato, l'immagine container verrà rifiutata o non funzionerà correttamente.Job: puoi personalizzare le dipendenze dei job Spark.
SPARK_EXTRA_CLASSPATHdefinisce il classpath aggiuntivo per i processi JVM di Spark. Consiglio: inserisci i file JAR in/opt/spark/jars, e impostaSPARK_EXTRA_CLASSPATHsu/opt/spark/jars/*.Se incorpori il file JAR del job nell'immagine, la directory consigliata è
/opt/spark/job. Quando invii il job, puoi farvi riferimento con un percorso locale, ad esempiofile:///opt/spark/job/my-spark-job.jar.Connettore Cloud Storage: il connettore Cloud Storage è installato in
/usr/lib/spark/jars.Utilità: i pacchetti di utilità
procpsetinisono necessari per eseguire Spark. Queste utilità sono incluse nelle immagini Spark di base, quindi le immagini personalizzate non devono reinstallarle.Punto di ingresso: Dataproc su GKE ignora eventuali modifiche apportate alle primitive
ENTRYPOINTeCMDnell' immagine container.Script di inizializzazione: puoi aggiungere uno script di inizializzazione facoltativo in
/opt/init-script.sh. Uno script di inizializzazione può scaricare file da Cloud Storage, avviare un proxy all'interno del container, chiamare altri script ed eseguire altre attività di avvioLo script del punto di ingresso chiama lo script di inizializzazione con tutti gli argomenti della riga di comando (
$@) prima di avviare il driver Spark, l'executor Spark e altri processi. Lo script di inizializzazione può selezionare il tipo di processo Spark in base al primo argomento ($1): i valori possibili includonospark-submitper i container del driver eexecutorper i container dell'executor.
Configurazioni: le configurazioni di Spark si trovano in
/etc/spark/conf. La variabile di ambienteSPARK_CONF_DIRrimanda a questa posizione.Non personalizzare le configurazioni di Spark nell'immagine container. Invia invece tutte le proprietà tramite l'API Dataproc su GKE per i seguenti motivi:
- Alcune proprietà, come le dimensioni della memoria dell'executor, vengono determinate in fase di runtime, non in fase di creazione dell'immagine container; devono essere inserite da Dataproc su GKE .
- Dataproc su GKE impone limitazioni alle proprietà fornite dagli utenti.
Dataproc su GKE monta le configurazioni da
configMapin/etc/spark/confnel container, sostituendo le impostazioni incorporate nell'immagine.
Immagini Spark di base
Dataproc supporta le seguenti immagini container Spark di base:
- Spark 3.5: ${REGION}-docker.pkg.dev/cloud-dataproc/spark/dataproc_2.2
Esempio di creazione di immagini container personalizzate
Esempio di Dockerfile
FROM us-central1-docker.pkg.dev/cloud-dataproc/spark/dataproc_2.0:latest
# Change to root temporarily so that it has permissions to create dirs and copy
# files.
USER root
# Add a BigQuery connector jar.
ENV SPARK_EXTRA_JARS_DIR=/opt/spark/jars/
ENV SPARK_EXTRA_CLASSPATH='/opt/spark/jars/*'
RUN mkdir -p "${SPARK_EXTRA_JARS_DIR}" \
&& chown spark:spark "${SPARK_EXTRA_JARS_DIR}"
COPY --chown=spark:spark \
spark-bigquery-with-dependencies_2.12-0.22.2.jar "${SPARK_EXTRA_JARS_DIR}"
# Install Cloud Storage client Conda package.
RUN "${CONDA_HOME}/bin/conda" install google-cloud-storage
# Add a custom Python file.
ENV PYTHONPATH=/opt/python/packages
RUN mkdir -p "${PYTHONPATH}"
COPY test_util.py "${PYTHONPATH}"
# Add an init script.
COPY --chown=spark:spark init-script.sh /opt/init-script.sh
# (Optional) Set user back to `spark`.
USER spark
Crea l'immagine container
Esegui i seguenti comandi nella directory Dockerfile
- Imposta l'immagine (ad esempio:
us-central1-docker.pkg.dev/my-project/spark/spark-test-image:latest) e passa alla directory di creazione.IMAGE=custom container image \ BUILD_DIR=$(mktemp -d) \ cd "${BUILD_DIR}" Scarica il connettore BigQuery.
gcloud storage cp \ gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.22.2.jar .
Crea un file di esempio Python.
cat >test_util.py <<'EOF' def hello(name): print("hello {}".format(name))
def read_lines(path): with open(path) as f: return f.readlines() EOFCrea uno script di inizializzazione di esempio.
cat >init-script.sh <<EOF echo "hello world" >/tmp/init-script.out EOF
Crea il push dell'immagine.
docker build -t "${IMAGE}" . && docker push "${IMAGE}"