hadoop的namenode的内存消耗?

时间:2012-11-09 09:03:37

标签: hadoop memory-consumption

任何人都可以详细分析namenode的内存消耗吗?还是有一些参考资料?在网络中找不到资料。谢谢!

4 个答案:

答案 0 :(得分:13)

我认为内存消耗取决于您的HDFS设置,因此取决于HDFS的整体大小,并且与块大小有关。 来自Hadoop NameNode wiki

  

使用具有大量RAM的好服务器。您拥有的RAM越多,文件系统就越大,或者块大小越小。

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

  

Namenode:Hadoop的核心元数据服务器。这是系统中最关键的部分,只能有其中之一。这将存储文件系统映像和文件系统日志。 namenode保留所有文件系统布局信息(文件,块,目录,权限等)和块位置。文件系统布局保留在磁盘上,块位置仅保留在内存中。当客户端打开文件时,namenode告诉客户端文件中所有块的位置;然后客户端不再需要与namenode通信以进行数据传输。

同一网站建议如下:

  

Namenode:我们建议至少8GB的RAM(最小为2GB RAM),最好是16GB或更多。一个粗略的经验法则是每100TB原始磁盘空间1GB;实际要求是每百万对象(文件,目录和块)大约1GB。 CPU要求是任何现代多核服务器CPU。通常,namenode仅使用2-5%的CPU。   由于这是单点故障,最重要的要求是可靠的硬件而不是高性能硬件。我们建议使用冗余电源和至少2个硬盘驱动器。

有关内存使用情况的更详细分析,请查看以下链接: https://issues.apache.org/jira/browse/HADOOP-1687

您也可能会发现这个问题很有趣:Hadoop namenode memory usage

答案 1 :(得分:6)

NameNode(NN)有几个技术限制,面对任何一个都会限制您的可扩展性。

  1. 存储器。 NN每个块消耗大约150个字节。从这里,您可以计算出数据需要多少RAM。有很好的讨论:Namenode file quantity limit
  2. IO。 NN正在为文件系统的每次更改执行1 IO(如创建,删除块等)。所以你的本地IO应该足够了。估计你需要多少钱更难。考虑到我们在内存数量上受限制的事实,除非您的群集非常大,否则您不会声明此限制。如果是 - 考虑SSD。
  3. CPU。 Namenode具有相当大的负载,可以跟踪所有数据节点上所有块的运行状况。每个datanode在一段时间内报告其所有块的状态。同样,除非集群不是太大,否则它应该不是问题。

答案 2 :(得分:1)

示例计算

200节点集群
24TB /节点
128MB块大小
复制因子= 3

需要多少空间?

#blocks = 200 * 24 * 2 ^ 20 /(128 * 3)
~12万亿块 ~12,000 MB内存。

答案 3 :(得分:0)

我想我们应该区分每个namenode对象如何使用namenode内存以及调整namenode堆大小的一般建议。

对于第一种情况(消费),AFAIK,每个namenode对象平均保存150个字节的内存。 Namenode对象是文件,块(不包括复制的副本)和目录。因此,对于占用3个块的文件,这是4(1个文件和3个块)x150个字节= 600个字节。

对于namenode建议的堆大小的第二种情况,通常建议您为每100万个块保留1GB。如果计算这个(每块150个字节),你会得到150MB的内存消耗。您可以看到这比每100万个块的1GB少得多,但您还应该考虑文件大小,目录的数量。

我想这是一个安全的建议。请查看以下两个链接以获得更一般的讨论和示例:

Sizing NameNode Heap Memory - Cloudera

Configuring NameNode Heap Size - Hortonworks

Namenode Memory Structure Internals