Konfigurasi lanjutan: berbagi titik akhir pengembangan di antara banyak pengguna - AWS Glue

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasi lanjutan: berbagi titik akhir pengembangan di antara banyak pengguna

Bagian ini menjelaskan bagaimana Anda dapat memanfaatkan titik akhir pengembangan dengan SageMaker notebook dalam kasus penggunaan umum untuk berbagi titik akhir pengembangan di antara beberapa pengguna.

Konfigurasi penyewaan tunggal

Dalam kasus penggunaan satu penyewa tunggal, untuk menyederhanakan pengalaman developer dan untuk menghindari perebutan sumber daya, dianjurkan agar Anda mengharuskan setiap developer menggunakan titik akhir pengembangan mereka sendiri dengan ukuran yang disesuaikan untuk proyek yang mereka kerjakan. Hal ini juga menyederhanakan keputusan yang berkaitan dengan jenis pekerja dan jumlah DPU dengan menyerahkannya pada kebijaksanaan developer dan proyek yang sedang mereka kerjakan.

Anda tidak perlu mengurus alokasi sumber daya kecuali Anda menjalankan beberapa file notebook secara bersamaan. Jika Anda menjalankan kode dalam beberapa file notebook sekaligus, maka beberapa sesi Livy akan diluncurkan bersamaan. Untuk memisahkan konfigurasi klaster Spark agar menjalankan beberapa sesi Livy pada saat yang sama, Anda dapat mengikuti langkah-langkah yang diperkenalkan dalam kasus penggunaan multi penghuni.

Misalnya, jika titik akhir pengembangan Anda memiliki 10 pekerja dan jenis pekerja-nya adalah G.1X, maka Anda akan memiliki 9 pelaksana Spark dan seluruh klaster akan memiliki memori pelaksana sebesar 90G karena setiap pelaksana akan memiliki memori 10G.

Terlepas dari jenis pekerja yang ditentukan, alokasi sumber daya dinamis Spark akan dinyalakan. Jika set data cukup besar, Spark dapat mengalokasikan semua pelaksana untuk satu sesi Livy tunggal karena spark.dynamicAllocation.maxExecutors tidak diatur secara default. Ini berarti bahwa sesi Livy lainnya pada titik akhir pengembangan yang sama akan menunggu untuk meluncurkan pelaksana baru. Jika set data kecil, maka Spark akan dapat mengalokasikan pelaksana untuk beberapa sesi Livy pada saat yang sama.

catatan

Untuk informasi lebih lanjut tentang bagaimana sumber daya dialokasikan dalam kasus penggunaan yang berbeda dan bagaimana Anda menetapkan konfigurasi untuk mengubah perilaku, lihat Konfigurasi lanjutan: berbagi titik akhir pengembangan di antara banyak pengguna.

Konfigurasi multi-tenancy

catatan

Perlu dicatat bahwa, titik akhir pengembangan dimaksudkan untuk melakukan emulasi pada lingkungan ETL AWS Glue sebagai lingkungan penghuni tunggal. Meskipun penggunaan multi-penghuni dimungkinkan, namun konfigurasi ini merupakan kasus penggunaan lanjutan dan dianjurkan sebagian besar pengguna untuk tetap mempertahankan pola penghuni tunggal untuk setiap titik akhir pengembangan.

Dalam kasus penggunaan multi penghuni, Anda mungkin perlu mengurus alokasi sumber daya. Faktor utamanya adalah jumlah pengguna bersamaan yang menggunakan notebook Jupyter secara bersamaan. Jika tim Anda bekerja dalam alur kerja follow-the-sun "" dan hanya ada satu pengguna Jupyter di setiap zona waktu, maka jumlah pengguna bersamaan hanya satu, jadi Anda tidak perlu khawatir dengan alokasi sumber daya. Namun, jika notebook Anda dibagi di antara beberapa pengguna dan setiap pengguna mengirimkan kode secara sementara waktu, maka Anda akan perlu mempertimbangkan poin di bawah ini.

Untuk mempartisi sumber daya cluster Spark di antara beberapa pengguna, Anda dapat menggunakan SparkMagic konfigurasi. Ada dua cara berbeda untuk mengkonfigurasi SparkMagic.

(A) Gunakan direktif %%configure -f

Jika Anda ingin mengubah konfigurasi per sesi Livy dari notebook, maka Anda dapat menjalankan direktif %%configure -f pada paragraf notebook.

Misalnya, jika Anda ingin menjalankan aplikasi Spark pada 5 pelaksana, maka Anda dapat menjalankan perintah berikut pada paragraf notebook.

%%configure -f {"numExecutors":5}

Maka Anda akan melihat hanya 5 pelaksana yang berjalan untuk tugas pada Spark UI.

Kami merekomendasikan untuk membatasi jumlah maksimum pelaksana untuk alokasi sumber daya dinamis.

%%configure -f {"conf":{"spark.dynamicAllocation.maxExecutors":"5"}}

(B) Ubah SparkMagic file konfigurasi

SparkMagic bekerja berdasarkan Livy API. SparkMagic membuat sesi Livy dengan konfigurasi sepertidriverMemory,,, driverCores,executorMemory, executorCores numExecutorsconf, dll. Itulah faktor kunci yang menentukan berapa banyak sumber daya yang dikonsumsi dari seluruh cluster Spark. SparkMagic memungkinkan Anda menyediakan file konfigurasi untuk menentukan parameter yang dikirim ke Livy. Anda dapat melihat contoh file config dalam Repositori Github.

Jika Anda ingin mengubah konfigurasi di semua sesi Livy dari buku catatan, Anda dapat memodifikasi /home/ec2-user/.sparkmagic/config.json untuk menambahkansession_config.

Untuk memodifikasi file konfigurasi pada instance SageMaker notebook, Anda dapat mengikuti langkah-langkah ini.

  1. Buka buku SageMaker catatan.

  2. Buka kernel Terminal.

  3. Jalankan perintah berikut:

    sh-4.2$ cd .sparkmagic sh-4.2$ ls config.json logs sh-4.2$ sudo vim config.json

    Misalnya, Anda dapat menambahkan baris ini ke /home/ec2-user/.sparkmagic/config.json dan memulai ulang kernel Jupyter dari notebook.

    "session_configs": { "conf": { "spark.dynamicAllocation.maxExecutors":"5" } },

Panduan dan praktik terbaik

Untuk menghindari konflik sumber daya semacam ini, Anda dapat menggunakan beberapa pendekatan dasar, misalnya:

  • Memiliki klaster Spark yang lebih besar dengan meningkatkan NumberOfWorkers (penskalaan horizontal) dan meningkatkan workerType (penskalaan vertikal)

  • Mengalokasikan sumber daya yang lebih sedikit untuk setiap pengguna (lebih sedikit sumber daya per sesi Livy)

Pendekatan Anda akan tergantung pada kasus penggunaan Anda. Jika Anda memiliki titik akhir pengembangan yang lebih besar, dan data-nya tidak dalam jumlah besar, kemungkinan konflik sumber daya akan menurun secara signifikan karena Spark dapat mengalokasikan sumber daya berdasarkan strategi alokasi yang dinamis.

Seperti dijelaskan di atas, jumlah pelaksana Spark dapat dihitung secara otomatis berdasarkan kombinasi DPU (atau NumberOfWorkers) dan jenis pekerja. Masing-masing aplikasi Spark meluncurkan satu driver dan beberapa pelaksana. Untuk menghitung Anda akan membutuhkan NumberOfWorkers = NumberOfExecutors + 1. Matriks di bawah ini menjelaskan berapa banyak kapasitas yang Anda butuhkan dalam titik akhir pengembangan Anda berdasarkan jumlah pengguna bersamaan.

Jumlah pengguna notebook bersamaan Jumlah pelaksana Spark yang ingin Anda alokasikan per pengguna Total NumberOfWorkers untuk titik akhir dev Anda
3 5 18
10 5 60
50 5 300

Jika Anda ingin mengalokasikan sumber daya yang lebih sedikit untuk setiap pengguna, spark.dynamicAllocation.maxExecutors (atau numExecutors) akan menjadi parameter termudah untuk dikonfigurasi sebagai parameter sesi Livy. Jika Anda mengatur konfigurasi di bawah ini/home/ec2-user/.sparkmagic/config.json, maka SparkMagic akan menetapkan maksimum 5 pelaksana per sesi Livy. Hal ini akan membantu memisahkan sumber daya per sesi Livy.

"session_configs": { "conf": { "spark.dynamicAllocation.maxExecutors":"5" } },

Misalkan ada titik akhir pengembangan dengan 18 pekerja (G.1X) dan ada 3 pengguna notebook bersamaan pada saat yang sama. Jika config sesi Anda memiliki spark.dynamicAllocation.maxExecutors=5 maka setiap pengguna dapat menggunakan 1 driver dan 5 pelaksana. Tidak akan ada konflik sumber daya bahkan ketika Anda menjalankan beberapa paragraf buku catatan pada saat yang bersamaan.

Trade-off

Dengan config sesi "spark.dynamicAllocation.maxExecutors":"5" ini, Anda akan dapat menghindari kesalahan konflik sumber daya dan Anda tidak perlu menunggu alokasi sumber daya ketika ada akses pengguna secara bersamaan. Namun demikian, bahkan ketika ada banyak sumber daya gratis (misalnya, tidak ada pengguna bersamaan lainnya), Spark tidak dapat menetapkan lebih dari 5 pelaksana untuk sesi Livy Anda.

Catatan lainnya

Hal ini merupakan praktik yang baik untuk menghentikan kernel Jupyter saat Anda berhenti menggunakan sebuah notebook. Ini akan membebaskan sumber daya dan pengguna notebook lainnya dapat langsung menggunakan sumber daya tersebut tanpa perlu menunggu kernel menjadi kedaluwarsa (auto-shutdown).

Masalah umum

Bahkan ketika Anda sudah mengikuti pedoman, Anda mungkin masih akan mengalami masalah tertentu.

Sesi tidak ditemukan

Ketika Anda mencoba untuk menjalankan sebuah paragraf notebook meskipun sesi Livy Anda telah dihentikan, Anda akan melihat pesan di bawah ini. Untuk mengaktifkan sesi Livy, Anda perlu memulai ulang kernel Jupyter dengan memilih Kernel > Mulai Ulang di menu Jupyter, lalu jalankan paragraf notebook lagi.

An error was encountered: Invalid status code '404' from http://localhost:8998/sessions/13 with error payload: "Session '13' not found."

Sumber daya YARN tidak cukup

Ketika Anda mencoba untuk menjalankan sebuah paragraf notebook meskipun klaster Spark Anda tidak memiliki cukup sumber daya untuk memulai sesi Livy baru, Anda akan melihat pesan di bawah ini. Anda sering kali dapat menghindari masalah ini dengan mengikuti panduan, namun, mungkin ada kemungkinan bahwa Anda akan menghadapi masalah ini. Untuk mengatasi masalah ini, Anda dapat memeriksa apakah ada sesi Livy aktif yang tidak dibutuhkan. Jika ada sesi Livy yang tidak dibutuhkan, Anda harus mengakhirinya untuk membebaskan sumber daya klaster. Untuk informasi detail, lihat bagian berikutnya.

Warning: The Spark session does not have enough YARN resources to start. The code failed because of a fatal error: Session 16 did not start up in 60 seconds.. Some things to try: a) Make sure Spark has enough available resources for Jupyter to create a Spark context. b) Contact your Jupyter administrator to make sure the Spark magics library is configured correctly. c) Restart the kernel.

Pemantauan dan debugging

Bagian ini menjelaskan teknik untuk melakukan pemantauan sumber daya dan sesi.

Memantau dan men-debug alokasi sumber daya cluster

Anda dapat mengawasi Spark UI untuk memantau berapa banyak sumber daya yang dialokasikan per sesi Livy, dan apa konfigurasi Spark yang berlaku pada tugas. Untuk mengaktifkan Spark UI, lihat Mengaktifkan Apache Spark Web UI untuk Titik Akhir Pengembangan.

(Opsional) Jika Anda membutuhkan tampilan waktu nyata dari Spark UI, Anda dapat mengkonfigurasi terowongan SSH terhadap server riwayat Spark yang berjalan pada klaster Spark.

ssh -i <private-key.pem> -N -L 8157:<development endpoint public address>:18080 glue@<development endpoint public address>

Anda kemudian dapat membuka http://localhost:8157 pada peramban Anda untuk melihat Spark UI.

Sesi Livy gratis yang tidak dibutuhkan

Tinjau prosedur ini untuk menutup setiap sesi Livy yang tidak diperlukan dari notebook atau klaster Spark.

(a). Mengakhiri sesi Livy dari sebuah notebook

Anda dapat mematikan kernel pada notebook Jupyter untuk mengakhiri sesi Livy yang tidak dibutuhkan.

(b). Mengakhiri sesi Livy dari klaster Spark

Jika ada sesi Livy yang tidak diperlukan yang masih berjalan, Anda dapat menutup sesi Livy pada klaster Spark.

Sebagai prasyarat untuk melakukan prosedur ini, Anda perlu mengkonfigurasi kunci publik SSH Anda untuk titik akhir pengembangan Anda.

Untuk log in ke klaster Spark, Anda dapat menjalankan perintah berikut:

$ ssh -i <private-key.pem> glue@<development endpoint public address>

Anda dapat menjalankan perintah berikut untuk melihat sesi Livy yang aktif:

$ yarn application -list 20/09/25 06:22:21 INFO client.RMProxy: Connecting to ResourceManager at ip-255-1-106-206.ec2.internal/172.38.106.206:8032 Total number of applications (application-types: [] and states: [SUBMITTED, ACCEPTED, RUNNING]):2 Application-Id Application-Name Application-Type User Queue State Final-State Progress Tracking-URL application_1601003432160_0005 livy-session-4 SPARK livy default RUNNING UNDEFINED 10% http://ip-255-1-4-130.ec2.internal:41867 application_1601003432160_0004 livy-session-3 SPARK livy default RUNNING UNDEFINED 10% http://ip-255-1-179-185.ec2.internal:33727

Anda kemudian dapat menutup sesi Livy dengan perintah berikut ini:

$ yarn application -kill application_1601003432160_0005 20/09/25 06:23:38 INFO client.RMProxy: Connecting to ResourceManager at ip-255-1-106-206.ec2.internal/255.1.106.206:8032 Killing application application_1601003432160_0005 20/09/25 06:23:39 INFO impl.YarnClientImpl: Killed application application_1601003432160_0005