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 GB 1 GB 1 GB
8 GB 2 GB 1 GB
16 GB 2 GB 2 GB
24 GB 4 GB 4 GB
48 GB 6 GB 8 GB
64 GB 8 GB 8 GB
72 GB 8 GB 8 GB
96 GB 12 GB 16 GB
128 GB 24 GB 24 GB
256 GB 32 GB 32 GB
512 GB 64 GB 64 GB


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


每個節點的總內存 建議的最低Container的大小
小於 4 GB 256 MB
4 GB 到 8 GB 512 MB
8 GB 到 24 GB 1024 MB
24 GB 以上 2048 MB


最後計算的每個Container的內存大小是:


每個Container的內存大小 = max(最小Container內存大小, (總可用內存) /Container數))


根據計算,YARN 和 MapReduce 配置如下:
配置文件 配置項 設置值
yarn-site.xml yarn.nodemanager.resource.memory-mb = Container數量 * 每個Container的內存大小
yarn-site.xml yarn.scheduler.minimum-allocation-mb = 每個Container的內存大小
yarn-site.xml yarn.scheduler.maximum-allocation-mb = Container數量 * 每個Container的內存大小
mapred-site.xml mapreduce.map.memory.mb = 每個Container的內存大小
mapred-site.xml mapreduce.reduce.memory.mb = 2 * 每個Container的內存大小
mapred-site.xml mapreduce.map.java.opts = 0.8 * 每個Container的內存大小
mapred-site.xml mapreduce.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


Configuration Value 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章