当客户机要读取数据的时候,要从NameNode中读取Metadata元数据信息。元数据信息保存在NameNode内存中和磁盘中。因为内存中保存是为了查询速度,磁盘中保存是为了安全,因为内存中存储的不安全。
元数据存储细节
-
元数据
类似于仓库中的账本,描述着物品的描述信息。
- 如何判断该文件是否损坏
一个文件的每一块拥有一个值,校验和。具体过程是:从datanode中读取一个块信息,可以得到一个校验值。这个值和元数据中保存的值比较,如果不同就判断为损坏。
NameNode
- 整个文件系统的管理节点。
维护着整个文件系统饿文件目录树。
文件/目录的元信息和每个文件对应的数据块列表。
接收用户的操作请求 - NameNode中主要包括一下文件
- fsimage:元数据镜像文件。就是将内存中的元数据信息保存到磁盘,需要的时候就再从磁盘读取出来到内存。Hadoop1,Hadoop2伪分布式没有和内存中保持实时同步。
- edits:操作日志文件
- fstime:保存最后一次的还原点时间
- NameNode工作特点
- NameNode始终在内存中保存metadata,用于处理用户的"读请求"
- “写请求”时,namenode会在写入的时候,向edits文件写日志。文件上传成功后,才会修改内存中的元数据信息。先后顺序,是指edits文件和内存中的先后
- Hadoop会维护一个fsimage文件,但是该文件不会随时和namenode内存中的metadata保持一致,而是每隔一段时间才会合并edits文件来更新内容。
SecondaryNameNode就是用来合并fsimage和edits文件来更新NameNode中的metadata
DataNode
如果130M的数据,会被分成2块。但是第二块并不会给分配128M空间。
Secondary NameNode(集群中是没有的)
Secondary NameNode不是NameNode的热备。当NameNode宕机,并不会作为替补。Secondary NameNode仅仅是NameNode的工作助理。
- 执行过程
从NameNode中得到fsimage和edits,合并,然后生成新的fsimage,在本地保存,并返回给NameNode