1. 程式人生 > >Yarn Container計算和MapReduce的記憶體配置

Yarn Container計算和MapReduce的記憶體配置

在Hadoop2.0中, YARN負責管理MapReduce中的資源(記憶體, CPU等)並且將其打包成Container. 這樣可以精簡MapReduce, 使之專注於其擅長的資料處理任務, 將無需考慮資源排程. YARN會管理叢集中所有機器的可用計算資源. 基於這些資源YARN會排程應用(比如MapReduce)發來的資源請求, 然後YARN會通過分配Container來給每個應用提供處理能力, Container是YARN中處理能力的基本單元, 是對記憶體, CPU等的封裝.


在Hadoop叢集中,平衡記憶體(RAM)、處理器(CPU核心)和磁碟的使用是至關重要的,合理規劃以免某一項引起瓶頸制約。一般的建議是,一塊磁碟和一個CPU核心上配置兩個Container會達到叢集利用率的最佳平衡。




從可用的硬體資源角度看,要調整群集每個節點Yarn和MapReduce的記憶體配置到合適的資料,應注意以下幾個重要的元素:
RAM (總記憶體大小)
CORES (CPU核心數)
DISKS (磁碟數)






Yarn和MapReduce的總的可用記憶體應考慮到保留的記憶體。保留的記憶體是由系統程序和其他Hadoop程序(如Hbase)所需要的記憶體。
保留記憶體=保留系統記憶體+保留HBase記憶體(如果HBase是在同一個節點)
使用下表確定每個節點的保留的記憶體:


建議保留的記憶體


每個節點的記憶體總量建議保留系統記憶體建議保留HBase的記憶體
4 GB1 GB1 GB
8 GB2 GB1 GB
16 GB2 GB2 GB
24 GB4 GB4 GB
48 GB6 GB8 GB
64 GB8 GB8 GB
72 GB8 GB8 GB
96 GB12 GB16 GB
128 GB24 GB24 GB
256 GB32 GB32 GB
512 GB64 GB64 GB


下面的計算是確定每個節點的Container允許的最大數量。
#Container數量=min (2*CORES, 1.8*DISKS, (可用記憶體)/最低Container的大小)
最低Container的大小 這個值是依賴於可用的RAM數量——在較小的儲存節點,最小的Container的大小也應較小。下面的表列出了推薦值:


每個節點的總記憶體建議的最低Container的大小
小於 4 GB256 MB
4 GB 到 8 GB512 MB
8 GB 到 24 GB1024 MB
24 GB 以上2048 MB


最後計算的每個Container的記憶體大小是:


每個Container的記憶體大小 = max(最小Container記憶體大小, (總可用記憶體) /Container數))


根據計算,YARN 和 MapReduce 配置如下:
配置檔案配置項設定值
yarn-site.xmlyarn.nodemanager.resource.memory-mb= Container數量 * 每個Container的記憶體大小
yarn-site.xmlyarn.scheduler.minimum-allocation-mb= 每個Container的記憶體大小
yarn-site.xmlyarn.scheduler.maximum-allocation-mb= Container數量 * 每個Container的記憶體大小
mapred-site.xmlmapreduce.map.memory.mb= 每個Container的記憶體大小
mapred-site.xmlmapreduce.reduce.memory.mb= 2 * 每個Container的記憶體大小
mapred-site.xmlmapreduce.map.java.opts= 0.8 * 每個Container的記憶體大小
mapred-site.xmlmapreduce.reduce.java.opts= 0.8 * 2 * 每個Container的記憶體大小
yarn-site.xml (check)yarn.app.mapreduce.am.resource.mb= 2 * 每個Container的記憶體大小
yarn-site.xml (check)yarn.app.mapreduce.am.command-opts= 0.8 * 2 * 每個Container的記憶體大小




提醒: 安裝完成後, yarn-site.xml 和 mapred-site.xml 的配置檔案在安裝目錄的 /etc/hadoop/資料夾下.


例如:
叢集的節點有 12 CPU cores, 48 GB RAM, and 12 磁碟.
預留記憶體= 6 GB 系統預留 + 8 GB HBase預留
最小Container記憶體大小 = 2 GB


如果不安裝 HBase:
#Container數 = min (2*12, 1.8* 12, (48-6)/2) = min (24, 21.6, 21) = 21
每個Container的記憶體大小 = max (2, (48-6)/21) = max (2, 2) = 2


ConfigurationValue Calculation
yarn.nodemanager.resource.memory-mb= 21 * 2 = 42*1024 MB
yarn.scheduler.minimum-allocation-mb= 2*1024 MB
yarn.scheduler.maximum-allocation-mb= 21 * 2 = 42*1024 MB
mapreduce.map.memory.mb= 2*1024 MB
mapreduce.reduce.memory.mb= 2 * 2 = 4*1024 MB
mapreduce.map.java.opts= 0.8 * 2 = 1.6*1024 MB
mapreduce.reduce.java.opts= 0.8 * 2 * 2 = 3.2*1024 MB
yarn.app.mapreduce.am.resource.mb= 2 * 2 = 4*1024 MB
yarn.app.mapreduce.am.command-opts= 0.8 * 2 * 2 = 3.2*1024 MB


如果安裝 Hbase:
#Container數 = min (2*12, 1.8* 12, (48-6-8)/2) = min (24, 21.6, 17) = 17
每個Container的記憶體大小 = max (2, (48-6-8)/17) = max (2, 2) = 2


配置項配置大小
yarn.nodemanager.resource.memory-mb= 17 * 2 = 34*1024 MB
yarn.scheduler.minimum-allocation-mb= 2*1024 MB
yarn.scheduler.maximum-allocation-mb= 17 * 2 = 34*1024 MB
mapreduce.map.memory.mb= 2*1024 MB
mapreduce.reduce.memory.mb= 2 * 2 = 4*1024 MB
mapreduce.map.java.opts= 0.8 * 2 = 1.6*1024 MB
mapreduce.reduce.java.opts= 0.8 * 2 * 2 = 3.2*1024 MB
yarn.app.mapreduce.am.resource.mb= 2 * 2 = 4*1024 MB
yarn.app.mapreduce.am.command-opts= 0.8 * 2 * 2 = 3.2*1024 MB