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 cluster virtual Dataproc di GKE
atau mengirimkan 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
Gambar dasar
Anda dapat menggunakan alat docker
untuk membangun Docker yang disesuaikan berdasarkan salah satu image Spark dasar Dataproc di GKE yang dipublikasikan.
Pengguna container
Dataproc di GKE menjalankan container 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 gambar
sebagai dependensi beban kerja, Anda harus memberikan izin baca kepada pengguna spark
untuk 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 mengetahui informasi terbaru).- Jika Anda menyesuaikan lingkungan Java, pastikan
JAVA_HOME
disetel ke lokasi yang benar danPATH
menyertakan jalur ke biner.
- Jika Anda menyesuaikan lingkungan Java, pastikan
Python: Dataproc di GKE image Spark dasar telah menginstal Miniconda3 di
/opt/conda
.CONDA_HOME
mengarah ke lokasi ini,${CONDA_HOME}/bin
disertakan dalamPATH
, danPYSPARK_PYTHON
disetel ke${CONDA_HOME}/python
.Jika Anda menyesuaikan Conda, pastikan
CONDA_HOME
mengarah ke direktori utama Conda ,${CONDA_HOME}/bin
disertakan dalamPATH
, danPYSPARK_PYTHON
disetel ke${CONDA_HOME}/python.
Anda dapat menginstal, menghapus, dan mengupdate paket di lingkungan dasar default, atau membuat lingkungan baru, tetapi sangat direkomendasikan agar lingkungan mencakup semua paket yang diinstal di lingkungan dasar image container dasar.
Jika Anda menambahkan modul Python, seperti skrip Python dengan fungsi utilitas, ke image container, sertakan direktori modul dalam
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: letakkan jar di bawah/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 menginstalnya ulang.Titik entri: Dataproc di GKE mengabaikan perubahan apa pun yang dilakukan pada primitif
ENTRYPOINT
danCMD
dalam image container.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, executor Spark, dan proses lainnya. Skrip inisialisasi dapat memilih jenis proses Spark berdasarkan argumen pertama ($1
): kemungkinan nilai mencakupspark-submit
untuk penampung driver, danexecutor
untuk penampung eksekutor.
Configs: Konfigurasi Spark terletak di bagian
/etc/spark/conf
. Variabel lingkunganSPARK_CONF_DIR
mengarah ke lokasi ini.Jangan menyesuaikan konfigurasi Spark di image container. Sebagai gantinya, kirimkan properti apa pun melalui Dataproc on GKE API untuk alasan berikut:
- Beberapa properti, seperti ukuran memori eksekutor, ditentukan saat runtime, bukan saat waktu build image container; properti tersebut harus disuntikkan oleh Dataproc di GKE .
- Dataproc di GKE menerapkan batasan pada properti yang diberikan oleh pengguna.
Dataproc di GKE memasang konfigurasi dari
configMap
ke/etc/spark/conf
dalam container, menggantikan setelan yang disematkan dalam image.
Gambar Spark dasar
Dataproc mendukung image penampung Spark dasar berikut:
- Spark 3.5: ${REGION}-docker.pkg.dev/cloud-dataproc/spark/dataproc_2.2
Contoh pembuatan 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
Bangun dan kirim image.
docker build -t "${IMAGE}" . && docker push "${IMAGE}"