Bagikan melalui


Kelola lingkungan Python dengan aman di Azure HDInsight menggunakan Script Action

Microsoft Azure HDInsight memiliki dua instalasi Python bawaan di kluster Spark, Anaconda Python 2.7 dan Python 3.5. Pelanggan mungkin perlu menyesuaikan lingkungan Python seperti memasang paket Python eksternal. Di sini, kami menunjukkan praktik terbaik mengelola lingkungan Python dengan aman untuk kluster Apache Spark di Microsoft Azure HDInsight.

Prasyarat

Klaster Apache Spark pada HDInsight. Untuk petunjuk selengkapnya, lihat Membuat kluster Apache Spark di Microsoft Azure HDInsight. Jika Anda belum memiliki kluster Spark di Microsoft Azure HDInsight, Anda dapat menjalankan tindakan skrip selama pembuatan kluster. Kunjungi dokumentasi tentang cara menggunakan tindakan skrip kustom.

Dukungan untuk perangkat lunak sumber terbuka yang digunakan pada kluster Microsoft Azure HDInsight

Layanan Microsoft Azure HDInsight menggunakan lingkungan teknologi sumber-terbuka yang terbentuk di sekitar Apache Hadoop. Microsoft Azure menyediakan tingkat dukungan umum untuk teknologi sumber terbuka. Untuk informasi selengkapnya, lihat Situs web FAQ Dukungan Azure. Layanan Microsoft Azure HDInsight memberikan tingkat dukungan tambahan untuk komponen bawaan.

Ada dua jenis komponen open-source yang tersedia dalam layanan Microsoft Azure HDInsight:

Komponen Deskripsi
Bawaan Komponen-komponen ini telah diinstal sebelumnya pada kluster Microsoft Azure HDInsight dan menyediakan fungsi inti kluster. Misalnya, Apache Hadoop YARN Resource Manager, Apache Hive query language (HiveQL), dan perpustakaan Mahout termasuk dalam kategori ini. Daftar lengkap komponen kluster tersedia di Apa yang baru di versi kluster Apache Hadoop yang disediakan oleh Microsoft Azure HDInsight.
Kustom Anda, sebagai pengguna kluster, dapat menginstal atau menggunakan dalam beban kerja Anda komponen apa pun yang tersedia di komunitas atau dibuat oleh Anda.

Penting

Komponen yang disediakan dengan kluster HDInsight didukung penuh. Dukungan Microsoft membantu mengisolasi dan menyelesaikan masalah terkait komponen-komponen ini.

Komponen kustom menerima dukungan yang wajar secara komersial untuk membantu Anda memecahkan masalah lebih lanjut. Dukungan Microsoft mungkin dapat mengatasi masalah ini ATAU mereka mungkin meminta Anda untuk melibatkan saluran yang tersedia untuk teknologi sumber terbuka di mana keahlian mendalam untuk teknologi tersebut ditemukan. Misalnya, ada banyak situs komunitas yang dapat digunakan, seperti: Halaman pertanyaan Microsoft Q&A untuk HDInsight, https://stackoverflow.com. Juga proyek Apache memiliki situs proyek di https://apache.org.

Memahami penginstalan Python default

Kluster HDInsight Spark telah memasang Anaconda. Ada dua penginstalan Python di kluster, Anaconda Python 2.7 dan Python 3.5. Tabel berikut ini memperlihatkan pengaturan Python default untuk Spark, Livy, dan Jupyter.

Pengaturan Python 2.7 Python 3.5
Jalur /usr/bin/anaconda/bin /usr/bin/anaconda/envs/py35/bin
Versi Spark Default diatur ke 2.7 Dapat mengubah config ke 3,5
Versi Livy Default diatur ke 2.7 Dapat mengubah config ke 3,5
Jupyter Kernel PySpark Kernel PySpark3

Untuk versi Spark 3.1.2, kernel Apache PySpark dihapus dan lingkungan Python 3.8 baru diinstal di bawah /usr/bin/miniforge/envs/py38/bin, yang digunakan oleh kernel PySpark3. Variabel lingkungan PYSPARK_PYTHON dan PYSPARK3_PYTHON diperbarui dengan yang berikut:

export PYSPARK_PYTHON=${PYSPARK_PYTHON:-/usr/bin/miniforge/envs/py38/bin/python}
export PYSPARK3_PYTHON=${PYSPARK_PYTHON:-/usr/bin/miniforge/envs/py38/bin/python}

Pasang paket Python eksternal dengan aman

Kluster Microsoft Azure HDInsight tergantung pada lingkungan Python bawaan, baik Python 2.7 dan Python 3.5. Menginstal paket kustom secara langsung di lingkungan bawaan default tersebut dapat menyebabkan perubahan versi pustaka yang tidak terduga. Dan memutuskan kluster lebih lanjut. Untuk menginstal paket Python eksternal kustom dengan aman untuk aplikasi Spark Anda, ikuti langkah-langkahnya.

  1. Buat lingkungan virtual Python menggunakan conda. Lingkungan virtual menyediakan ruang terisolasi untuk proyek Anda tanpa merusak yang lain. Saat membuat lingkungan virtual Python, Anda dapat menentukan versi python yang ingin Anda gunakan. Anda masih harus membuat lingkungan virtual meskipun Anda ingin menggunakan Python 2.7 dan 3.5. Persyaratan ini untuk memastikan lingkungan default kluster tidak rusak. Jalankan tindakan skrip pada kluster Anda untuk semua simpul dengan skrip berikut untuk membuat lingkungan virtual Python.

    • --prefix Tentukan jalur di mana lingkungan virtual conda hidup. Ada beberapa konfigurasi yang perlu diubah lebih lanjut berdasarkan jalur yang ditentukan di sini. Dalam contoh ini, kita menggunakan py35new, karena kluster memiliki lingkungan virtual yang sudah ada yang disebut py35.
    • python= Tentukan versi Python untuk lingkungan virtual. Dalam contoh ini, kita menggunakan versi 3.5, versi yang sama dengan kluster yang dibangun dalam satu. Anda juga bisa menggunakan versi Python lainnya untuk membuat lingkungan virtual.
    • anaconda Tentukan package_spec anaconda untuk memasang paket Anaconda di lingkungan virtual.
    sudo /usr/bin/anaconda/bin/conda create --prefix /usr/bin/anaconda/envs/py35new python=3.5 anaconda=4.3 --yes
    
  2. Pasang paket Python eksternal di lingkungan virtual yang dibuat jika diperlukan. Jalankan tindakan skrip pada kluster Anda untuk semua simpul dengan skrip berikut untuk menginstal paket Python eksternal. Anda harus memiliki izin sudo di sini untuk menulis file ke folder lingkungan virtual.

    Cari indeks paket untuk daftar lengkap paket yang tersedia. Anda juga bisa mendapatkan daftar paket yang tersedia dari sumber lain. Misalnya, Anda dapat memasang paket yang disediakan melalui conda-forge.

    Gunakan perintah berikut jika Anda ingin menginstal pustaka dengan versi terbarunya:

    • Gunakan saluran conda:

      • seaborn adalah nama paket yang ingin Anda pasang.
      • -n py35new tentukan nama lingkungan virtual yang baru saja dibuat. Pastikan untuk mengubah nama dengan sesuai berdasarkan pembuatan lingkungan virtual Anda.
      sudo /usr/bin/anaconda/bin/conda install seaborn -n py35new --yes
      
    • Atau gunakan repo PyPi, ubah seaborn dan py35new dengan sesuai:

      sudo /usr/bin/anaconda/envs/py35new/bin/pip install seaborn
      

    Gunakan perintah di bawah ini jika Anda ingin memasang pustaka dengan versi terbarunya:

    • Gunakan saluran conda:

      • numpy=1.16.1 adalah nama paket yang ingin Anda pasang.
      • -n py35new tentukan nama lingkungan virtual yang baru saja dibuat. Pastikan untuk mengubah nama dengan sesuai berdasarkan pembuatan lingkungan virtual Anda.
      sudo /usr/bin/anaconda/bin/conda install numpy=1.16.1 -n py35new --yes
      
    • Atau gunakan repo PyPi, ubah numpy==1.16.1 dan py35new dengan sesuai:

      sudo /usr/bin/anaconda/envs/py35new/bin/pip install numpy==1.16.1
      

    jika Anda tidak tahu nama lingkungan virtual, Anda dapat SSH ke simpul kepala kluster dan menjalankan /usr/bin/anaconda/bin/conda info -e untuk menunjukkan semua lingkungan virtual.

  3. Ubah konfigurasi Spark dan Livy dan arahkan ke lingkungan virtual yang dibuat.

    1. Buka Ambari UI, buka halaman Spark 2, tab Konfigurasi.

      Change Spark and Livy config through Ambari.

    2. Perluas Advanced livy2-env, tambahkan pernyataan berikut di bagian bawah. Jika Anda memasang lingkungan virtual dengan awalan yang berbeda, ubah jalur yang sesuai.

      export PYSPARK_PYTHON=/usr/bin/anaconda/envs/py35new/bin/python
      export PYSPARK_DRIVER_PYTHON=/usr/bin/anaconda/envs/py35new/bin/python
      

      Change Livy config through Ambari.

    3. Perluas spark2-env Lanjutan, ganti pernyataan PYSPARK_PYTHON yang ada di bagian bawah. Jika Anda memasang lingkungan virtual dengan awalan yang berbeda, ubah jalur yang sesuai.

      export PYSPARK_PYTHON=${PYSPARK_PYTHON:-/usr/bin/anaconda/envs/py35new/bin/python}
      

      Change Spark config through Ambari.

    4. Simpan perubahan dan hidupkan ulang layanan yang terpengaruh. Perubahan ini memerlukan mulai ulang layanan Spark 2. Ambari UI akan meminta pengingat menghidupkan ulang yang diperlukan, klik Hidupkan ulang untuk memulai ulang semua layanan yang terpengaruh.

      Restart services.

    5. Set dua properti ke sesi Spark Anda untuk memastikan bahwa pekerjaan menunjuk ke konfigurasi spark yang diperbarui: spark.yarn.appMasterEnv.PYSPARK_PYTHON dan spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON.

      Menggunakan terminal atau buku catatan, gunakan fungsi spark.conf.set tersebut.

      spark.conf.set("spark.yarn.appMasterEnv.PYSPARK_PYTHON", "/usr/bin/anaconda/envs/py35/bin/python")
      spark.conf.set("spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON", "/usr/bin/anaconda/envs/py35/bin/python")
      

      Jika Anda menggunakan livy, tambahkan properti berikut ke isi permintaan:

      "conf" : {
      "spark.yarn.appMasterEnv.PYSPARK_PYTHON":"/usr/bin/anaconda/envs/py35/bin/python",
      "spark.yarn.appMasterEnv.PYSPARK_DRIVER_PYTHON":"/usr/bin/anaconda/envs/py35/bin/python"
      }
      
  4. Jika Anda ingin menggunakan lingkungan virtual baru yang dibuat di Jupyter. Ubah konfigurasi Jupyter dan hidupkan ulang Jupyter. Jalankan tindakan skrip pada semua simpul header dengan pernyataan berikut untuk mengarahkan Jupyter ke lingkungan virtual baru yang dibuat. Pastikan untuk memodifikasi jalur ke awalan yang Anda tentukan untuk lingkungan virtual Anda. Setelah menjalankan aksi skrip ini, hidupkan ulang layanan Jupyter melalui Ambari UI untuk membuat perubahan ini tersedia.

    sudo sed -i '/python3_executable_path/c\ \"python3_executable_path\" : \"/usr/bin/anaconda/envs/py35new/bin/python3\"' /home/spark/.sparkmagic/config.json
    

    Anda dapat mengonfirmasi kembali lingkungan Python di Jupyter Notebook dengan menjalankan kode:

    Check Python version in Jupyter Notebook.

Langkah berikutnya