文件系统采用块的概念,原因是为了减少磁盘寻址时间,把寻道时间分摊到大量数据中

Windows Linux等操作系统,文件系统一般会把磁盘空间划分为每512字节一组,称为“磁盘块”
它是文件系统读写的最小单位,块(Block)的大小通常是磁盘块的整数倍,即每次读写的数据量必须是磁盘块大小的整数倍。

磁盘块--512字节     块的大小一般几千字节     磁盘块与块不是同一概念

分布式文件系统也采用了块的概念,文件被分成若干个块进行存储,块是数据读写的基本单位,分布式文件系统的块要比操作系统的块大很多,原因是:最小化寻址开销,但是不宜过大,原因:MapReduce中的Map任务一次只能处理一个块中的数据,如果启动任务过少,会降低作业的并行处理速度。比如。HDFS默认的块的大小是64MB,还有一点不同于操作系统,在分布式系统中,如果一个文件小于一个块的大小,它并不占用整个数据块的存储空间。

名称节点

负责管理命名空间。命名空间包含目录,文件和块,命名空间的管理指的是对目录,文件和块的创建,修改和删除等基本操作。HDFS中只有一个命名空间。

保存了两个数据结构,即FsImage和EditLog。
FSImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据。元数据包括块的位置信息(动态),快的偏移量,权限大小(静态)。EditLog(操作日志)中记录了所有针对文件的创建,删除,重命名等操作。
名称节点记录了每个文件中各个块所在的位置信息,但是不持久化这些信息,而是在系统每次启动的时候扫描所有数据节点重构得到这些信息。
启动时,名称节点会将FSImage的内容加载到内存当中,然后执行EditLog中的各项操作,使得元数据保持到最新。这个操作完成后,会创建一个新的FSImage和一个空的EditLog。启动的过程中处于“安全模式”,只能对外提供读操作,无法提供写操作。启动结束后,退出安全模式,对外提供读写操作。

数据节点

数据节点是分布式文件系统的工作节点,负责数据的存储和读取,会根据客户端或者名称节点的调度来进行数据的存储和检索,并且向名称节点定时发送自己所存储的块的列表,每个数据节点都会将数据保存在各自节点的本地Linux系统中。

第二名称节点

出现原因:防止名称节点在启动的过程中长期处于“安全模式”,影响用户使用(客户体验)。

功能:完成FSImage和Editlog的合并操作,减少Editlog文件大小,缩短名称节点的重启时间。

作为名称节点的“检查点”(备份数据信息)。

不能作为备份节点,原因:不能起到“热备份”。当数据节点出现故障,还是有可能丢失部分信息。

数据库 磁盘块索引b树 索引块和磁盘块的大小_分布式文件系统的结构

通信协议

数据库 磁盘块索引b树 索引块和磁盘块的大小_分布式文件系统的结构_02

HDSF HA

出现原因:解决“单点故障问题”;提供“热备份”。

“单点故障”:一个集群中只有一个名称节点,如果出现故障,导致整个集群变得不可用。

解决方法:在集群中一般设置两个名称节点,其中一个名称节点处于“活跃(Active)”状态,另一个处于“待命(Standby)”状态。处于活跃状态的负责对外处理所有客户端的请求,而处于待命状态的名称节点则为备用节点,保存了足够多的系统元数据,当名称节点出现故障时提供快速恢复的能力。也就是说,在HDFS HA中,处于待命状态的名称节点提供了“热备份”,一旦活跃名称节点出现故障,就可以立即切换到待命名称节点。两种名称节点的同步,可以借助于一个共享存储系统来实现,比如zookeeper。zookeeper可以确保任意时刻只有一个名称节点提供对外服务。

数据库 磁盘块索引b树 索引块和磁盘块的大小_分布式文件系统的结构_03