原文:Untangling Apache Hadoop YARN, Part 2: Global Configuration Basics
http://blog.cloudera.com/blog/2015/10/untangling-apache-hadoop-yarn-part-2/
在本系列的第1部分,我們介紹了YARN集群的基本原理。在第2部分中,您將瞭解在集群上運行的其他組件以及它們如何影響YARN集群配置。
理想的YARN資源分配
上一篇文章所說,YARN集群可以配置為使用集群上的所有資源。
實際的YARN資源分配
在實際情況中,有兩個原因不能讓YARN使用全部資源:
1.非Apache Hadoop服務也需要在節點上運行(日常開銷)。
2.其他與Hadoop相關的組件需要專用資源,不能與YARN共享(如運行CDH時)。
操作系統(日常開銷)
任何節點需要一個操作系統才能工作。運行任何操作系統都需要預留一些資源。最常見的Hadoop操作系統是Linux。
Cloudera Manager Agents (管理)
Cloudera Manager是Cloudera的CDH集群管理工具。 Cloudera Manager Agent是在每個工作節點上運行的程序,用於跟蹤其運行狀況並處理其他管理任務(如配置部署)。
HDFS 集群 (必須) (Master/NameNode, Worker/DataNode)
這篇文章有意地省略了HDFS的任何討論,HDFS是一個必需的Hadoop組件。對於我們講述的內容而言,記住以下兩點:
- Master節點守護程序稱為NameNode
- Worker節點守護程序稱為DataNode
對於Hadoop安裝,Cloudera建議HDFS DataNode和YARN NodeManager在集群中的同一組Worker節點上運行。 DataNode需要預留一些基本資源用於正確的操作。這可以在下面的Figure 1中看到。
HBase 集群需求 (CDH)
如果集群配置為使用Apache HBase,則應為RegionServer預留每個工作節點上的資源。預留的內存量儘可能大。
Impala 集群需求 (CDH)
如果集群配置為使用Impala,則應為Impala後臺守護進程留出每個工作節點上的資源。預留的內存量儘可能大。
YARN NodeManagers (必須)
NodeManager還需要預留一些資源以便正常操作。
分配剩餘的資源給YARN
一旦將資源分配給上述各種組件,剩餘的可以分配給YARN。 (注意:本文沒有具體的建議,因為一個節點的硬件規格隨著時間的推移而持續改進,具體數字的例子請參考這個調優指南 http://tiny.cloudera.com/yarn-tuning-guide;還可以參考Tuning the Cluster for MapReduce v2 (YARN) http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/cdh_ig_yarn_tuning.html
應用配置
計算最終配置後,可以在yarn-site.xml或Cloudera Manager的YARN Configuration部分中輸入。一旦這些屬性配置到集群中,您可以驗證它們。
在RM UI中驗證YARN配置
如前所述,在ResourceManager有YARN集群上可用資源的快照。
示例:假設您在50個Worker節點上具有以下配置:
1.yarn.nodemanager.resource.memory-mb = 90000
2.yarn.nodemanager.resource.vcores = 60
計算下來你群集的總資源是:
1.memory: 5090GB=4500GB=4.5TB
2.vcores: 5060 vcores= 3000 vcores
在ResourceManager Web UI頁面上,集群指標表顯示集群的總內存和總vcores,如下圖所示:
容器配置
此時,YARN集群根據資源正確設置。 YARN使用這些資源進行分配,並對集群實施限制。
- YARN 容器內存限制
最小: yarn.scheduler.minimum-allocation-mb
最大: yarn.scheduler.maximum-allocation-mb
- YARN 容器VCore 限制
最小: yarn.scheduler.minimum-allocation-vcores
最大: yarn.scheduler.maximum-allocation-vcores
- YARN 容器分配大小增加值
內存提升: yarn.scheduler.increment-allocation-mb
VCore 提升: yarn.scheduler.increment-allocation-vcores
Container限制及建議值:
- Memory 屬性:
yarn.scheduler.minimum-allocation-mb最低值為0
任何內存大小調整屬性必須小於或等於yarn.nodemanager.resource.memory-mb
最大值必須大於或等於最小值。
- VCore 屬性:
yarn.scheduler.minimum-allocation-vcores最低值為0
任何vcore大小調整屬性必須小於或等於yarn.nodemanager.resource.vcores
最大值必須大於或等於最小值
對yarn.scheduler.increment-allocation-vcores的建議值為1。較高的值可能比較浪費。
注意,在YARN配置中有一些非常易犯的錯誤。如果容器內存請求最小值(yarn.scheduler.minimum-allocation-mb)大於每個節點(yarn.nodemanager.resource.memory-mb)可用的內存,那麼YARN將不可能滿足該請求。類似參數有yarn.scheduler.minimum-allocation-vcores。
MapReduce 配置
Map任務內存屬性為mapreduce.map.memory.mb。 Reduce任務的內存屬性是mapreduce.reduce.memory.mb。由於這兩種類型的任務必須適合容器,所以該值應小於容器最大大小。 (我們不會詳細介紹Java和影響啟動Java虛擬機的YARN屬性,它們可能會在以後的文章中討論)。
ApplicationMaster內存配置
屬性yarn.app.mapreduce.am.resource.mb用於設置ApplicationMaster的內存大小。由於ApplicationMaster必須適合容器,該屬性應小於容器最大值
總結
本文主要內容:
1.瞭解YARN專用群集情況下的基本群集配置。
2.實際在開始配置YARN群集時,要考慮到其它服務,防止將所有資源分配給YARN,考慮以下配置:
操作系統開銷(Linux,Windows)
管理服務,例如Cloudera Manager Agent
必要的服務,如HDFS
Master/Worker服務(HBase,Impala)
剩餘資源給YARN。
3.知道在哪裡查看集群的配置。
4.瞭解需要進一步調整基於在群集上運行的應用程序的分析。還有請注意可能有其他配置開銷沒有列在此帖中。
下一步
第三部分我們將介紹YARN的基本調度。
閱讀更多 陳序猿9527 的文章