HDFS-FSEditLog类

FSEditLog是操作日志文件的入口类,它负责记录日志,创建日志文件,roll日志文件等。FSeditLog本身
是一个状态机,比如在roll一个日志文件与新开一个日志文件之间,它的状态是BETWEEN_LOG_SEGMENTS

先看一下日志文件的组织结构:

Namenode的元数据文件夹是存放fsimage文件和editlog文件的文件夹,由hdfs-site.xml配置文件的
dfs.namenode.name.dir配置项配置,在这个示例中,元数据文件夹是data/dfs.name目录。其他相关文件
的解释可见《Hadoop 2.X HDFS源码剖析》3.1.3节关于FSEditLog类的讲解中。

在这里插入图片描述

FSEditLog类最重要的字段是journalSet,它在initJournals()方法中初始化journalSet中的journals,
逻辑是这样的,通过遍历传入的List<URI>,如果URI对应的是本地目录则创建FileJournalManager,然
后添加进journals,否则根据URI的scheme创建其他的JournalManager.

在这里插入图片描述

editlog文件可以存储在本地文件上(FileJournalManager与之对应),也可以存储在其他节点上
(QuorumJournalManager与之对应),不同的JournalManager对应不同的输出流,输出流在
JournalManager使用startLogSegment()时返回。在HDFS的逻辑中,记录日志直接调用输出流即可,
当涉及到日志文件的合并(roll)等其他操作时是使用对应的JournalManager来干活。

JournalSet是JournalManager实现类中特殊的一个类。前文已经指出,一个editlog文件可能对应多个
JournalManager。而journalSet就是将这些journalManager聚集过来,然后journalSet也表现成一个
JournalManager,然后FSEditLog类只需要操作一个JournalManager类--JournalSet即可。JournalSet的内
部逻辑是,通过字段journals记录所有的JournalManager及与之对应的输出流,当FSEditlog调用它的方
法时,遍历journals并执行相同的操作。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值