热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HdfsEditslogFsImageSecondaryNN与NN工作机制

文章目录HdfsEditslogFsImageSecondaryNN与NN工作机制1.FsImageFsImage文件内容2.EditsEdits文件内容3.NN和Secondar




文章目录


  • Hdfs Editslog FsImage SecondaryNN与NN工作机制
      • 1.FsImage
          • FsImage文件内容


      • 2.Edits
          • Edits文件内容


      • 3.NN和Secondary NN工作机制(CheckPoint)
          • Checkpoint process
          • NN和Secondary NN机制





Hdfs Editslog FsImage SecondaryNN与NN工作机制

【文件(目录)元数据】存储在【NameNode内存】中,使用arrayList。


1.FsImage

为了防止NN断电,内存元数据信息丢失,将元数据信息保存在磁盘FsImage文件中。

FsImage文件不是在元数据写入内存时,同时写入FsImage文件;而是通过Secondary NN合并时,生成新的FsImage文件。


FsImage文件内容

//FsImage部分数据

16386
DIRECTORY
user
1512722284477

atguigu:supergroup:rwxr-xr-x
-1
-1


16387
DIRECTORY
atguigu
1512790549080

atguigu:supergroup:rwxr-xr-x
-1
-1


16389
FILE
wc.input
3
1512722322219
1512722321610

134217728

atguigu:supergroup:rw-r--r--


1073741825
1001
59



思考:可以看出,Fsimage中没有记录块所对应DataNode,为什么?
每个block对应到datanodes列表的信息在hadoop中并没有进行持久化存储,
而是在datanode启动时,每个datanode对本地磁盘进行扫描,
将本datanode上保存的block信息汇报给namenode,namenode在接收到每个datanode的块信息汇报后,
将接收到的块信息,以及其所在的datanode信息等保存在内存中(BlocksMap)。
(HDFS就是通过这种块信息汇报的方式来完成 block -> datanodes list的对应表构建。Datanode向namenode汇报块信息的过程叫做blockReport,而namenode将block -> datanodes list的对应表信息保存在一个叫BlocksMap的数据结构中。)

2.Edits


  • 记录客户端对hdfs的修改log。
  • 当在内存中的元数据更新时,如果同时更新FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦NameNode节点断电,就会产生数据丢失。因此,引入Edits文件(只进行追加操作,效率很高)。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。注意:写Edits首先写入内存缓冲区,当触发刷盘机制时,将内存中的Edits数据刷入Edits文件。
  • 记录在edits文件中的每个操作都是一个独立的事务,每个事务有相应的操作码,唯一的事务ID以及操作对应的数据信息等。事务ID是由namenode统一管理的,采用递增的方式,为每个操作赋予唯一的事务ID。最后一次操作的事务ID还会被写入到文件(seen_txid),namenode重启后会读取这些信息,并在最后一次事务ID上继续递增。
  • 每个edits文件的文件名都有固定的格式,其中当前正在写的文件名格式为edits_inprogress_TXID,TXID为该文件中记录的第一个操作的事务ID;已经写完成的editlog文件名为 edits_StartTXID_EndTXID,StartTXID为该文件中记录的第一个操作的事务ID,EndTXID为该文件中记录的最后一个操作的事务ID。

Edits文件内容

//每条记录是一条操作


-63

OP_START_LOG_SEGMENT

129



OP_ADD

130
0
16407

/hello7.txt
2
1512943607866
1512943607866
134217728
DFSClient_NONMAPREDUCE_-1544295051_1
192.168.1.5
true


atguigu
supergroup
420

908eafd4-9aec-4288-96f1-e8011d181561
0



OP_ALLOCATE_BLOCK_ID

131
1073741839



OP_SET_GENSTAMP_V2

132
1016



OP_ADD_BLOCK

133

/hello7.txt

1073741839
0
1016


-2



OP_CLOSE

134
0
0

/hello7.txt
2
1512943608761
1512943607866
134217728


false

1073741839
25
1016


atguigu
supergroup
420





3.NN和Secondary NN工作机制(CheckPoint)


Checkpoint process

When the NameNode starts up, or a checkpoint is triggered by a configurable threshold,:


  • it reads the FsImage and EditLog from disk
  • it applies all the transactions from the EditLog to the in-memory representation of the FsImage
  • it flushes out this new version into a new FsImage on disk.
  • It truncates the old EditLog because its transactions have been applied to the persistent FsImage.

A checkpoint can be triggered:


  • at a given time interval (dfs.namenode.checkpoint.period) expressed in seconds,
  • or after a given number of filesystem transactions have accumulated (dfs.namenode.checkpoint.txns).

If both of these properties are set, the first threshold to be reached triggers a checkpoint.

From the config file:


dfs.namenode.checkpoint.period
21600


dfs.namenode.checkpoint.txns
1000000


NN和Secondary NN机制

img



推荐阅读
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了如何清除Eclipse中SVN用户的设置。首先需要查看使用的SVN接口,然后根据接口类型找到相应的目录并删除相关文件。最后使用SVN更新或提交来应用更改。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
author-avatar
晨曦微露jie
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有