咱们都知道Hadoop的底层是HDFS-Hadoop Distributed File System.也就是Hadoop分布式文件系统。 node
全部的运算都是基于HDFS文件的,它的核心关键词有:主从NameNode VS DataNode. linux
-----------其中NameNode上存储的就是元数据---描述数据文件的meta信息。 redis
存在形式有:内存信息+硬盘文件信息。 数据库
这段时间,就让咱们一块儿来了解HDFS的元数据以及HDFS文件系统的要义吧。 框架
------------------------------------------------------------------------------------------------- 分布式
试想,若是让咱们本身设计一个文件系统,咱们须要元数据存储哪些信息? oop
其实这取决于信息获得哪些功能? spa
我的认为功能包括: 设计
1)namenode和全部datanode的IP,端口,文件夹,容量等信息。这至关于一个整体的文件系统框架描述。 日志
2)每一个datanode的文件的层次描述,文件目录关系。这个比1就更细致了。
3)对于某个文件,知道拆分了几块,每块的大小,备份状况,分别分布在哪些datanode上的哪些路径上。
从1咱们能够获得分布式文件系统框架的骨架,从2咱们能够获得分布式文件系统的血肉,从3咱们能够获得具体的访问一个文件的方式。
有了以上3个,实际上就是namenode的元数据信息的组成部分,一切从应用的需求出发才能够获得设计图。
-------------------------------------------------------------------------------------------------
启动时,元数据从硬盘里被FSImage读取到内存中。
在持久化时,元数据被FSImage持久化到硬盘中。
同时硬盘中也会存放操做日志edits.我目前的理解是:把操做日志的行为累加起来---》最终的元数据。
这个也就像是redis里干的同样了。不少数据库也是这么操做的,这个没啥好说的,很简答!
-------------------------------------------------------------------------------------------------
HDFS也引入了INode,这实际上跟linux中的文件系统中的INode是同样的,其次就是因为是分布式文件系统
因此每一个文件的分片在hdfs中就成了Block。块。
这里必需要强调:块是按照物理大小分的,而不是分局逻辑大小,这样会引入什么问题?
就是一个逻辑记录可能会分到2个块中,而这2个块可能仍是跨机器的。
这些hadoop都会解决。之后再讨论。
-------------------------------------------------------------------------------------------------
理论讲得再多,也不及代码来得实在而痛快。
下面就讲一讲HDFS的format究竟作了哪些事情!