Mengonfigurasi lingkungan Python Dataproc

Tugas PySpark di Dataproc dijalankan oleh penafsir Python di cluster. Kode tugas harus kompatibel saat runtime dengan versi penafsir dan dependensi Python.

Memeriksa versi dan modul penafsir

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

import getpass
import sys
import imp

print('This job is running as "{}".'.format(getpass.getuser()))
print(sys.executable, sys.version_info)
for package in sys.argv[1:]:
  print(imp.find_module(package))

Menjalankan 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".
('/usr/bin/python', sys.version_info(major=2, minor=7, micro=13, releaselevel='final', serial=0))
(None, '/usr/local/lib/python2.7/dist-packages/pandas', ('', '', 5))
(None, '/usr/local/lib/python2.7/dist-packages/scipy', ('', '', 5))

Lingkungan Python image Dataproc

Bagian berikut menjelaskan lingkungan Python untuk berbagai cluster versi image Dataproc.

Image Dataproc versi 1.5

Miniconda3 diinstal di cluster Dataproc 1.5. Penafsir default-nya adalah Python 3.7 yang masing-masing berada di instance VM di /opt/conda/miniconda3/bin/python3.7. Python 2.7 juga tersedia di /usr/bin/python2.7.

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

Untuk menggunakan Python 2.7 sebagai penafsir default di cluster 1.5, jangan gunakan komponen opsional Anaconda saat membuat cluster. Sebagai gantinya, gunakan tindakan inisialisasi conda untuk menginstal Miniconda2 dan gunakan properti cluster terkait conda untuk menginstal paket conda dan pip di lingkungan base atau siapkan lingkungan conda Anda sendiri di cluster.

Contoh

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=1.5 \
    --region=${REGION} \
    --metadata='MINICONDA_VARIANT=2' \
    --metadata='MINICONDA_VERSION=latest' \
    --initialization-actions=gs://goog-dataproc-initialization-actions-${REGION}/conda/bootstrap-conda.sh \
    --properties=^#^dataproc:conda.packages='pytorch==1.0.1,visions==0.7.1'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'

Versi image Dataproc 2.x

conda diinstal di cluster Dataproc 2.x. Penafsir Python3 default terletak di instance VM pada /opt/conda/default/bin. Halaman berikut mencantumkan versi Python yang disertakan dalam versi image Dataproc:

Penafsir Python non-default dari OS tersedia di bagian /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.

Contoh

REGION=region
gcloud dataproc clusters create my-cluster \
    --image-version=2.0 \
    --region=${REGION} \
    --properties=^#^dataproc:conda.packages='pytorch==1.7.1,coverage==5.5'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'

Catatan: Anaconda tidak tersedia untuk cluster Dataproc 2.0.

Memilih penafsir 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 mengirimkan tugas ke cluster, tetapkan properti spark.pyspark.python dan spark.pyspark.driver.python ke nomor versi Python yang diperlukan (misalnya, "python2.7" atau "python3.6").

Contoh

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

Python dengan sudo

Jika Anda menggunakan SSH ke node cluster yang telah menginstal Miniconda atau Anaconda, saat menjalankan sudo python --version, versi Python yang ditampilkan dapat berbeda dari versi yang ditampilkan oleh python --version. Perbedaan versi ini dapat terjadi karena sudo menggunakan /usr/bin/python Python sistem default, dan tidak mengeksekusi /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. Berikut adalah contoh cluster 1,5:

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

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 Dataproc:

  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, masing-masing, ke lingkungan conda base di cluster.

  • dataproc:conda.env.config.uri: Jalur absolut ke file konfigurasi YAML lingkungan conda yang terletak di Cloud Storage. File ini akan digunakan untuk membuat dan mengaktifkan lingkungan conda baru di cluster.

    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 seperti yang ditunjukkan di bawah.

      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 versi tertentu yang akan diinstal di lingkungan dasar, diformat sebagai pkg1==v1,pkg2==v2.... Jika conda gagal menyelesaikan konflik dengan paket yang ada di lingkungan dasar, paket yang berkonflik tidak akan diinstal.

    Catatan:

    • 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 pemisah alternatif (lihat Pemformatan properti cluster). 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=pytorch==1.7.1,coverage==5.5' \
    ... other flags ...

  • dataproc:pip.packages: Daftar paket pip dengan versi tertentu yang akan diinstal di lingkungan dasar, diformat sebagai pkg1==v1,pkg2==v2.... `pip hanya akan mengupgrade dependensi yang ada 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 pemisah alternatif (lihat Pemformatan properti cluster). Contoh berikut menentukan "#" sebagai karakter pemisah 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.10.1,datasets==1.4.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=1.5 \
    --metadata='MINICONDA_VARIANT=2' \
    --metadata='MINICONDA_VERSION=latest' \
    --properties=^#^dataproc:conda.packages='pytorch==1.7.1,coverage==5.5'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.4.1' \
    ... other flags ...