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, interpreter 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 Managed Service untuk Apache Spark
Bagian berikut menjelaskan lingkungan Python untuk berbagai cluster versi image Managed Service untuk Apache Spark.
Versi image Managed Service untuk Apache Spark 1.5
Miniconda3 diinstal di cluster Managed Service untuk Apache Spark 1.5.
Interpreter default adalah Python 3.7 yang masing-masing terletak 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 interpreter 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 conda dan pip paket 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'
Versi image Managed Service untuk Apache Spark 2.x
conda diinstal di
cluster Managed Service untuk Apache Spark 2.x. Interpreter Python3 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:
Interpreter 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 Managed Service untuk Apache Spark 2.0.
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 interpreter Python diinstal di cluster Anda, sistem akan menjalankan /etc/profile.d/effective-python.sh, yang mengekspor variabel lingkungan PYSPARK_PYTHON untuk memilih interpreter Python default untuk tugas PySpark Anda. Jika Anda memerlukan interpreter 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 terhubung ke node cluster yang menginstal Miniconda atau Anaconda 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 Python sistem default /usr/bin/python, 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. Berikut adalah contoh cluster 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 Anda membuat cluster Managed Service untuk Apache Spark:
Gunakan properti cluster
dataproc:conda.env.config.uriuntuk membuat dan mengaktifkan lingkungan conda baru di cluster. atauGunakan properti cluster
dataproc:conda.packagesdandataproc:pip.packagesuntuk menambahkan paketcondadanpip, masing-masing, ke lingkungancondabasedi 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 lingkungancondabaru di cluster.Contoh:
Dapatkan atau buat file konfigurasi
environment.yamlconda. Anda dapat membuat file secara manual, menggunakan file yang ada, atau mengekspor lingkungan conda yang ada) ke dalam fileenvironment.yamlmenggunakan perintah berikut:conda env export --name=env-name > environment.yaml
Salin file konfigurasi ke bucket Cloud Storage Anda.
gcloud storage cp environment.yaml gs://bucket-name/environment.yaml
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: Daftarcondapaket dengan versi tertentu yang akan diinstal di lingkungan dasar, yang diformat sebagaipkg1==v1,pkg2==v2.... Jikacondagagal mengatasi konflik dengan paket yang ada di lingkungan dasar, paket yang bertentangan tidak akan diinstal.Catatan:
Properti cluster
dataproc:conda.packagesdandataproc:pip.packagestidak dapat digunakan dengandataproc:conda.env.config.uriproperti cluster.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: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 paketpipdengan 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.packagesdandataproc:conda.packagestidak dapat digunakan dengan properti clusterdataproc: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.10.1,datasets==1.4.1' \ ... other flags ...
Anda dapat menggunakan
dataproc:conda.packagesdandataproc:pip.packagessaat 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 ...