任何人都可以详细分析namenode的内存消耗吗?还是有一些参考资料?在网络中找不到资料。谢谢!
答案 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)有几个技术限制,面对任何一个都会限制您的可扩展性。
答案 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