Anda dapat menentukan image container kustom untuk digunakan dengan Managed Service untuk Apache Spark di GKE . Image container kustom Anda harus menggunakan salah satu image Spark dasar Managed Service untuk Apache Spark di GKE.
Menggunakan image container kustom
Untuk menggunakan image container kustom Managed Service untuk Apache Spark di GKE, tetapkan
spark.kubernetes.container.image property saat Anda
membuat cluster virtual Managed Service untuk Apache Spark 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 membuat Docker yang disesuaikan berdasarkan salah satu image Spark dasar Managed Service untuk Apache Spark di GKE yang dipublikasikan.
Pengguna container
Managed Service untuk Apache Spark 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 memberi pengguna spark izin baca ke file tersebut.
Komponen
Java: Variabel lingkungan
JAVA_HOMEmengarah ke lokasi penginstalan Java. Nilai default saat ini adalah/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64, yang dapat berubah (lihat catatan rilis Managed Service untuk Apache Spark untuk informasi terbaru).- Jika Anda menyesuaikan lingkungan Java, pastikan
JAVA_HOMEdisetel ke lokasi yang benar danPATHmenyertakan jalur ke biner.
- Jika Anda menyesuaikan lingkungan Java, pastikan
Python: Managed Service untuk Apache Spark di GKE image Spark dasar telah menginstal Miniconda3 di
/opt/conda.CONDA_HOMEmengarah ke lokasi ini,${CONDA_HOME}/bindisertakan dalamPATH, danPYSPARK_PYTHONdisetel ke${CONDA_HOME}/python.Jika Anda menyesuaikan Conda, pastikan
CONDA_HOMEmengarah ke direktori utama Conda ,${CONDA_HOME}/bindisertakan dalamPATH, danPYSPARK_PYTHONdisetel ke${CONDA_HOME}/python.Anda dapat menginstal, menghapus, dan mengupdate paket di lingkungan dasar default, atau membuat lingkungan baru, tetapi sangat disarankan 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_HOMEmengarah 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_CLASSPATHmenentukan classpath tambahan untuk proses JVM Spark. Rekomendasi: letakkan jar di bawah/opt/spark/jars, dan tetapkanSPARK_EXTRA_CLASSPATHke/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
procpsdantinidiperlukan untuk menjalankan Spark. Utilitas ini disertakan dalam image Spark dasar, sehingga image kustom tidak perlu menginstalnya ulang.Titik entri: Managed Service untuk Apache Spark di GKE mengabaikan perubahan apa pun yang dilakukan pada primitif
ENTRYPOINTdanCMDdalam 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 container, 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-submituntuk penampung driver, danexecutoruntuk penampung eksekutor.
Configs: Konfigurasi Spark terletak di bagian
/etc/spark/conf. Variabel lingkunganSPARK_CONF_DIRmengarah ke lokasi ini.Jangan menyesuaikan konfigurasi Spark di image container. Sebagai gantinya, kirimkan properti apa pun melalui Managed Service untuk Apache Spark di GKE API karena alasan berikut:
- Beberapa properti, seperti ukuran memori eksekutor, ditentukan saat runtime, bukan saat waktu pembuatan image container; properti tersebut harus disuntikkan oleh Managed Service untuk Apache Spark di GKE .
- Managed Service untuk Apache Spark di GKE membatasi properti yang diberikan oleh pengguna.
Managed Service untuk Apache Spark di GKE memasang konfigurasi dari
configMapke/etc/spark/confdalam container, menggantikan setelan yang disematkan dalam image.
Image Spark dasar
Managed Service untuk Apache Spark mendukung image container Spark dasar berikut:
- Spark 3.5: ${REGION}-docker.pkg.dev/cloud-managed-spark/spark/dataproc_2.2
Contoh pembuatan image container kustom
Contoh Dockerfile
FROM us-central1-docker.pkg.dev/cloud-managed-spark/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 contoh file 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}"