Anda dapat menentukan image container kustom untuk digunakan dengan Dataproc di GKE . Image container kustom Anda harus menggunakan salah satu image Spark dasar Dataproc di GKE.
Menggunakan image container kustom
Untuk menggunakan image container kustom Dataproc di GKE, tetapkan
spark.kubernetes.container.image property
saat Anda
membuat Dataproc di cluster virtual GKE
atau mengirim tugas Spark ke cluster.
- Contoh pembuatan cluster gcloud CLI:
gcloud dataproc clusters gke create "${DP_CLUSTER}" \ --properties=spark:spark.kubernetes.container.image=custom-image \ ... other args ...
- Contoh pengiriman tugas gcloud CLI:
gcloud dataproc jobs submit spark \ --properties=spark.kubernetes.container.image=custom-image \ ... other args ...
Persyaratan dan setelan image container kustom
Image dasar
Anda dapat menggunakan alat docker
untuk mem-build docker yang disesuaikan berdasarkan salah satu image Spark dasar Dataproc yang dipublikasikan di GKE.
Pengguna penampung
Dataproc di GKE menjalankan penampung Spark sebagai pengguna spark
Linux dengan
UID 1099
dan GID 1099
. Gunakan UID dan GID untuk izin sistem file.
Misalnya, jika Anda menambahkan file jar di /opt/spark/jars/my-lib.jar
dalam image
sebagai dependensi beban kerja, Anda harus memberikan izin baca pengguna spark
ke file tersebut.
Komponen
Java: Variabel lingkungan
JAVA_HOME
mengarah ke lokasi penginstalan Java. Nilai default saat ini adalah/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64
, yang dapat berubah (lihat catatan rilis Dataproc untuk informasi terbaru).- Jika Anda menyesuaikan lingkungan Java, pastikan
JAVA_HOME
ditetapkan ke lokasi yang benar danPATH
menyertakan jalur ke biner.
- Jika Anda menyesuaikan lingkungan Java, pastikan
Python: Image Spark dasar Dataproc di GKE telah menginstal Miniconda3 di
/opt/conda
.CONDA_HOME
mengarah ke lokasi ini,${CONDA_HOME}/bin
disertakan dalamPATH
, danPYSPARK_PYTHON
ditetapkan ke${CONDA_HOME}/python
.Jika Anda menyesuaikan Conda, pastikan
CONDA_HOME
mengarah ke direktori utama Conda ,${CONDA_HOME}/bin
disertakan dalamPATH
, danPYSPARK_PYTHON
ditetapkan ke${CONDA_HOME}/python.
Anda dapat menginstal, menghapus, dan mengupdate paket di lingkungan dasar default, atau membuat lingkungan baru, tetapi sangat disarankan agar lingkungan tersebut menyertakan semua paket yang diinstal di lingkungan dasar image penampung dasar.
Jika Anda menambahkan modul Python, seperti skrip Python dengan fungsi utilitas, ke image penampung, sertakan direktori modul di
PYTHONPATH
.
Spark: Spark diinstal di
/usr/lib/spark
, danSPARK_HOME
mengarah ke lokasi ini. Spark tidak dapat disesuaikan. Jika diubah, image penampung akan ditolak atau gagal beroperasi dengan benar.Tugas: Anda dapat menyesuaikan dependensi tugas Spark.
SPARK_EXTRA_CLASSPATH
menentukan classpath tambahan untuk proses JVM Spark. Rekomendasi: masukkan jar ke dalam/opt/spark/jars
, dan tetapkanSPARK_EXTRA_CLASSPATH
ke/opt/spark/jars/*
.Jika Anda menyematkan jar tugas dalam image, direktori yang direkomendasikan adalah
/opt/spark/job
. Saat mengirimkan tugas, Anda dapat mereferensikannya dengan jalur lokal, misalnya,file:///opt/spark/job/my-spark-job.jar
.Konektor Cloud Storage: Konektor Cloud Storage diinstal di
/usr/lib/spark/jars
.Utilitas: Paket utilitas
procps
dantini
diperlukan untuk menjalankan Spark. Utilitas ini disertakan dalam image Spark dasar, sehingga image kustom tidak perlu menginstal ulang.Titik entri: Dataproc di GKE mengabaikan perubahan apa pun yang dilakukan pada primitif
ENTRYPOINT
danCMD
dalam image penampung.Skrip inisialisasi: Anda dapat menambahkan skrip inisialisasi opsional di
/opt/init-script.sh
. Skrip inisialisasi dapat mendownload file dari Cloud Storage, memulai proxy dalam penampung, memanggil skrip lain, dan melakukan tugas startup lainnya.Skrip titik entri memanggil skrip inisialisasi dengan semua argumen command line (
$@
) sebelum memulai driver Spark, eksekutor Spark, dan proses lainnya. Skrip inisialisasi dapat memilih jenis proses Spark berdasarkan arg pertama ($1
): kemungkinan nilainya mencakupspark-submit
untuk penampung driver, danexecutor
untuk penampung eksekutor.
Configs: Konfigurasi Spark berada di bagian
/etc/spark/conf
. Variabel lingkunganSPARK_CONF_DIR
mengarah ke lokasi ini.Jangan sesuaikan konfigurasi Spark di image container. Sebagai gantinya, kirimkan properti apa pun melalui Dataproc di GKE API karena alasan berikut:
- Beberapa properti, seperti ukuran memori eksekutor, ditentukan saat runtime, bukan saat waktu build image container; properti tersebut harus dimasukkan oleh Dataproc di GKE .
- Dataproc di GKE menerapkan batasan pada properti yang disediakan oleh pengguna.
Dataproc di GKE memasang konfigurasi dari
configMap
ke/etc/spark/conf
dalam penampung, yang mengganti setelan yang disematkan dalam image.
Gambar Spark dasar
Dataproc mendukung image penampung Spark dasar berikut:
- Spark 2.4: ${REGION}-docker.pkg.dev/cloud-dataproc/spark/dataproc_1.5
- Spark 3.1: ${REGION}-docker.pkg.dev/cloud-dataproc/spark/dataproc_2.0
Contoh build image container kustom
Contoh 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
Membangun image container
Jalankan perintah berikut di direktori Dockerfile
- Tetapkan gambar (contoh:
us-central1-docker.pkg.dev/my-project/spark/spark-test-image:latest
) dan ubah ke direktori build.IMAGE=custom container image \ BUILD_DIR=$(mktemp -d) \ cd "${BUILD_DIR}"
Download konektor BigQuery.
gcloud storage cp \ gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.22.2.jar .
Buat file contoh 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() EOFBuat contoh skrip init.
cat >init-script.sh <<EOF echo "hello world" >/tmp/init-script.out EOF
Build dan kirim image.
docker build -t "${IMAGE}" . && docker push "${IMAGE}"