我正在阅读 GFS 论文,但无法理解一点,master 是否也为每个文件副本维护了 64kb 的元数据?假设主数据库的内存是 8 GB,而我存储了 1000 个文件,每个文件每个 1 kb,则需要多少内存?如果复制因子为 3。
GFS 为每个 64 MB 块维护的元数据少于 64 字节,而不是单个文件。每个副本的成本与元数据开销相同。因此,1000 个文件占用多少内存取决于这些文件总共有多少块。
No.每个副本的主要元数据仅在块服务器的内存中。主数据库仅存储 2 种类型的区块元数据。
- 每个 64 MB 区块少于 64 字节元数据的块句柄
- 由 HeartBeat 在块服务器和主服务器之间维护的每个块的位置。
以下是论文中的细节。
主节点存储三种主要类型的元数据:文件和块空间、从文件到块的应用以及每个块的副本的位置。所有元数据都保存在主节点的内存中。
主服务器不会持久记录哪些块服务器具有给定块的副本。它只是在启动时轮询块服务器以获取该信息。此后,主服务器可以保持自身最新状态,因为它控制所有块放置并使用常规 HeartBeat 消息监视块服务器状态。
最重要的一句话:
分块服务器对自己的磁盘上有什么块或没有什么块有最终决定权。