YARN 支援可延伸資源模型。預設情況下,YARN 會追蹤所有節點、應用程式和佇列的 CPU 和記憶體,但資源定義可以延伸,以包含任意「可計算」資源。可計算資源是指容器執行時會消耗的資源,但之後會釋放。CPU 和記憶體都是可計算資源。其他範例包括 GPU 資源和軟體授權。
此外,YARN 也支援使用「資源設定檔」,讓使用者可以透過單一設定檔指定多個資源要求,類似於 Amazon Web Services Elastic Compute Cluster 執行個體類型。例如,「大型」可能表示 8 個虛擬核心和 16GB RAM。
支援下列組態屬性。詳情請見下方。
yarn-site.xml
組態屬性 | 說明 |
---|---|
yarn.resourcemanager.resource-profiles.enabled |
指出是否啟用資源設定檔支援。預設為 false 。 |
resource-types.xml
組態屬性 | 說明 |
---|---|
yarn.resource-types |
其他資源的逗號分隔清單。不得包含 memory 、memory-mb 或 vcores |
yarn.resource-types.<resource>.units |
指定資源類型的預設單位 |
yarn.resource-types.<resource>.minimum-allocation |
指定資源類型要求的最小值 |
yarn.resource-types.<resource>.maximum-allocation |
指定資源類型要求的最大值 |
node-resources.xml
組態屬性 | 說明 |
---|---|
yarn.nodemanager.resource-type.<resource> |
節點管理員可用的指定資源數量 |
請注意,如果使用 resource-types.xml
和 node-resources.xml
檔案,它們也需要與 yarn-site.xml
放置在同一個組態目錄中。或者,也可以將這些屬性放置在 yarn-site.xml
檔案中。
資源管理員是叢集中追蹤資源的最終仲裁者。資源管理員從 XML 組態檔案載入其資源定義。例如,若要定義 CPU 和記憶體以外的新資源,應設定下列屬性
<configuration> <property> <name>yarn.resource-types</name> <value>resource1,resource2</value> <description> The resources to be used for scheduling. Use resource-types.xml to specify details about the individual resource types. </description> </property> </configuration>
有效的資源名稱必須以字母開頭,且只能包含字母、數字和下列任一字元:『。』、『_』或『-』。有效的資源名稱也可以選擇在名稱空間前面加上斜線。有效的名稱空間包含以句點分隔的字母、數字和破折號群組。例如,下列是有效的資源名稱
下列是無效資源名稱的範例
對於定義的每種新資源類型,都可以新增一個選用的單位屬性,以設定資源類型的預設單位。有效值為
單位名稱 | 意義 |
---|---|
p | 皮可 |
n | 奈米 |
u | 微 |
m | 毫 |
預設,即沒有單位 | |
k | 千 |
M | 百萬 |
G | 十億 |
T | 兆 |
P | 拍 |
Ki | 二進位千,即 1024 |
Mi | 二進位百萬,即 1024^2 |
Gi | 二進位十億,即 1024^3 |
Ti | 二進位兆,即 1024^4 |
Pi | 二進位拍,即 1024^5 |
屬性必須命名為 yarn.resource-types.<resource>.units
。每個已定義的資源也可以有選用的最小值和最大值屬性。這些屬性必須命名為 yarn.resource-types.<resource>.minimum-allocation
和 yarn.resource-types.<resource>.maximum-allocation
。
yarn.resource-types
屬性和任何單位、最小值或最大值屬性可以在一般的 yarn-site.xml
檔案中定義,也可以在名為 resource-types.xml
的檔案中定義。例如,下列內容可以出現在任一檔案中
<configuration> <property> <name>yarn.resource-types</name> <value>resource1, resource2</value> </property> <property> <name>yarn.resource-types.resource1.units</name> <value>G</value> </property> <property> <name>yarn.resource-types.resource2.minimum-allocation</name> <value>1</value> </property> <property> <name>yarn.resource-types.resource2.maximum-allocation</name> <value>1024</value> </property> </configuration>
每個節點管理員獨立定義該節點可用的資源。資源定義是透過為每個可用資源設定屬性來完成。屬性名稱必須為 yarn.nodemanager.resource-type.<resource>
,且可以放在一般的 yarn-site.xml
檔案或名為 noderesources.xml
的檔案中。屬性的值應該是節點提供的該資源數量。例如
<configuration> <property> <name>yarn.nodemanager.resource-type.resource1</name> <value>5G</value> </property> <property> <name>yarn.nodemanager.resource-type.resource2</name> <value>2m</value> </property> </configuration>
請注意,這些資源使用的單位不需要與資源管理員所擁有的定義相符。如果單位不符,資源管理員會自動進行轉換。
MapReduce 從 YARN 要求三種不同類型的容器:應用程式主控容器、Map 容器和 Reduce 容器。對於每種容器類型,都有一組對應的屬性可用於設定所要求的資源。
在 MapReduce 中設定資源要求的屬性為
屬性 | 說明 |
---|---|
yarn.app.mapreduce.am.resource.mb |
將應用程式主控容器所要求的記憶體設定為 MB 中的值。不再建議使用。請改用 yarn.app.mapreduce.am.resource.memory-mb 。預設為 1536。 |
yarn.app.mapreduce.am.resource.memory |
將應用程式主控容器所要求的記憶體設定為 MB 中的值。不再建議使用。請改用 yarn.app.mapreduce.am.resource.memory-mb 。預設為 1536。 |
yarn.app.mapreduce.am.resource.memory-mb |
將應用程式主控容器所要求的記憶體設定為 MB 中的值。預設為 1536。 |
yarn.app.mapreduce.am.resource.cpu-vcores |
將應用程式主控容器所要求的 CPU 設定為該值。不再建議使用。請改用 yarn.app.mapreduce.am.resource.vcores 。預設為 1。 |
yarn.app.mapreduce.am.resource.vcores |
將應用程式主控容器所要求的 CPU 設定為該值。預設為 1。 |
yarn.app.mapreduce.am.resource.<resource> |
將應用程式主控容器所要求的 <resource> 數量設定為該值。如果未指定單位,則假設為該資源的預設單位。請參閱上方關於單位的章節。 |
mapreduce.map.memory.mb |
將所有 Map 任務容器所要求的記憶體設定為 MB 中的值。不再建議使用。請改用 mapreduce.map.resource.memory-mb 。預設為 1024。 |
mapreduce.map.resource.memory |
將所有 Map 任務容器所要求的記憶體設定為 MB 中的值。不再建議使用。請改用 mapreduce.map.resource.memory-mb 。預設為 1024。 |
mapreduce.map.resource.memory-mb |
將所有 Map 任務容器所要求的記憶體設定為 MB 中的值。預設為 1024。 |
mapreduce.map.cpu.vcores |
將所有 Map 任務容器所要求的 CPU 設定為該值。不再建議使用。請改用 mapreduce.map.resource.vcores 。預設為 1。 |
mapreduce.map.resource.vcores |
將所有 map 工作容器要求的 CPU 設定為該值。預設為 1。 |
mapreduce.map.resource.<resource> |
將所有 map 工作容器要求的 <resource> 數量設定為該值。如果未指定單位,則假設資源的預設單位。請參閱上述的單位區段。 |
mapreduce.reduce.memory.mb |
將所有 reduce 工作容器要求的記憶體設定為 MB 中的值。不再建議使用。請改用 mapreduce.reduce.resource.memory-mb 。預設為 1024。 |
mapreduce.reduce.resource.memory |
將所有 reduce 工作容器要求的記憶體設定為 MB 中的值。不再建議使用。請改用 mapreduce.reduce.resource.memory-mb 。預設為 1024。 |
mapreduce.reduce.resource.memory-mb |
將所有 reduce 工作容器要求的記憶體設定為 MB 中的值。預設為 1024。 |
mapreduce.reduce.cpu.vcores |
將所有 reduce 工作容器要求的 CPU 設定為該值。不再建議使用。請改用 mapreduce.reduce.resource.vcores 。預設為 1。 |
mapreduce.reduce.resource.vcores |
將所有 reduce 工作容器要求的 CPU 設定為該值。預設為 1。 |
mapreduce.reduce.resource.<resource> |
將所有 reduce 工作容器要求的 <resource> 數量設定為該值。如果未指定單位,則假設資源的預設單位。請參閱上述的單位區段。 |
請注意,這些資源要求可能會由 YARN 修改,以符合已設定的最小和最大資源值,或成為已設定增量的倍數。請參閱 YARN 排程器設定中的 yarn.scheduler.maximum-allocation-mb
、yarn.scheduler.minimum-allocation-mb
、yarn.scheduler.increment-allocation-mb
、yarn.scheduler.maximum-allocation-vcores
、yarn.scheduler.minimum-allocation-vcores
和 yarn.scheduler.increment-allocation-vcores
屬性。
資源設定檔提供使用者一種簡單的方法,可以使用單一設定檔要求一組資源,並提供管理員一種方法來規範資源的消耗方式。
若要設定資源類型,管理員必須在資源管理器的 yarn-site.xml
檔案中將 yarn.resourcemanager.resource-profiles.enabled
設定為 true
。此檔案定義支援的設定檔。例如
{ "small": { "memory-mb" : 1024, "vcores" : 1 }, "default" : { "memory-mb" : 2048, "vcores" : 2 }, "large" : { "memory-mb": 4096, "vcores" : 4 }, "compute" : { "memory-mb" : 2048, "vcores" : 2, "gpu" : 1 } }
在此範例中,使用者可以存取四個具有不同資源設定的設定檔。請注意,在 compute
設定檔中,管理員已設定如上所述的額外資源。
分散式殼層目前是唯一支援資源設定檔的用戶端。使用分散式殼層時,使用者可以指定資源設定檔名稱,該名稱將自動轉換為適當的資源要求集。
例如
hadoop job $DISTSHELL -jar $DISTSHELL -shell_command run.sh -container_resource_profile small