Hadoop:YARN 資源組態

概觀

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 其他資源的逗號分隔清單。不得包含 memorymemory-mbvcores
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.xmlnode-resources.xml 檔案,它們也需要與 yarn-site.xml 放置在同一個組態目錄中。或者,也可以將這些屬性放置在 yarn-site.xml 檔案中。

YARN 資源模型

資源管理員

資源管理員是叢集中追蹤資源的最終仲裁者。資源管理員從 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>

有效的資源名稱必須以字母開頭,且只能包含字母、數字和下列任一字元:『。』、『_』或『-』。有效的資源名稱也可以選擇在名稱空間前面加上斜線。有效的名稱空間包含以句點分隔的字母、數字和破折號群組。例如,下列是有效的資源名稱

  • myresource
  • my_resource
  • My-Resource01
  • com.acme/myresource

下列是無效資源名稱的範例

  • 10myresource
  • my resource
  • com/acme/myresource
  • $NS/myresource
  • -none-/myresource

對於定義的每種新資源類型,都可以新增一個選用的單位屬性,以設定資源類型的預設單位。有效值為

單位名稱 意義
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-allocationyarn.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 檔案或名為 node­resources.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 一起使用資源

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-mbyarn.scheduler.minimum-allocation-mbyarn.scheduler.increment-allocation-mbyarn.scheduler.maximum-allocation-vcoresyarn.scheduler.minimum-allocation-vcoresyarn.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