Bu konu, YARN düğüm etiketlerini, kullanım alanlarını ve sık karşılaşılan sorunları açıklar.
Arka plan
YARN düğüm etiketleri, YARN NodeManager düğümlerini bölümlere ayırır. Bir düğüm yalnızca tek bir düğüm etiketine atanabildiğinden, düğüm etiketlerini kullanarak bir YARN kümesini birbirinden ayrı düğüm kümelerine bölebilirsiniz. Varsayılan olarak, düğümler DEFAULT bölümüne (partition="", boş bir dize) aittir.
Bölümler iki türden biri olarak yapılandırılabilir:
özel bölüm: Yalnızca bu bölümü talep eden konteynerler ilgili düğümlerde çalıştırılabilir.
özel olmayan bölüm: Bu bölümü, DEFAULT bölümünü veya herhangi bir bölüm belirtmeyen konteynerler, boş kaynak varsa ilgili düğümlerde çalıştırılabilir.
Bölüm tabanlı zamanlamayı düğüm etiketleriyle destekleyen tek zamanlayıcı Capacity Scheduler'dır. Zamanlayıcıyı yapılandırarak veya bir hesaplama motorunun node-label-expression parametresini kullanarak bir kuyruğun konteynerlerini erişilebilir bölümlere atayabilirsiniz.
Düğüm etiketleri hakkında daha fazla bilgi için bkz. YARN Node Labels.
Sınırlamalar
Bu konu,
yarn-site.xmldosyanızdakiyarn.node-labels.configuration-typeparametresicentralizedolarak ayarlandığı sürece EMR-5.11.1 ve EMR-3.45.1 öncesi EMR sürümleri için geçerlidir.EMR 5.11.1 ve sonraki sürümleri ile 3.45.1 ve sonraki sürümleri, EMR konsolunda YARN bölümlerinin yönetilmesini destekler. Daha fazla bilgi için bkz. Manage YARN partitions in the EMR console.
Yordam
Konsolda düğüm etiketlerini etkinleştirin
EMR konsolunda YARN hizmeti yapılandırma sayfasına gidin. yarn-site.xml sekmesinde aşağıdaki özellikleri ekleyin. Ardından, yapılandırmayı kaydedin ve değişikliklerin uygulanması için ResourceManager'ı yeniden başlatın.
|
|
|
|
|
|
|
|
|
|
|
|
Bu konu, düğüm etiketi eşlemesinin çalışma ilkelerini açıklamak amacıyla
centralizedmodunu ele almaktadır. EMR 5.11.1 ve sonraki sürümleri ile 3.45.1 ve sonraki sürümleri varsayılan olarakyarn.node-labels.configuration-type=distributedkullanır. Bu sürümlerde, bu konuda anlatılan manuel komutları kullanmadan EMR konsolunda YARN bölümlerini yönetebilirsiniz. Daha fazla bilgi için bkz. Manage YARN partitions in the EMR console. Diğer gereksinimler için resmi Hadoop topluluğu belgelerine bakın.yarn.node-labels.fs-store.root-dir özelliğini bir şema içermeyen bir yola (tam URL yerine) ayarlarsanız, YARN
fs.defaultFStarafından belirtilen varsayılan dosya sistemini kullanır. Yapılandırma bu durumda${fs.defaultFS}/tmp/node-labelsdeğerine eşdeğer olur. EMR'de varsayılan dosya sistemi genellikle HDFS'dir.
Komutlarla düğüm etiketleri ekleyin ve düğümleri eşleyin
Ölçeklendirme sırasında esnek düğüm grubundaki NodeManager düğümlerine bölümlerin otomatik olarak atanmasını sağlamak için, bölümleri oluşturduktan sonra ilgili düğüm grubunun önyükleme betiğine replaceLabelsOnNode komutunu ekleyin. Betik, düğüm bileşenleri başladıktan sonra çalışır.
Örnek komutlar:
# Run commands as the default YARN administrator: hadoop
sudo su - hadoop
# Add partitions
yarn rmadmin -addToClusterNodeLabels "DEMO"
yarn rmadmin -addToClusterNodeLabels "CORE"
# List the YARN nodes
yarn node -list
# Map specific nodes to a partition
yarn rmadmin -replaceLabelsOnNode "core-1-1.c-XXX.cn-hangzhou.emr.aliyuncs.com=DEMO"
yarn rmadmin -replaceLabelsOnNode "core-1-2.c-XXX.cn-hangzhou.emr.aliyuncs.com=DEMO"
Komutlar başarılı olduktan sonra, sonuçları ResourceManager web arayüzünde doğrulayın.
ResourceManager Nodes sayfasında, iki core düğümünün (core-1-1 ve core-1-2) Node Labels sütunu DEMO değerini gösterir ve Node State RUNNING durumundadır. Bu durum, düğüm-etiket eşlemesinin aktif olduğunu gösterir.
Node Labels sayfasındaki tabloda, eklenen üç düğüm etiketi görüntülenir:
<DEFAULT_PARTITION>,COREveDEMO. Bunların Label Type değeri Exclusive Partition olarak ayarlanmıştır.
Kuyruk bölümlerini yapılandırın
Capacity Scheduler'ı kullanmak için, yarn-site.xml dosyasındaki yarn.resourcemanager.scheduler.class özelliğinin org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler olarak ayarlandığından emin olun.
capacity-scheduler.xml dosyasında, bir kuyruğun erişilebilir bölümlerini ve kapasitesini yapılandırmak için aşağıdaki özellikleri kullanın. <queue-path> ifadesini kuyruk yoluyla, <label> ifadesini ise bölüm adıyla değiştirin. DEFAULT bölümü için normal capacity veya maximum-capacity özelliklerini kullanabilirsiniz.
|
Parametre |
Değer |
Açıklama |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels |
Virgülle ayrılmış bölüm listesi. |
Kuyruk için erişilebilir bölümlerin listesini belirtir. |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.capacity |
Değer kuralları için bkz. yarn.scheduler.capacity.<queue-path>.capacity. |
Belirtilen erişilebilir bölümde kuyruk için kaynak kapasitesini belirtir. Önemli
Etkili olması için tüm üst kuyrukların kapasitesini de yapılandırmanız gerekir. |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.maximum-capacity |
Değer kuralları için bkz. yarn.scheduler.capacity.<queue-path>.maximum-capacity. Varsayılan değer 100'dür. |
Belirtilen erişilebilir bölümde kuyruğun kullanabileceği maksimum kaynak kapasitesini belirtir. |
|
yarn.scheduler.capacity.<queue-path>.default-node-label-expression |
Bir bölüm adı. Varsayılan değer, DEFAULT bölümünü temsil eden boş bir dizedir. |
Bu kuyruğa gönderilen ve bölüm belirtilmemiş işlerdeki konteyner istekleri için varsayılan bölümü belirtir. |
Belirtilen bir kuyruğun gerçek kaynak kapasitesinin 0'dan büyük olması için, aynı bölümün kapasitesini tüm üst kuyruklarda da yapılandırmanız gerekir. Bunun nedeni,
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.capacityparametresinin varsayılan değerinin 0 olmasıdır. Bu nedenle, alt kuyrukların bölüm üzerinde sıfırdan farklı bir kapasiteye sahip olabilmesi içinyarn.scheduler.capacity.root.accessible-node-labels.<label>.capacity=100şeklinde bir yapılandırma yapmalısınız. (Teorik olarak 0'dan büyük herhangi bir değer yeterlidir, ancak 100'den küçük bir değer yapılandırmak, alt kuyruklar için hesaplanan gerçek kapasiteyi azaltır ve çok fazla fayda sağlamaz). Bir üst kuyruk için kapasite yapılandırması eksikse ve varsayılan değer 0 ise, hedef kuyruğun bu bölümdeki hesaplanan gerçek kapasitesi de 0 olacaktır.-
yarn.scheduler.capacity.root.accessible-node-labels.<label>.capacitydeğeri 0'dan büyük bir değere ayarlandıktan sonra, normalyarn.scheduler.capacity.<queue-path>.capacityözelliğinde olduğu gibi aynı kural geçerlidir: aynı bölüm için tüm doğrudan alt kuyruklardakicapacitydeğerlerinin toplamı 100 olmalıdır.Örnek yapılandırma:
<configuration> <!-- Add node label properties in XML --> <property> <!-- Allow the default queue to access the DEMO partition (required) --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels</name> <value>DEMO</value> </property> <property> <!-- Set the DEMO partition capacity on all ancestor queues of the default queue (required) --> <name>yarn.scheduler.capacity.root.accessible-node-labels.DEMO.capacity</name> <value>100</value> </property> <property> <!-- Set the DEMO partition capacity for the default queue (required) --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels.DEMO.capacity</name> <value>100</value> </property> <property> <!-- Optional: set the maximum capacity for the default queue in the DEMO partition. The default is 100. --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels.DEMO.maximum-capacity</name> <value>100</value> </property> <property> <!-- Optional: set the default partition for container requests of jobs submitted to the default queue. The default is the DEFAULT partition "" --> <name>yarn.scheduler.capacity.root.default.default-node-label-expression</name> <value>DEMO</value> </property> <configuration>
Yapılandırmayı düzenleyip kaydettikten sonra, YARN hizmeti sayfasının Status sekmesindeki ResourceManager refreshQueues işlemini kullanarak zamanlayıcı yapılandırmasını sıcak güncelleyin. Ardından, işin beklendiği gibi çalıştığını doğrulayın. İş başarıyla tamamlandıktan sonra sonucu ResourceManager web arayüzünde kontrol edin. Yapılandırma etkili olduğunda, ResourceManager Scheduler sayfasında Partition: DEMO bölümünün kaynak tahsis ettiğini (memory:26214, vCores:16) görebilirsiniz. Kuyruk yapısı Queue: root > Queue: default şeklindedir. Bu durum, DEMO bölümü ve ilgili kuyruk kapasite ayarlarının uygulandığını gösterir.
Tez hariç çoğu hesaplama motoru, iş gönderme parametreleri aracılığıyla düğüm etiketlerini destekler; bu parametreler bu konunun kapsamında değildir.
|
Motor |
Parametre |
Açıklama |
|
MapReduce |
mapreduce.job.node-label-expression |
İşteki tüm konteynerler tarafından kullanılan varsayılan bölüm. |
|
mapreduce.job.am.node-label-expression |
ApplicationMaster tarafından kullanılan bölüm. |
|
|
mapreduce.map.node-label-expression |
Map görevleri tarafından kullanılan bölüm. |
|
|
mapreduce.reduce.node-label-expression |
Reduce görevleri tarafından kullanılan bölüm. |
|
|
Spark |
spark.yarn.am.nodeLabelExpression |
ApplicationMaster tarafından kullanılan bölüm. |
|
spark.yarn.executor.nodeLabelExpression |
Executor tarafından kullanılan bölüm. |
|
|
Flink |
yarn.application.node-label |
İşteki tüm konteynerler tarafından kullanılan varsayılan bölüm. |
|
yarn.taskmanager.node-label |
TaskManager tarafından kullanılan bölüm. Flink 1.15.0 ve sonraki sürümlerde desteklenir; bu sürümler EMR-3.44.0 (3.x) ve EMR-5.10.0 (5.x) ile eşleşir. |
SSS
HA kümelerinde düğüm etiketi verilerinin depolanması
Evet. Yüksek kullanılabilirlik (HA) kümesinde ResourceManager birden fazla düğümde dağıtılır. Açık kaynaklı Hadoop varsayılan olarak düğüm etiketi verilerini file:///tmp/hadoop-yarn-${user}/node-labels/ gibi yerel bir dizinde saklar. Yük devretme sonrası yeni aktif ResourceManager, önceki düğümde yerel olarak depolanan düğüm etiketi verilerini okuyamaz. Bu nedenle, yarn.node-labels.fs-store.root-dir parametresini /tmp/node-labels veya ${fs.defaultFS}/tmp/node-labels gibi dağıtık bir depolama yoluna ayarlamanız gerekir. EMR'de varsayılan dosya sistemi HDFS'dir. Ayrıntılar için bkz. Yordam.
Özel bir dağıtık yol için, dosya sistemi hizmetinin sağlıklı olduğundan ve hadoop kullanıcısının okuma ve yazma erişimine sahip olduğundan emin olun. Aksi takdirde, ResourceManager başlatılamaz.
NodeManager bağlantı noktasının belirtilmesi
Bir EMR kümesinde her düğümde en fazla bir NodeManager işlemi çalıştığından, bir bağlantı noktası belirtmek gerekli değildir. Yanlış veya rastgele bir bağlantı noktası belirtirseniz, replaceLabelsOnNode komutu düğümü bölüme eşleyemez. Bir düğümün mevcut bölümünü görüntülemek için yarn node -list -showDetails komutunu çalıştırabilirsiniz.
Düğüm etiketlerinin kullanım alanları
Çoğu durumda, bir EMR kümesinde düğüm etiketlerine gerek yoktur. Açık kaynaklı Hadoop YARN'deki birçok ölçüm bölümleri hesaba katmaz ve yalnızca DEFAULT bölümü için durum bildirir; bu durum operasyonel karmaşıklığı artırır. Bölüm tabanlı zamanlama ayrıca genel kaynak kullanımını azaltabilir ve kaynak israfına yol açabilir. Tipik kullanım alanları arasında toplu işler ile akış işlerinin bölümlerle ayrıştırılması, kritik işlerin esnek olmayan düğümlere sabitlenmesi ve kaynak dengesizliğini önlemek için farklı örnek türlerinin ayrı bölümlerde barındırılması yer alır.
İlgili belgeler
Küme düğümlerini bölümlere göre yönetmek için bkz. Use node labels to partition nodes.