hadoop的namenode的内存消耗?

zlhcx6iw  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(571)

有人能详细分析namenode的内存消耗吗?还是有参考资料?在网络上找不到资料。谢谢!

sbdsn5lh

sbdsn5lh1#

我想我们应该区分每个namenode对象消耗namenode内存的方式和调整namenode堆大小的一般建议。
对于第一种情况(消耗),afaik,每个namenode对象平均拥有150字节的内存。namenode对象是文件、块(不包括复制的副本)和目录。因此,对于一个包含3个块的文件,这是4(1个文件和3个块)x150字节=600字节。
对于namenode的建议堆大小的第二种情况,通常建议每一百万个块保留1gb。如果您计算这个值(每个块150字节),您将得到150mb的内存消耗。您可以看到这比1gb每一百万块要少得多,但是您还应该考虑文件大小、目录的数量。
我想这是个安全的建议。有关更一般性的讨论和示例,请查看以下两个链接:
调整namenode堆内存大小-cloudera
配置namenode堆大小-hortonworks
namenode内存结构内部

nimxete2

nimxete22#

示例计算
200节点集群
24tb/节点
128mb块大小
复制因子=3
需要多少空间?

块=200242^20/(128*3)

约1200万块
约12000 mb内存。

r3i60tvu

r3i60tvu3#

我想内存消耗将取决于您的hdfs设置,因此取决于hdfs的总体大小,并与块大小相关。从hadoop namenode wiki:
使用具有大量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内存使用情况

rkttyhzu

rkttyhzu4#

namenode(nn)有几个技术限制,面对它们中的任何一个都会限制您的可伸缩性。
记忆。nn每个块消耗大约150字节。从这里你可以计算出你的数据需要多少内存。有一个很好的讨论:namenode文件数量限制。
伊奥。nn为文件系统的每次更改(如创建、删除块等)执行1个io。所以你的本地io应该允许足够的时间。很难估计你需要多少钱。考虑到内存限制了块的数量,除非您的集群非常大,否则您不会申请这个限制。如果是-考虑ssd。
中央处理器。namenode对所有datanode上所有块的运行状况进行了大量的负载跟踪。每个数据节点在一段时间内报告其所有块的状态。再说一次,除非集群不是太大,否则它不应该是一个问题。

相关问题