分布式文件系统之DFS复制、命名空间和NameNode
什么是分布式文件系统?
百度百科:
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。
意思就是,原本存在本地的资源现在通过计算机网络可以存在其他的计算机上。也不用管这文件到底被存在哪个节点了,反正当你需要它的时候,它就在那里。
主流分布式文件系统:① GFS: Google File System for Google's MapReduce;
② HDFS: Hadoop Distributed File System for Hadoop;
那分布式文件系统是咋工作的呢?
技术一:DFS复制
- 文件数据依据 二进制 被拆分进 计算机网络 中的 blocks
- block size是固定的,通常为128M;且,存满一个block 1 (128M),才会存下一个block 2 (128M),以此类推
- 每一个block是重复存在(通常重复3次)于计算机网络中的不同计算机(DataNode),以支持容错
举个栗子:假设,计算机网络里有3个节点。一个200M的文件,会先被拆分进block 1(128M), block 2(72M)。然后每个block被复制3遍,我们得到6个blocks: block 1-1,block 1-2,block 1-3,block 2-1,block 2-2,block 2-3。接下来这6个blocks会被放进3个节点中,比如节点1分到 block 1-1,block 2-2;节点2分到block 1-3,block 2-1;节点3分到block 1-2,block 2-3。这种情况下,如果节点1的block 1-1出现failure, 用户还是可以访问到block 1-3和block 1-2。
技术二:DFS命名空间
通过上文我们知道了,一个文件通过DFS复制技术会拆分进多个且有重复性的blocks。但是咱本意只是想访问这个文件,如果还得要关心哪个block在哪个节点,怎么分的,那可就太累了。所以,为了跳过这些不重要的细节,只呈现出统一的集中的一个文件视图给用户,命名空间由此而生。
那命名空间是怎么工作的呢? -----> 将文件有逻辑的存储于文件系统树的不同层级中
DFS命名空间的管理者是NameNode,维护着文件系统树及整棵树内所有的文件和目录。
又出现新概念了,NameNode又是什么?
以HDFS为例,HDFS集群包含两类节点:NameNode(管理者头头) 和 DataNode(工作者)。管理者只能有一个,但是工作者可以有好多个。NameNode主要负责就是负责管理HDFS,比如上文提到的命名空间,还有管理block。而DataNode主要就是一个听NameNode命令来存储文件的‘工具Node’,在一个文件被分割成多个block之后,就会被存储在这些‘工具Node’上。
就是,当用户来读文件啦,然后这个文件被分割成blocks啦,然后被DataNode们存储啦,然后NameNode跟客户端说 “诺,这个block在这个DataNode,那个block在那个DataNode”,然后客户端就去找这些DataNode啦,然后文件就被读取啦。
如果,当用户来写入文件啦,然后客户端来找NameNode说要写文件啦,然后NameNode就在命名空间里创建新文件啦,然后拿着顺序单跟客户端说 “诺,这个block要写进这个DataNode,那个block要写进那个DataNode",然后客户端就去找第一个DataNode啦,然后DataNode们就按顺序一个一个写入啦,然后一个传一个最后告诉客户端“我写好啦”,所以文件就被写好啦。
这一整套的工作流程下来,NameNode看起来是特别重要的样子,所以让我们来围观一下管理者是咋工作的。
NameNode主要包含两类文件:
1. fsImage (filesystem image):把文件和目录的元数据信息持久化地存储到fsimage文件中,每次启动时从中将元数据加载到内存中构建目录结构树,之后的操作记录在edits log中
2.edits (edit log) :记录每次变化
通过调用FSImage和FSEditLog,可以从NameNode本地磁盘读取元数据信息和向本地磁盘写入元数据信息
这NameNode这么重要,那它要是凉了...岂不是gg...
备胎节点上线:Secondary NameNode
备胎必备品质:① 定时关心:定时对NameNode进行备份;② 崩溃时的依靠:NameNode崩溃后,将之前获得fsimage和edits重新合并之后发给NameNode
备胎不可少啊!!!
早上好啊。(๑•̀ㅂ•́)و✧ | Good Good Study | Day Day No Hair |
与大家共勉!