Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengelola klaster virtual
Sebuah klaster virtual adalah namespace Kubernetes tempat Amazon EMR terdaftar. Anda dapat menciptakan, menggambarkan, membuat daftar, dan menghapus klaster virtual. Mereka tidak mengonsumsi sumber daya tambahan apa pun dalam sistem Anda. Sebuah klaster virtual tunggal memetakan ke satu namespace Kubernetes. Mengingat hubungan ini, Anda dapat memodelkan klaster virtual dengan cara yang sama Anda memodelkan namespace Kubernetes untuk memenuhi persyaratan Anda. Lihat kemungkinan kasus penggunaan di dokumentasi Gambaran Umum Konsep Kubernetes
Untuk mendaftar Amazon EMR dengan namespace Kubernetes pada klaster Amazon EKS, Anda perlu nama klaster EKS dan namespace yang telah diatur untuk menjalankan beban kerja Anda. Klaster terdaftar tersebut di Amazon EMR disebut klaster virtual karena mereka tidak mengelola komputasi atau penyimpanan fisik tetapi menunjuk ke namespace Kubernetes di mana beban kerja Anda dijadwalkan.
catatan
Sebelum membuat klaster virtual, Anda harus terlebih dahulu menyelesaikan langkah 1-8 di Menyiapkan Amazon EMR di EKS.
Topik
Membuat klaster virtual
Jalankan perintah berikut untuk membuat klaster virtual dengan mendaftarkan Amazon EMR dengan namespace pada klaster EKS. Ganti virtual_cluster_name dengan nama yang Anda berikan untuk cluster virtual Anda. Ganti eks_cluster_name dengan nama cluster EKS. Ganti namespace_name dengan namespace yang ingin Anda daftarkan Amazon EMR.
aws emr-containers create-virtual-cluster \ --namevirtual_cluster_name\ --container-provider '{ "id": "eks_cluster_name", "type": "EKS", "info": { "eksInfo": { "namespace": "namespace_name" } } }'
Atau, Anda dapat membuat file JSON yang mencakup parameter yang diperlukan untuk klaster virtual, seperti yang ditunjukkan contoh berikut.
{ "name": "virtual_cluster_name", "containerProvider": { "type": "EKS", "id": "eks_cluster_name", "info": { "eksInfo": { "namespace": "namespace_name" } } } }
Kemudian jalankan perintah create-virtual-cluster berikut dengan jalur ke file JSON.
aws emr-containers create-virtual-cluster \ --cli-input-jsonfile://./create-virtual-cluster-request.json
catatan
Untuk memvalidasi keberhasilan pembuatan klaster virtual, lihat status klaster virtual dengan menjalankan perintah list-virtual-clusters atau dengan masuk ke halaman Klaster virtual di konsol Amazon EMR.
Daftar klaster virtual
Jalankan perintah berikut untuk menampilkan status klaster virtual.
aws emr-containers list-virtual-clusters
Gambarkan klaster virtual
Jalankan perintah berikut untuk mendapatkan detail lebih lanjut tentang klaster virtual, seperti namespace, status, dan tanggal terdaftar. Ganti 123456 dengan ID cluster virtual Anda.
aws emr-containers describe-virtual-cluster --id123456
Menghapus klaster virtual
Jalankan perintah berikut untuk menghapus klaster virtual. Ganti 123456 dengan ID cluster virtual Anda.
aws emr-containers delete-virtual-cluster --id123456
Status klaster virtual
Tabel berikut menjelaskan empat kemungkinan status klaster virtual.
State |
Deskripsi |
|---|---|
|
|
Klaster virtual berada dalam status RUNNING. |
|
|
Penghentian klaster virtual yang diminta sedang berlangsung. |
|
|
Penghentian yang diminta selesai. |
|
|
Penghentian yang diminta gagal karena izin yang tidak mencukupi. |
Batas pekerjaan bersamaan untuk cluster virtual
Anda dapat mengonfigurasi batas pekerjaan bersamaan pada Amazon EMR di cluster virtual EKS untuk mengontrol berapa banyak pekerjaan yang dijalankan secara bersamaan dan berapa banyak yang dapat menunggu dalam antrian. Anda menetapkan batas konkurensi (maxConcurrentJobRuns) dan kedalaman antrian (maxInQueueJobRuns) secara independen, sehingga Anda dapat membatasi proses pekerjaan yang sedang berjalan, pekerjaan yang diantri, atau keduanya. Saat Anda menetapkan batas ini, StartJobRun API menyediakan tekanan balik di tingkat cluster virtual. Pekerjaan berjalan melampaui batas berjalan menunggu dalam antrian dalam PENDING status SUBMITTED atau alih-alih memulai segera, dan setelah antrian penuh, pengiriman lebih StartJobRun lanjut ditolak. Misalnya, jika Anda menyetel cluster virtual untuk mengizinkan 500 pekerjaan berjalan bersamaan dan 100 pekerjaan yang diantri dijalankan, pengiriman antrian ke-101 ditolak, dan Anda dapat menyeimbangkan kembali beban kerja tersebut di kluster virtual lain pada cluster EKS yang sama atau menambah kapasitas. Jika Anda belum menetapkan batas konkurensi dan kedalaman antrian terus bertambah, sehingga proses pekerjaan tetap berada di PENDING status SUBMITTED atau lebih lama sebelum dimulai, itu dapat menandakan bahwa cluster EKS yang mendasarinya kehabisan sumber daya komputasi dan tidak dapat menjadwalkan pod baru dengan cukup cepat. Dalam hal ini, rute beban kerja ke cluster lain atau tambahkan kapasitas.
Batas pekerjaan bersamaan menambahkan lapisan kontrol di depan penjadwal Kubernetes dan ResourceQuota StartJobRun, sebelum pod apa pun dibuat, kelebihan beban diantrean atau ditolak di API, yang melindungi cluster yang mendasarinya sebelum pekerjaan mencapainya. Kubernetes masih memberlakukan CPU dan langit-langit memori yang sebenarnya di bawahnya.
Manfaat utama dari batas pekerjaan bersamaan
-
Mencegah kelebihan beban beris ik tetangga — Membatasi jumlah pekerjaan yang berjalan dan diantrean per cluster virtual, sehingga satu cluster virtual tidak dapat memonopoli cluster EKS bersama dan menyebabkan kegagalan penjadwalan tetangga bising untuk cluster virtual lainnya.
-
Mengaktifkan pembentukan lalu lintas - Mengembalikan penolakan langsung saat antrian cluster virtual penuh, sehingga Anda dapat mengarahkan pengiriman ke cluster virtual lain alih-alih membebani satu cluster virtual.
-
Menyedi akan visibilitas — Memancarkan per-kluster
JobsRunningvirtual danJobsInQueueCloudWatch metrik diAWS/EMRContainersnamespace untuk jumlah pekerjaan aktif dan dalam antrian setiap 5 menit, yang memberi Anda sinyal kesehatan untuk penjadwalan.
Memulai dengan batas pekerjaan bersamaan
Anda mengonfigurasi batas pekerjaan bersamaan dengan schedulerConfiguration bidang pada cluster virtual. Bidang ini menerima dua parameter:
maxConcurrentJobRuns-
Jumlah maksimum pekerjaan yang dijalankan yang dapat berada di
RUNNINGnegara setiap saat. maxInQueueJobRuns-
Jumlah maksimum pekerjaan yang dijalankan yang dapat berada di
SUBMITTEDstatusPENDINGatau (kedalaman antrian) setiap saat.
AWS CLI
Untuk menetapkan batas saat Anda membuat cluster virtual, tentukan schedulerConfiguration dalam permintaan Anda.
aws emr-containers create-virtual-cluster \ --namemy-virtual-cluster\ --container-provider '{ ... }' \ --scheduler-configuration '{ "maxConcurrentJobRuns": 500, "maxInQueueJobRuns": 100 }'
Untuk mengubah batas pada cluster virtual yang ada, gunakan update-virtual-cluster perintah.
aws emr-containers update-virtual-cluster \ --idvirtual-cluster-id\ --scheduler-configuration '{ "maxConcurrentJobRuns": 500, "maxInQueueJobRuns": 100 }'
Untuk menghapus batas dari cluster virtual, berikan yang kosongschedulerConfiguration. Ini menghapus konfigurasi, sehingga tidak ada batasan yang berlaku dan cluster virtual kembali ke perilaku default (tidak terbatas). Perhatikan bahwa menghilangkan schedulerConfiguration dari permintaan malah membuat batas yang ada tidak berubah — Anda harus meneruskan objek kosong untuk menghapusnya.
aws emr-containers update-virtual-cluster \ --idvirtual-cluster-id\ --scheduler-configuration '{}'
Untuk melihat batas saat ini dan jumlah pekerjaan langsung, gunakan describe-virtual-cluster perintah. Responsnya mencakup Anda schedulerConfiguration dan SchedulerStatus objek dengan arus activeJobRunCount daninQueueJobRunCount.
catatan
Saat Anda mengirimkan pekerjaan yang dijalankan ke cluster virtual yang antriannya penuh, StartJobRun mengembalikan aValidationException.
Memilih nilai untuk max ConcurrentJobRuns dan max InQueueJobRuns
Batas yang tepat bergantung pada tiga hal: seberapa banyak pekerjaan yang dapat dijalankan cluster Amazon EKS Anda sekaligus, seberapa buruknya kiriman Anda, dan bagaimana Anda ingin kluster virtual berperilaku saat penuh. Gunakan panduan berikut untuk memilih titik awal, lalu perbaiki dari penghitung langsung.
Pengaturan maks ConcurrentJobRuns (menjalankan slot)
maxConcurrentJobRunsadalah pagar pembatas berbasis granularitas pekerjaan dan hitung. Perkiraan kasar di sini dapat melindungi cluster Amazon EKS yang mendasarinya agar tidak terdegradasi karena beban dan dapat meningkatkan ketersediaan.
-
Mulai dari kapasitas dibagi dengan jejak per pekerjaan. Dasarkan pada apa yang diminta setiap pekerjaan (driver, eksekutor, dan overhead memori), dan targetkan sekitar 70-80 persen kapasitas namespace Anda untuk meninggalkan ruang untuk overhead driver, peningkatan skala node, dan burst.
-
Tutup ukuran setiap pekerjaan (T-shirt ukuran). Mengikat setiap pekerjaan dengan
spark.dynamicAllocation.maxExecutorsdan standarisasi pada beberapa ukuran — misalnya, Kecil (20 pelaksana), Sedang (100), dan Besar (sekitar 500) — sehingga dimaxConcurrentJobRunskalikan dengan batas dipetakan ke kapasitas alih-alih kelebihan penyediaan atau kekurangan penyediaan untuk rata-rata variabel. Untuk matematika terbersih, rute setiap kelas ukuran ke cluster virtualnya sendiri. -
Dengarkan dari konter langsung. Mulai konservatif dan naikkan nilai secara bertahap saat Anda menonton
activeJobRunCountdanJobsRunningmetrik diAWS/EMRContainersnamespace.
Pengaturan maks InQueueJobRuns (kedalaman antrian)
maxInQueueJobRunsmengontrol seberapa besar backlog yang diterima cluster virtual sebelum mulai menolak pengiriman. Ini adalah buffer penyerapan ledakan. Pertimbangkan faktor-faktor berikut.
-
Profil burst — Ukuran antrian untuk menyerap ledakan pengiriman yang Anda harapkan di atas tingkat lari Anda. Jika saluran pipa terjadwal melepaskan banyak pekerjaan sekaligus, antrian yang lebih dalam mencegah penolakan palsu. Dasarkan kedalaman pada ukuran burst yang Anda harapkan, bukan pada kelipatan tetap
maxConcurrentJobRuns, dan validasi terhadap batas waktu drain-time yang mengikuti. -
Waktu tunggu yang dapat diterima — Pekerjaan yang mengantri menunggu slot yang sedang berjalan dibebaskan. Pekerjaan di belakang antrian penuh menunggu kira-kira kedalaman antrian dibagi dengan throughput penyelesaian. Misalnya, jika pekerjaan selesai pada N per menit dan antrian menahan Q, ekor menunggu sekitar Q dibagi dengan N menit. Simpan ini dalam SLA Anda. Karena pekerjaan buffer gagal setelah 30 menit jika tidak ada slot yang dibebaskan, jaga agar tetap cukup
maxInQueueJobRunskecil sehingga antrian penuh habis dengan baik dalam waktu 30 menit pada tingkat penyelesaian tetap Anda. Jika tidak, pekerjaan yang antri habis. -
Tekanan balik dibandingkan dengan buffering — Antrian yang lebih dalam menghaluskan semburan, tetapi menunda penolakan penuh antrian yang Anda gunakan untuk pembentukan lalu lintas dan meningkatkan latensi ekor. Antrian dangkal gagal dengan cepat, yang memberi klien sinyal awal yang dapat ditindaklanjuti untuk mencoba lagi atau merutekan ke tempat lain. Pilih berdasarkan apakah Anda lebih suka menyangga beban atau menghilangkan dan mengarahkannya kembali.
-
Perilaku coba ulang klien — Saat antrian penuh,
StartJobRunmengembalikan aValidationException. Pastikan pengirim Anda menangani pengecualian ini — coba lagi dengan backoff, atau rute beban kerja ke cluster virtual lain. Atur kedalaman sehingga penolakan terjadi hanya selama kelebihan beban asli, bukan selama operasi rutin.
Pertimbangan untuk batas pekerjaan bersamaan
-
Tidak ada batasan yang diterapkan secara default. Cluster virtual dan beban kerja yang ada tidak terpengaruh kecuali Anda menetapkan secara eksplisit.
schedulerConfiguration -
Karena penghitung dipertahankan di seluruh sistem terdistribusi, terkadang Anda dapat mengharapkan delta transien kecil dari nilai sebenarnya. Rekonsiliasi internal mengoreksi penyimpangan apa pun.