Tugas PySpark di Dataproc dijalankan oleh penafsir Python pada cluster. Kode tugas harus kompatibel pada runtime dengan versi dan dependensi penafsir Python.
Memeriksa versi dan modul penerjemah
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 gambar Dataproc
Gambar Dataproc versi 1.5
Miniconda3 diinstal pada cluster Dataproc 1.5.
Penafsir default adalah Python 3.7 yang masing-masing terletak pada 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 pada cluster menggunakan
properti cluster terkait Conda.
Untuk menginstal Anaconda3, bukan Miniconda3, pilih
komponen opsional Anaconda,
lalu instal paket Conda dan PIP di lingkungan base
atau siapkan
lingkungan Conda Anda sendiri pada cluster menggunakan
properti cluster terkait Conda.
Contoh
REGION=region gcloud beta dataproc clusters create my-cluster \ --image-version=1.5 \ --region=${REGION} \ --optional-components=ANACONDA \ --properties=^#^dataproc:conda.packages='pytorch==1.0.1,visions==0.7.1'#dataproc:pip.packages='tokenizers==0.10.1,datasets==1.5.0'
Saat Anda menginstal komponen opsional Anaconda3, Miniconda3 akan dihapus dari cluster dan /opt/conda/anaconda3/bin/python3.6
menjadi penafsir Python default untuk tugas PySpark. Anda tidak dapat mengubah versi penerjemah Python
dari komponen opsional.
Untuk menggunakan Python 2.7 sebagai penafsir default pada cluster 1.5,
jangan gunakan
komponen opsional Anakonda
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 menyiapkan
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'
Gambar Dataproc versi 2.0+
Miniconda3 diinstal pada cluster Dataproc 2.0+.
Penafsir Python3 default terletak di instance VM di
/opt/conda/miniconda3/bin/
. Halaman berikut mencantumkan versi Python yang disertakan dalam versi image Dataproc:
Penafsir Python non-default dari OS tersedia di /usr/bin/
.
Anda dapat menginstal paket Conda dan PIP di lingkungan base
atau menyiapkan
lingkungan Conda sendiri pada 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 suatu 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 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 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 menjalankan SSH ke node cluster yang telah menginstal Miniconda atau Anaconda, saat Anda menjalankan sudo python --version
, versi Python yang ditampilkan mungkin berbeda dari versi yang ditampilkan oleh python --version
.
Perbedaan versi ini dapat terjadi karena sudo
menggunakan sistem default Python
/usr/bin/python
, dan tidak menjalankan
/etc/profile.d/effective-python.sh
untuk melakukan inisialisasi 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 klaster 1,5:
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 membuat cluster Dataproc:
Gunakan properti cluster
dataproc:conda.env.config.uri
untuk membuat dan mengaktifkan lingkungan Conda baru di cluster. atauGunakan properti cluster
dataproc:conda.packages
dandataproc:pip.packages
untuk menambahkan paket Conda dan PIP ke lingkunganbase
Conda di cluster.
Properti cluster terkait Conda
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:
Dapatkan atau buat file konfigurasi
environment.yaml
Conda. Anda dapat membuat file secara manual, menggunakan file yang sudah ada, atau mengekspor lingkungan Conda yang ada) ke dalam fileenvironment.yaml
seperti yang ditunjukkan di bawah ini.conda env export --name=env-name > environment.yaml
Salin file konfigurasi ke bucket Cloud Storage Anda.
gsutil cp environment.yaml gs://bucket-name/environment.yaml
Buat cluster dan arahkan kursor 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, yang diformat sebagaipkg1==v1,pkg2==v2...
. Jika Conda gagal menyelesaikan konflik dengan paket yang ada di lingkungan dasar, paket yang bertentangan tidak akan diinstal.Catatan:
Properti cluster
dataproc:conda.packages
dandataproc:pip.packages
tidak dapat digunakan dengan properti clusterdataproc:conda.env.config.uri
.Saat menentukan beberapa paket (dipisahkan dengan koma), Anda harus menentukan karakter pembatas alternatif (lihat Pemformatan properti cluster). Contoh berikut menentukan "#" sebagai karakter pembatas 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, yang diformat sebagaipkg1==v1,pkg2==v2...
. Pip akan mengupgrade dependensi yang ada hanya jika diperlukan. Konflik dapat menyebabkan lingkungan menjadi tidak konsisten.Catatan:
Properti cluster
dataproc:pip.packages
dandataproc:conda.packages
tidak dapat digunakan dengan properti clusterdataproc:conda.env.config.uri
.Saat menentukan beberapa paket (dipisahkan dengan koma), Anda harus menentukan karakter pembatas alternatif (lihat Pemformatan properti cluster). 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.10.1,datasets==1.4.1' \ ... other flags ...
Anda dapat menggunakan
dataproc:conda.packages
dandataproc: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 ...