hadoop內存大小設置問題【轉】


前面博客里面提到,運行一次Hadoop的時候出現Java heap error。字面意思分配堆的時候出現錯誤,我們知道應用程序的動態內存的分配均在堆里面。這里提示堆錯誤,那必然是內存不夠用了。那么這個namenode內存的大小該怎么取值呢?

namenode管理着集群里面所有文件的信息。簡單根據文件信息給出一個准確計算內存大小的公式是不現實的。

hadoop默認namenode內存的大小為1000M,這個值對於數百萬的文件來說是足夠的,可以保守地設置每百萬數據塊需要1000MB內存。

例如,有這樣一個場景,一個含有200個節點的集群,每個節點有一個24TB的磁盤,hadoop的block的大小為128MB,有三份拷貝總共需要塊的數目大概在200萬或者更多,那么內存大致需要多少?

首先計算可以有多少塊:

(200*24000000MB)/(128MB*3)=12500,000。

然后保守估計需要多少內存:

12500,000*1000MB/1000,000=12,500MB

從上面的計算結果看出,將namenode內存的大小設置為12,000MB這個數量級別可以滿足。

 

計算大致的值之后,怎么設置呢?

hadoop配置文件,hadoop-env.sh中有個選項HADOOP_NAMENODE_OPTS,此JVM選項是用來設置內存大小的。比如:

 

[plain]  view plain  copy
 
  1. HADOOP_NAMENODE_OPTS=-Xmx2000m  

那么就是給namenode分配了2000MB的空間。

 

如果改變了namenode的內存大小,那么secondarynamenode的內存的大小同樣也要改變,其選項是HADOOP_SECONDARYNAMENODE_OPTS。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM