2012-11-09 24 views

risposta

11

Suppongo che il consumo di memoria dipenda dalla configurazione HDFS, quindi dipende dalla dimensione complessiva dell'HDFS e dipende dalla dimensione del blocco. da Hadoop NameNode wiki:

Utilizzare un buon server con molta RAM. Più RAM hai, più grande è il file system, o più piccola è la dimensione del blocco.

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

NameNode: Il server di metadati nucleo di Hadoop. Questo è il pezzo più importante del sistema e può esserci solo uno di questi. Questo memorizza sia l'immagine del file system che il journal del file system. Il namenode conserva tutte le informazioni di layout del file system (file, blocchi, directory, autorizzazioni, ecc.) E le posizioni dei blocchi. Il layout del filesystem è persistente su disco e le posizioni dei blocchi vengono mantenute esclusivamente in memoria. Quando un client apre un file, il namenode indica al client le posizioni di tutti i blocchi nel file; il cliente quindi non ha più bisogno di comunicare con il namenode per il trasferimento dei dati.

stesso sito raccomanda quanto segue:

NameNode: Si consiglia almeno 8 GB di RAM (minima è 2GB RAM), preferibilmente 16 GB o più. Una regola empirica è di 1 GB per 100 TB di spazio su disco grezzo; i requisiti effettivi sono circa 1 GB per milione di oggetti (file, directory e blocchi). I requisiti della CPU sono tutte le moderne CPU del server multi-core. In genere, il namenode utilizzerà solo il 2-5% della CPU. Poiché si tratta di un singolo punto di errore, il requisito più importante è l'hardware affidabile piuttosto che l'hardware ad alte prestazioni. Suggeriamo un nodo con alimentatori ridondanti e almeno 2 dischi rigidi.

Per un'analisi più dettagliata di utilizzo della memoria, controllare questo link out: https://issues.apache.org/jira/browse/HADOOP-1687

Si potrebbe anche trovare questa domanda interessante: Hadoop namenode memory usage

6

Ci sono diversi limiti tecnici al NameNode (NN) , e di fronte a nessuno di essi limiterà la tua scalabilità.

  1. Memoria. NN consuma circa 150 byte per ogni blocco. Da qui puoi calcolare la quantità di RAM necessaria per i tuoi dati. C'è una buona discussione: Namenode file quantity limit.
  2. IO. NN sta facendo 1 IO per ogni modifica al filesystem (come creare, eliminare il blocco ecc.). Quindi il tuo IO locale dovrebbe consentire abbastanza. È più difficile stimare quanto è necessario. Tenendo conto del fatto che siamo limitati nel numero di blocchi dalla memoria, non rivendicherai questo limite a meno che il tuo cluster non sia molto grande. Se lo è, considera SSD.
  3. CPU. Il Namenode ha un considerevole carico che tiene traccia dello stato di salute di tutti i blocchi su tutti i datanode. Ogni datanode una volta un periodo di tempo riporta lo stato di tutto il suo blocco. Di nuovo, a meno che il cluster non sia troppo grande, non dovrebbe essere un problema.
0

calcolo Esempio 200 di cluster nodo 24 TB/nodo 128MB dimensione del blocco fattore replica = 3

Quanto spazio è richiesto?

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

~ 12 milioni blocchi ~ 12.000 MB di memoria.

0

Suppongo che dovremmo fare la distinzione tra come la memoria del namenode viene consumata da ciascun oggetto namenode e le raccomandazioni generali per dimensionare l'heap del namenode.

Per il primo caso (consumo), AFAIK, ciascun oggetto namenode contiene una memoria media di 150 byte. Gli oggetti Namenode sono file, blocchi (senza contare le copie replicate) e directory. Quindi per un file che occupa 3 blocchi questo è 4 (1 file e 3 blocchi) x150 byte = 600 byte.

Per il secondo caso di dimensione heap consigliata per un namenode, si consiglia in genere di riservare 1 GB per 1 milione di blocchi. Se si calcola questo (150 byte per blocco) si ottengono 150 MB di consumo di memoria. Puoi vedere che questo è molto meno di 1 GB per 1 milione di blocchi, ma dovresti anche prendere in considerazione il numero di dimensioni dei file, le directory.

Immagino che sia un consiglio sicuro. Controllare i seguenti due link per una discussione più generale ed esempi:

Sizing NameNode Heap Memory - Cloudera

Configuring NameNode Heap Size - Hortonworks

Namenode Memory Structure Internals

Problemi correlati