天天看點

YARN和MapReduce的記憶體設定參考

如何确定Yarn中容器Container,Mapreduce相關參數的記憶體設定,對于初始叢集,由于不知道叢集的類型(如cpu密集、記憶體密集)我們需要根據經驗提供給我們一個參考配置值,來作為基礎的配置。

完成這一任務有兩種方式,确定YARN和MapReduce的記憶體設定,我們可以使用HDP工具腳本進行記憶體配置設定

python hdp-configuration-utils.py options

其中可選項如下:

選項

描述

-c CORES

每一個客戶機的核數目

-m MEMORY

每一個客戶機擁有的記憶體總數

-d DISK

每一個客戶機擁有的磁盤數目

-k HBASE

如果Hbase安裝了為”True”,否則為”False”

注:需要python26的運作環境

我們可以使用-h或-help來顯示描述選項的幫助資訊。

例子

運作下面的指令

python hdp-configuration-utils.py -c 16 -m 64 -d 4 -k True

結果如下:

YARN和MapReduce的記憶體設定參考

手動計算YARN和MapReduce記憶體配置設定

接下來我們将描述如何基于特定的硬體,手工的設定YARN和MapReduce記憶體。

YARN可以考慮叢集中所有節點的可用的計算機資源。基于可用的資源,YARN會溝通協調應用程式(如:mapReduce)需要的資源。YARN會為每一個應用提供相應的容器Container。容器Container是YARN的基本處理單元,是記憶體和CPU資源的一種封裝。

在Hadoop叢集中,平衡記憶體RAM、處理器cpu和磁盤的使用是非常重要的。作為一般的推薦,為每個磁盤和每個核配置設定兩個容器,為叢集的使用率提供了最好的平衡。

當為一個叢集決定合适的YARN和MapReduce記憶體設定時,從可用的硬體資源開始,注意每個節點的以下值:

RAM(記憶體的數量)

CORES(CPU的核數)

DISKS(磁盤的數目)

整個針對YARN和MapReduce可用的RAM數,應該考慮預留的記憶體。預留的記憶體主要用于系統程序占用和其它Hadoop程序(如Hbase)。

預留的記憶體=保留棧記憶體+Hbase預留記憶體(如果Hbase是部署在同一台機器上)

我們通常會使用下表來決定預留記憶體的大小

每個節點的總記憶體

推薦系統保留的記憶體

推薦為hbase保留的記憶體

4GB

1GB

8GB

2GB

16GB

24GB

48GB

6GB

64GB

72GB

96GB

12GB

128GB

256GB

32GB

512GB

接下來我們計算決定每個節點允許的最大容器的數目,我們可以使用下列公式:

containers = min (2*CORES, 1.8*DISKS, (Total available RAM) /MIN_CONTAINER_SIZE)

其中DISKS是參數每台機器中dfs.data.dirs參數的數目值。MIN_CONTAINER_SIZE是最小的容器大小(RAM)。這個值是依賴于RAM的可用數目——小的記憶體節點,最小的容器大小應該更小。

容器推薦值

推薦的最小容器大小

小于4GB

256MB

在4GB和8GB之間

512MB

在8GB和24GB

1024MB

大于24GB

20148MB

最終的計算結果決定了每個容器的RAM的數目。

RAM-per-container = max(MIN_CONTAINER_SIZE, (Total Available RAM) / containers))

因為這些計算,YARN和MapReduce設定如下

配置檔案

配置設定

計算值

Yarn-site.xml

yarn.nodemanager.resource.memorymb

=containers*RAM-per-container

yarn.scheduler.minimum-allocationmb

= RAM-per-container

yarn-site.xml

yarn.scheduler.maximum-allocationmb

mapred-site.xml

mapreduce.map.memory.mb

mapreduce.reduce.memory.mb

= 2 * RAM-per-container

mapreduce.map.java.opts

= 0.8 * RAM-per-container

mapreduce.reduce.java.opts

= 0.8 * 2 * RAM-per-container

yarn.app.mapreduce.am.resource.mb

yarn.app.mapreduce.am.commandopts

注:在安裝好後,yarn-site.xml and mapred-site.xml位于檔案夾/etc/Hadoop/conf目錄

舉例說明:

叢集節點擁有12個CPU核,48GB記憶體和12塊磁盤

保留記憶體(Reserved Memory)=6GB系統預留記憶體+(如果有Hbase)8GB的Hbase記憶體

最小的容器大小(Min container size)=2GB

含有的容器數(containers)=min(2*12,1.8*12,(48-6)/2)=min(24,21.6,21)=21

每個容器的RAM(RAM-per-container)=max(2,(48-6)/21)=max(2,2)=2

根據上述例子計算出來的值

配置

yarn.nodemanager.resource.memory-mb

= 21 * 2 = 42*1024 MB

yarn.scheduler.minimum-allocation-mb

= 2*1024 MB

yarn.scheduler.maximum-allocation-mb

= 2 * 2 = 4*1024 MB

= 0.8 * 2 = 1.6*1024 MB

yarn.app.mapreduce.am.command-opts

= 0.8 * 2 * 2 = 3.2*1024 MB

如果部署了HBase

容器數目(containers)=min(2*12,1.8*12,(48-6-8)/2)=min(24,21.6,17)=17

每個容器的RAM(RAM-per-container)=max(2,(48-6-8)/17)=max(2,2)=2

 根據此時的值計算出來的值

=17*2=34*1024MB

= 17 * 2 = 34*1024 MB

備注:

1.更新屬性值yarn.scheduler.minimum-allocation-mb要同時更新

導緻每個節點容器數目的改變。

2.如果你安裝擁有很大數目的記憶體,而缺少磁盤和CPU核,你可以将記憶體釋放給其它的任務,降低參數yarn.scheduler.minimum-allocation-mb

 andyarn.nodemanager.resource.memory-mb的值

3.目前在YARN上運作MapReduce時。我們不在會去設定靜态的Map和Reduce任務。整個叢集将根據Job的需要動态的配置設定Map和Reduce任務。在我們的叢集中,YARN可以在每個節點上配置設定10個Map和5個Reduce。

設定NameNode的對記憶體大小

NameNode的堆大小受很多的因數影響如檔案的數目,塊的數目和系統的負載。下面的表格提供了NameNode對大小的設定。這些設定經常用于典型的Hadoop叢集,其中塊的數目和檔案的數目十分接近(一般而言,系統中平均每個檔案的塊數比例大概在1.1到1.2),總的來說将NameNode的堆記憶體設定的越大越好。

檔案的數目(百萬)

整個java的堆(Xmx和Xms)

年輕代大小

(-XX:NewSize-XX:MaxNewSize)

<1 million files

1024m

128m

1-5million files

3072m

512m

5-10

5376m

768m

10-20

9984m

1280m

20-30

14848m

2048m

30-40

19456m

2560m

40-50

24320m

50-70

33536m

4352m

70-100

47872m

6144m

100-125

71424m

8960m

150-200

94976m

我們應該設定-XX:PermSize為128m –XX:maxPermSize為256m

下面是對Hadoop_NameNode_Opts參數的推薦設定,在配置檔案hadoop-env.sh中(将下面的####替換成-XX:NewSize,-XX:MaxNewSize,-Xms,和-Xmx可以用上上面表中推薦的值)

YARN和MapReduce的記憶體設定參考

-XX:+HeapDumpOnOutOfMemoryError這個參數指明了當記憶體錯誤出現時,堆的dump操作将會被執行。你也可以使用-XX:HeapDumpPath來指定heap dump檔案的位置,如:另外一個有用的HADOOP_NAMENODE_OPTS參數是

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./etc/heapdump.hprof

參考:http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.1.1/bk_installing_manually_book/content/rpm-chap1-11.html

           http://blog.csdn.net/suifeng3051/article/details/45477773