ノード属性は、リソース保証なしでノードの属性を記述する方法です。アプリケーションは、これらの属性の複数表現に基づいて、コンテナを配置するのに適したノードを選択するために使用できます。
ノード属性
の主な機能は以下のとおりです。
ラベルとは異なり、属性は集中型モードと分散型モードの両方から同時にノードにマップできます。属性は異なるモードで異なるプレフィックスで識別されるため、競合はありません。**集中型**の場合、属性はプレフィックス*「rm.yarn.io」*で識別され、**分散型**の場合、属性はプレフィックス*「nm.yarn.io」*で識別されます。これは、属性が*プレフィックス*と*名前*によって一意に識別されることを意味します。
ノードラベルとは異なり、ノード属性は常に存在するため、明示的に有効にする必要はなく、機能が使用されていない場合でもパフォーマンスや互換性に影響を与えることはありません。
yarn-site.xml
で以下のプロパティを設定します。
プロパティ | 値 | デフォルト値 |
---|---|---|
yarn.node-attribute.fs-store.root-dir | 集中型属性マッピングが格納されるパス | file:///tmp/hadoop-yarn-${user}/node-attribute/ |
yarn.node-attribute.fs-store.impl.class | 設定されたクラスはorg.apache.hadoop.yarn.nodelabels.NodeAttributeStoreを拡張する必要があります | FileSystemNodeAttributeStore |
注記
yarn.node-attribute.fs-store.root-dir
がリソースマネージャープロセスユーザーで作成され、ResourceManager
がアクセスできる権限を持っていることを確認してください。(通常は「yarn」ユーザーから)file:///home/yarn/node-attributes
のようなパスを使用できます。hdfsに保存する場合は、hdfs://namenode:port/path/to/store/node-attributes/
のようなパスを使用できます。**集中型**アプローチでは、属性をノードにマップするために3つのオプションがサポートされています。
**add** yarn nodeattributes -add "node1:attribute[(type)][=value],attribute2 node2:attribute2[=value],attribute3"
を実行すると、ノードの既存のマッピングに影響を与えることなく、ノードに属性が追加されます。
**remove** yarn nodeattributes -remove "node1:attribute,attribute1 node2:attribute2"
を実行すると、ノードの既存のマッピングに影響を与えることなく、ノードから属性が削除されます。
**replace** yarn nodeattributes -replace "node1:attribute[(type)][=value],attribute1[=value],attribute2 node2:attribute2[=value],attribute3"
を実行すると、ノードの既存の属性がこのコマンドの一部として設定された属性に置き換えられます。
注記
**分散型**モードでノードに属性を設定する
プロパティ | 値 |
---|---|
yarn.nodemanager.node-attributes.provider | 管理者は、NMでこのパラメータを設定することにより、ノード属性のプロバイダーを設定できます。管理者は、*「config」*、*「script」*、またはプロバイダーの*クラス名*を設定できます。設定されたクラスは、*org.apache.hadoop.yarn.server.nodemanager.nodelabels.NodeAttributesProvider*を拡張する必要があります。*「config」*が設定されている場合、*「ConfigurationNodeAttributesProvider」*が使用され、*「script」*が設定されている場合、*「ScriptBasedNodeAttributesProvider」*が使用されます。 |
yarn.nodemanager.node-attributes.provider.fetch-interval-ms | *「yarn.nodemanager.node-attributes.provider」*が*「config」*、*「script」*、またはNodeAttributesProviderを拡張する*設定されたクラス*で設定されている場合、ノード属性はノード属性プロバイダーから定期的に取得されます。この設定は、間隔期間を定義するためのものです。-1が設定されている場合、ノード属性は初期化中にのみプロバイダーから取得されます。デフォルトは10分です。 |
yarn.nodemanager.node-attributes.provider.fetch-timeout-ms | *「yarn.nodemanager.node-attributes.provider」*が*「script」*で設定されている場合、この設定は、ノード属性を照会するスクリプトを中断するまでのタイムアウト期間を提供します。デフォルトは20分です。 |
yarn.nodemanager.node-attributes.provider.script.path | NMがノード属性を収集するために実行するノード属性スクリプト。スクリプト出力で「NODE_ATTRIBUTE:」で始まる行は、ノード属性のレコードと見なされ、属性名、タイプ、値はコンマで区切る必要があります。このような各行はノード属性に解析されます。 |
yarn.nodemanager.node-attributes.provider.script.opts | ノード属性スクリプトに渡す引数。 |
yarn.nodemanager.node-attributes.provider.configured-node-attributes | 「yarn.nodemanager.node-attributes.provider」が「config」で設定されている場合、ConfigurationNodeAttributesProviderはこのパラメータからノード属性を取得します。 |
アプリケーションは、配置制約ドキュメントに記載されているように、配置制約APIを使用してノード属性リクエストを指定できます。
NodeAttribute式を使用してスケジューリングリクエストオブジェクトを作成する例を以下に示します。
//expression : AND(python!=3:java=1.8) SchedulingRequest schedulingRequest = SchedulingRequest.newBuilder().executionType( ExecutionTypeRequest.newInstance(ExecutionType.GUARANTEED)) .allocationRequestId(10L).priority(Priority.newInstance(1)) .placementConstraintExpression( PlacementConstraints.and( PlacementConstraints .targetNodeAttribute(PlacementConstraints.NODE, NodeAttributeOpCode.NE, PlacementConstraints.PlacementTargets .nodeAttribute("python", "3")), PlacementConstraints .targetNodeAttribute(PlacementConstraints.NODE, NodeAttributeOpCode.EQ, PlacementConstraints.PlacementTargets .nodeAttribute("java", "1.8"))) .build()).resourceSizing( ResourceSizing.newInstance(1, Resource.newInstance(1024, 1))) .build();
上記のSchedulingRequestは、以下の制約を満たすノード上の1つのコンテナを要求します。
ノード属性rm.yarn.io/python
が存在しないか、存在しても値が3と等しくない。
ノード属性rm.yarn.io/java
が存在し、その値が1.8と等しい必要がある。
http://rm-http-address:port/ws/v1/cluster/nodes/{nodeid}
REST出力の一部として、指定されたノードにマッピングされた属性とその値を取得できます。
今後サポート予定です。
yarn cluster --list-node-attributes
を使用して、クラスタ内のすべての属性を取得します。yarn nodeattributes -list
を使用して、クラスタ内の属性を取得します。yarn nodeattributes -attributestonodes -attributes <Attributes>
を使用して、各属性について、マッピングされているすべてのノードと各ノードに設定されている属性値を一覧表示します。必要に応じて、*`-attributes`*を使用して特定の属性を指定できます。yarn nodeattributes -nodestoattributes -nodes <Host Names>
を使用して、ノードにマッピングされているすべての属性とその値を一覧表示します。必要に応じて、*`-nodes`*を使用して特定のノードを指定できます。yarn node -status
から取得したノードのステータス/詳細は、ノードに関連付けられているすべての属性とその値を一覧表示します。