在Hadoop2.0中, YARN負責管理MapReduce中的資源(內存, CPU等)并且將其打包成Container. 這樣可以精簡MapReduce, 使之專注于其擅長的數據處理任務, 將無需考慮資源調度. 如下圖所示 YARN會管理集群中所有機器的可用計算資源. 基于這些資源YARN會調度應用(比如
在Hadoop2.0中, YARN負責管理MapReduce中的資源(內存, CPU等)并且將其打包成Container. 這樣可以精簡MapReduce, 使之專注于其擅長的數據處理任務, 將無需考慮資源調度. 如下圖所示

YARN會管理集群中所有機器的可用計算資源. 基于這些資源YARN會調度應用(比如MapReduce)發來的資源請求, 然后YARN會通過分配Container來給每個應用提供處理能力, Container是YARN中處理能力的基本單元, 是對內存, CPU等的封裝.
本文中假設集群中每個節點的配置為48G內存, 12個硬盤, 2個hex core CPU(12 核).
1. 配置YARN
在Hadoop集群中, 平衡內存, CPU等的使用很重要, 這樣才能避免整個集群的計算能力不會因為某種資源而受限. 根據Hortonworks的推薦, 每個硬盤和核1-2個Container能夠達到最好的集群使用平衡. 如果集群的每個節點有12個硬盤和12個核, 那么每個節點上最好最多20個Container.
因為每個節點有48G內存, 我們為操作系統保留部分內存, 所以分配40G內存給YARN, 8G留給操作系統. 下面配置的是每個節點上YARN可以使用的最大內存.
在yarn-site.xml中
yarn.nodemanager.resource.memory-mb
40960
然后需要配置如何把這些資源分配給Container, 可以配置分配給Container的最小內存, 因為我們允許每個節點最多20個Container, 所以每個Container的內存為40G / 20 = 2G
在yarn-site.xml中
yarn.scheduler.minimum-allocation-mb
2048
2. ?配置MapReduce2
MapReduce2構建在YARN的基礎之上, 使用YARN的Container來調度和運行其map和reduce任務.
在配置YARN上的MapReduce資源使用時, 需要考慮:
- 每個Map和Reduce任務的物理內存限制
- 每個任務的JVM堆棧大小
- 每個任務的虛擬內存
可以設置每個map和reduce任務的最大內存, 該值應該大于等于Container的最小內存. 比如前面我們設置每個Container的最小內存(yarn.scheduler.minimum-allocation-mb)為2GB, 所以我們可以設置map任務的內存為4GB, reduce任務的內存為8GB:
在mapred-site.xml中
mapreduce.map.memory.mb
4096
mapreduce.reduce.memory.mb
8192
每個Container會為每個map和reduce任務運行一個JVM, JVM的堆棧大小應該小于map和reduce的內存大小:
在mapred-site.xml中
mapreduce.map.java.opts
-Xmx3072m
mapreduce.reduce.java.opts
-Xmx6144m
前面設置的是map和reduce任務可以使用的物理內存, 而虛擬內存(物理內存+paged memory)的上限是由每個Container的虛擬內存比例決定的, 默認值為2.1:
在yarn-site.xml中:
yarn.nodemanager.vmem-pmem-ratio
2.1
根據之前的所有設置, 每個map任務的內存分配為
物理內存 = 4GB
map任務的Container的JVM堆棧 = 3GB
虛擬內存大小 = 4 * 2.1 = 8.4GB
在YARN和MapReduce2中, 除此之外沒有其他的map和reduce任務的資源預配置. 整個集群可以根據作業的需要動態的分配map和reduce, 比如在本例中, YARN會配置最多10(40/4)個mapper或者5(40/8)個reducer, 或者是其他合適的組合.
參考文獻:
[1].?How to Plan and Configure YARN and MapReduce 2 in HDP 2.0
原文地址:配置Hadoop2.0的內存資源, 感謝原作者分享。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com