第一讲:基本概念
1.1数据块(block)
默认基本存储单位块大小为:64M。JDW采用128M作为块大小;
和普通文件系统相同的是,HDFS中的文件是被分成64M一块进行数据块存储的。
不同于普通文件系统的是,HDFS中,如果一个文件小于一个数据块的大小,并不会占用整个数据块的存储空间.
blk_<id>保存的是HDFS的数据块,其中保存了具体的二进制数据。
blk_<id>.meta保存的是数据块的属性信息:版本信息,类型信息和checknum
当一个目录中的数据块达到一定数量的时候,则会创建子文件夹来保存数据块及数据块属性信息。
1.2元数据节点文件夹结构
VERSION文件是java properties文件,保存了HDFS的版本号。
namespaceID=788590977 cTime=0 storageType=NAME_NODE layoutVersion=-32 |
namespaceID是文件系统的唯一标识符,是在文件系统初次格式化时生成的。在HDFS集群启动以后,使用namespaceID来识别集群中的Datanode节点,也就是说,在HDFS集群启动的时候,各个Datanode会自动向Namenode注册获取到namespaceID的值,然后将该值存储到Datanode节点的VERSION文件中。
cTime:表示Namenode存储对象(即Fsimage对象)创建的时间,但是在初始化时它的值是0。如果由于layoutVersion发生变化触发了一次升级过程,则会更新该时间字段的值。
storageType表示此文件夹中保存的是元数据节点的数据结构。
1.3文件系统命名空间映像文件及修改日志
当文件系统客户端(Client)进行写操作时,首先把它记录在修改日志中(edit log)
元数据节点(Namenode)在内存中保存了文件系统的元数据信息。在记录了修改日志(edit log)后,元数据节点(Namenode)则修改内存中的数据结构。
每次的写操作成功之前,修改日志都会同步(sync)到文件系统。
fsimage文件,也即命名空间映像文件,是内存中的元数据在硬盘上的checkpoint,它是一种序列化的格式,并不能够在硬盘上直接修改。
同数据的机制相似,当元数据节点(Namenode)失败时,最新的checkpoint的元数据信息会从fsimage加载到内存中,然后逐一重新执行修改日志中的操作。
从元数据节点(Secondary Namenode)就是用来帮助元数据节点(Namenode)将内存中的元数据信息checkpoint到硬盘上的。