zoukankan      html  css  js  c++  java
  • 11.1.1namenode和datanode的数据结构和格式以及镜像fsimage和编辑日志edit

    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属性配置)个,创建一个子目录保存数据块文件,避免成千上万个文件放在同一个目录。

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取:

    https://www.cnblogs.com/bclshuai/p/11380657.html

  • 相关阅读:
    线程
    VS调试Tip集结
    努力提高代码的质量
    深入Razor,你准备好了吗?(兼谈我的学习方法和定位)
    使用匿名委托,Lambda简化多线程代码
    敏捷个人-自我成长[关注个人成长软技能]
    使用ActiveRecord的三层构架及泛型例子
    RUP4+1架构方法
    信息系统字段动态定义 和 JavaScript 实用脚本,很好,珍藏起来[转贴]
    CRM2011
  • 原文地址:https://www.cnblogs.com/bclshuai/p/12460727.html
Copyright © 2011-2022 走看看