Mengonfigurasi lingkungan Python

Tugas PySpark di Managed Service untuk Apache Spark dijalankan oleh interpreter Python di cluster. Kode tugas harus kompatibel saat runtime dengan versi dan dependensi interpreter Python.

Memeriksa versi dan modul interpreter

Program contoh check_python_env.py berikut memeriksa pengguna Linux yang menjalankan tugas, penafsir Python, dan modul yang tersedia.

import getpass
import importlib.util
import sys

print(f'This job is running as "{getpass.getuser()}".')
print(sys.executable, sys.version_info)
for package in sys.argv[1:]:
  print(importlib.util.find_spec(package))

Jalankan program:

REGION=region
gcloud dataproc jobs submit pyspark check_python_env.py \
    --cluster=my-cluster \
    --region=${REGION} \
    -- pandas scipy

Contoh output:

This job is running as "root".
/opt/conda/default/bin/python sys.version_info(major=3, minor=11, micro=8, releaselevel='final', serial=0)
ModuleSpec(name='pandas', loader=<_frozen_importlibexternal.SourceFileLoader object at 0x7f8b9c0a3d90>, origin='/opt/conda/default/lib/python3.11/site-packages/pandas/init_.py', submodule_search_locations=['/opt/conda/default/lib/python3.11/site-packages/pandas'])
ModuleSpec(name='scipy', loader=<_frozen_importlibexternal.SourceFileLoader object at 0x7f8b9c0a3e50>, origin='/opt/conda/default/lib/python3.11/site-packages/scipy/init_.py', submodule_search_locations=['/opt/conda/default/lib/python3.11/site-packages/scipy'])

Lingkungan Python gambar Managed Service untuk Apache Spark

Bagian berikut menjelaskan lingkungan Python untuk cluster versi image Managed Service for Apache Spark yang didukung.

Versi gambar Managed Service untuk Apache Spark 2.x

Conda (atau micromamba di image 2.3 ) diinstal pada cluster Managed Service untuk Apache Spark 2.x. Interpreter Python 3 default terletak di instance VM di bagian /opt/conda/default/bin. Halaman berikut mencantumkan versi Python yang disertakan dalam versi image Managed Service untuk Apache Spark 2.x yang didukung:

Interpreter Python non-default dari OS tersedia di /usr/bin/.

Anda dapat menginstal paket conda dan pip di lingkungan base atau menyiapkan lingkungan conda Anda sendiri di cluster menggunakan properti cluster terkait conda.

Catatan saluran Conda: Versi image Managed Service untuk Apache Spark 2.1, 2.2, dan 2.3 default tidak menyertakan saluran paket Conda yang telah dikonfigurasi sebelumnya (seperti defaults atau conda-forge) di .condarc (lihat catatan rilis 4 September 2026). Meneruskan nama paket yang tidak memiliki awalan ke dataproc:conda.packages atau menjalankan conda install PACKAGE tanpa menentukan saluran akan gagal dengan CondaValueError: No channels available to install from atau PackagesNotFoundError.

Untuk menginstal paket Conda, Anda harus menentukan channel secara eksplisit:

  • Saat menggunakan properti dataproc:conda.packages, gunakan format CHANNEL::PACKAGE==VERSION (misalnya, dataproc:conda.packages=conda-forge::pip==24.0).
  • Saat menjalankan conda install di command line, teruskan flag -c (atau --channel) (misalnya, conda install PACKAGES -c conda-forge).

Contoh:

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=2.3 \
    --region=${REGION} \
    --properties=^#^dataproc:conda.packages='conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0'#dataproc:pip.packages='tokenizers==0.15.0,datasets==2.16.1'

Versi gambar Managed Service untuk Apache Spark 3.0

Python 3 diinstal pada cluster Managed Service untuk Apache Spark 3.0. Pada image 3.0, Pixi diinstal sebagai bagian dari penginstalan Python dan digunakan untuk menginstal paket Python, bukan Conda.

Menghindari masalah download paket

Node cluster Managed Service untuk Apache Spark mendownload paket dari repositori Python publik eksternal saat menginstal paket conda dan pip kustom (lihat properti cluster terkait conda). Untuk menghindari kegagalan pembuatan cluster karena tidak tersedianya repositori Python publik, pertimbangkan untuk membuat image kustom Managed Service untuk Apache Spark atau mengupload dependensi ke bucket Cloud Storage (lihat Mendownload dependensi dengan cluster khusus IP internal).

Memilih interpreter Python untuk tugas

Jika beberapa penafsir Python diinstal di cluster Anda, sistem akan menjalankan /etc/profile.d/effective-python.sh, yang mengekspor variabel lingkungan PYSPARK_PYTHON untuk memilih penafsir Python default untuk tugas PySpark Anda. Jika Anda memerlukan penafsir Python non-default untuk tugas PySpark, saat Anda mengirimkan tugas ke cluster, tetapkan properti spark.pyspark.python dan spark.pyspark.driver.python ke jalur atau versi Python yang diperlukan (misalnya, "/usr/bin/python3" atau "python3.11").

Contoh:

REGION=region
gcloud dataproc jobs submit pyspark check_python_env.py \
    --cluster=my-cluster \
    --region=${REGION} \
    --properties="spark.pyspark.python=/usr/bin/python3,spark.pyspark.driver.python=/usr/bin/python3"

Python dengan sudo

Jika Anda terhubung ke node cluster menggunakan SSH, saat Anda menjalankan sudo python --version, versi Python yang ditampilkan dapat berbeda dengan versi yang ditampilkan oleh python --version. Perbedaan versi ini dapat terjadi karena sudo menggunakan /usr/bin/python Python sistem default, dan tidak menjalankan /etc/profile.d/effective-python.sh untuk menginisialisasi lingkungan Python. Untuk pengalaman yang konsisten saat menggunakan sudo, temukan jalur Python yang ditetapkan di /etc/profile.d/effective-python.sh, lalu jalankan perintah env untuk menetapkan PATH ke jalur Python ini. Contoh:

sudo env PATH=/opt/conda/default/bin:${PATH} python --version

Menggunakan properti cluster terkait conda

Anda dapat menyesuaikan lingkungan conda selama pembuatan cluster menggunakan properti cluster terkait conda.

Ada dua cara yang saling eksklusif untuk menyesuaikan lingkungan conda saat Anda membuat cluster Managed Service untuk Apache Spark:

  1. Gunakan properti cluster dataproc:conda.env.config.uri untuk membuat dan mengaktifkan lingkungan conda baru di cluster. atau

  2. Gunakan properti cluster dataproc:conda.packages dan dataproc:pip.packages untuk menambahkan paket conda dan pip ke lingkungan conda base di cluster.

properti cluster terkait conda

  • dataproc:conda.env.config.uri: Jalur absolut ke file konfigurasi YAML lingkungan conda yang berada di Cloud Storage. File ini digunakan untuk membuat dan mengaktifkan lingkungan conda baru di cluster. Karena image default tidak menyertakan saluran Conda yang telah dikonfigurasi sebelumnya, pastikan file environment.yaml Anda mencantumkan saluran paket yang diperlukan secara eksplisit (seperti conda-forge) di bagian channels.

    Contoh:

    1. Dapatkan atau buat file konfigurasi environment.yaml conda. Anda dapat membuat file secara manual, menggunakan file yang ada, atau mengekspor lingkungan conda yang ada ke dalam file environment.yaml menggunakan perintah berikut:

      conda env export --name=env-name > environment.yaml
      

    2. Salin file konfigurasi ke bucket Cloud Storage Anda.

      gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
      

    3. Buat cluster dan arahkan ke file konfigurasi lingkungan Anda di Cloud Storage.

      REGION=region
      gcloud dataproc clusters create cluster-name \
          --region=${REGION} \
          --properties='dataproc:conda.env.config.uri=gs://bucket-name/environment.yaml' \
          ... other flags ...
      

  • dataproc:conda.packages: Daftar paket conda dengan channel dan versi tertentu yang akan diinstal di lingkungan dasar, diformat sebagai CHANNEL::PACKAGE==VERSION (misalnya, conda-forge::pkg1==v1,conda-forge::pkg2==v2...). Jika conda gagal menyelesaikan konflik dengan paket yang ada di lingkungan dasar, paket yang berkonflik tidak akan diinstal.

    Catatan:

    • Karena versi image Managed Service untuk Apache Spark 2.1, 2.2, dan 2.3 default tidak menyertakan channel Conda yang telah dikonfigurasi sebelumnya di .condarc, Anda harus menambahkan awalan setiap nama paket dengan channelnya (seperti conda-forge::). Jika nama paket yang tidak memiliki awalan diteruskan, operasi akan gagal dengan CondaValueError: No channels available to install from atau PackagesNotFoundError.

    • Properti cluster dataproc:conda.packages dan dataproc:pip.packages tidak dapat digunakan dengan properti cluster dataproc:conda.env.config.uri.

    • Saat menentukan beberapa paket (dipisahkan dengan koma), Anda harus menentukan karakter pembatas alternatif (lihat properti cluster Pemformatan). Contoh berikut menentukan "#" sebagai karakter pemisah untuk meneruskan beberapa nama paket yang dipisahkan koma ke properti dataproc:conda.packages.

    Contoh:

    REGION=region
    gcloud dataproc clusters create cluster-name \
        --region=${REGION} \
        --properties='^#^dataproc:conda.packages=conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0' \
        ... other flags ...
    

  • dataproc:pip.packages: Daftar paket pip dengan versi tertentu yang akan diinstal di lingkungan dasar, diformat sebagai pkg1==v1,pkg2==v2.... pip mengupgrade dependensi yang ada hanya jika diperlukan. Konflik dapat menyebabkan lingkungan menjadi tidak konsisten.

    Catatan:

    • Properti cluster dataproc:pip.packages dan dataproc:conda.packages tidak dapat digunakan dengan properti cluster dataproc:conda.env.config.uri.

    • Saat menentukan beberapa paket (dipisahkan dengan koma), Anda harus menentukan karakter pembatas alternatif (lihat properti cluster Pemformatan). Contoh berikut menentukan "#" sebagai karakter pembatas untuk meneruskan beberapa nama paket yang dipisahkan koma ke properti dataproc:pip.packages.

    Contoh:

    REGION=region
    gcloud dataproc clusters create cluster-name \
        --region=${REGION} \
        --properties='^#^dataproc:pip.packages=tokenizers==0.15.0,datasets==2.16.1' \
        ... other flags ...
    
  • Anda dapat menggunakan dataproc:conda.packages dan dataproc:pip.packages saat membuat cluster.

    Contoh:

    REGION=region
    gcloud dataproc clusters create cluster-name \
        --region=${REGION} \
        --image-version=2.3 \
        --properties=^#^dataproc:conda.packages='conda-forge::pytorch==2.1.0,conda-forge::coverage==6.5.0'#dataproc:pip.packages='tokenizers==0.15.0,datasets==2.16.1' \
        ... other flags ...