2012-11-09 94 views

回答

11

我想內存消耗將取決於您的HDFS設置,因此取決於HDFS的整體大小,並且與塊大小有關。 來自Hadoop NameNode wiki

使用一個很好的RAM服務器。您擁有的RAM越多,文件系統越大,或者塊大小越小。

https://twiki.opensciencegrid.org/bin/view/Documentation/HadoopUnderstanding

的Namenode:Hadoop的的核心元數據服務器。這是系統中最關鍵的部分,只能有其中之一。這將同時存儲文件系統映像和文件系統日誌。 namenode保留所有的文件系統佈局信息(文件,塊,目錄,權限等)和塊位置。文件系統佈局保存在磁盤上,塊位置只保存在內存中。當客戶端打開一個文件時,namenode告訴客戶端文件中所有塊的位置;那麼客戶端不再需要與namenode進行數據傳輸通信。

同一站點建議如下:

的Namenode:建議的RAM至少8GB(最小是2GB RAM),優選16GB以上。一個粗略的經驗法則是每100TB的原始磁盤空間1GB;實際需求約爲每百萬個對象1GB(文件,目錄和塊)。 CPU要求是任何現代多核服務器CPU。通常,namenode只會使用你的CPU的2-5%。由於這是單點故障,最重要的要求是可靠的硬件而不是高性能的硬件。我們建議使用冗餘電源和至少2個硬盤驅動器的節點。

內存使用的更詳細的分析,檢查此鏈接了: https://issues.apache.org/jira/browse/HADOOP-1687

您也可能會發現這個問題有意思:Hadoop namenode memory usage

6

有一些技術限制到的NameNode(NN) ,並面臨任何一個將限制你的可擴展性。

  1. 記憶。 NN每塊消耗大約150個字節。從這裏你可以計算出你的數據需要多少內存。有很好的討論:Namenode file quantity limit
  2. IO。對於文件系統的每次更改(如創建,刪除塊等),NN都會執行1 IO操作。所以你的本地IO應該足夠了。估計你需要多少是很難的。考慮到我們的內存塊數量有限,除非您的羣集非常大,否則您不會聲明此限制。如果是 - 考慮SSD。
  3. CPU。 Namenode有相當多的負載跟蹤所有數據節點上所有塊的健康狀況。每個datanode每隔一段時間報告其所有塊的狀態。同樣,除非集羣不太大,否則不應該成爲問題。
0

實施例計算 200節點集羣 24TB /節點 128MB塊大小 複製因子= 3

多少空間需要被?

塊= 200 * 24 * 2^20 /(128 * 3)

〜1200萬塊 〜12000 MB存儲器。

0

我想我們應該區分每個namenode對象如何使用namenode內存和調整namenode堆的一般建議。

對於第一種情況(消費)AFAIK,每個namenode對象都包含平均150字節的內存。 Namenode對象是文件,塊(不包括複製副本)和目錄。因此,對於一個佔用3個塊的文件,這是4(1個文件和3個塊)x150個字節= 600個字節。

對於名稱節點的建議堆大小的第二種情況,通常建議您保留1GB /百萬個塊。如果你計算這個值(每塊150字節),你會得到150MB的內存消耗。你可以看到這個數字遠低於每百萬塊1GB,但你也應該考慮到文件大小,目錄的數量。

我想這是一個安全的建議。檢查以下兩個鏈接的更廣泛的討論和示例:

Sizing NameNode Heap Memory - Cloudera

Configuring NameNode Heap Size - Hortonworks

Namenode Memory Structure Internals