1.1.1 永久性数据结构
namenode的目录结构如下图
(1) VERSION属性文件
namespaceid文件系统命名空间唯一标识。
clusterID是将HDFS集群作为一个整体赋予的唯一标识符。
blockpoolID是数据块池的唯一标识。
CTime是namenode存储系统创建时间,格式变为0,升级文件系统后为更新时间戳。
layoutVersion描述HDFS持久性数据结构的版本,结构变更的递减。
in_use.lock是一个锁文件,避免同时访问。
(2) 文件系统镜像fsimage和编辑日志edit
1)作用
文件系统镜像文件fsimage和编辑日志文件edit都是用来恢复文件系统。如果namenode的发生故障,可以通过载入镜像文件和执行编辑日志来还原。镜像文件比较大,如果频繁进行写操作,会很慢,而编辑日志就像是一个缓存一样,保存着最近一段时间内对文件的操作,定期的将编辑日志中的操作更新到文件镜像中。定期新建新的文件镜像,使namenode可以从不同的时间点来恢复文件系统
2)定义
文件系统镜像文件fsimage:镜像文件中保存的是文件系统中文件的目录结构、文件属性(修改时间、访问时间,访问许可,块大小,组成文件的块id)和目录属性。是对文件系统的完整镜像,很大,会被载入到内存中。定期新建新的镜像文件,能够让namenode从不同的时间点恢复文件系统。
编辑日志edit:因为对大的镜像文件写入数据会很慢,所以用编辑日志临时缓存对文件系统的元数据的操作记录。edits_inprogress_xxxxxx表示正处于打开状态可写的文件,其他eidt文件都是历史文件,客户端向HDFS写入文件后,先要更新编辑日志,才返回给客户端成功。编辑日志会不断增长,需要将编辑日志中的操作加入到镜像文件中,进行合并,合并的过程还不能影响主namenode的正常操作。
3)文件系统镜像和编辑日志的合并过程
如上图所示,通过辅助namenode合并后在发给主namenode,不影响主namenode的正常工作,又能充分利用辅助namenode的性能,形成备份镜像。
a) 主namemode新建一个编辑日志文件edit_inprogress用来写入新的操作记录。
b) 辅助namenode采用HTTP GET从主namenode获取最近的文件系统镜像fsimage和edit编辑日志文件。
c) 辅助namenode将fsimage文件载入内存,执行edit文件中事务,将edit中的操作合并到fsimage,形成新的fsimage文件。
d) 辅助namenode通过HTTP PUT将fsimage发送到主namenode,主namenode命名fsimage文件,日后使用。
这个过程也说明了为什么主副namenode需要相同的内存需求。
(3) 创建新的fsimage镜像文件配置
辅助namenode每隔一小时就会就会触发创建新的fsimage镜像文件(检查点),可以通过属性dfs.namenode.checkpoint.period设置时间间隔。或者编辑日志的大小超过100.万(属性dfs.namenode.checkpoint.txns)个事务,也会新建fsimage镜像文件(检查点),检查是否超过100万个事务的时间间隔是1分钟(属性dfs.namenode.checkpoint.check.period)。
(4)辅助namenode
辅助namenode目录布局和主namenode的布局相同,主namenode故障时,可以从辅助namenode恢复数据,或者直接将副的变成主的。
(5)datanode的目录结构
datanode目录在初创阶段自动生成,blk开头的文件包含文件存储的块的原始字节数,meta结尾的文件是块相关联的元数据(版本,类型,校验和等文件属性)文件。目录中 数据块的数量增加到64(dfs.datanode.numblocks属性配置)个,创建一个子目录保存数据块文件,避免成千上万个文件放在同一个目录。
自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: