8)Hadoop之HDFS:NN和2NN

NN和2NN的工作机制
  • 如图所示:

  • 第一阶段:NameNode启动:
    ①若是第一次启动NameNode,则需要格式化NameNode,然后fsimage和Edits会被创建,如果不是第一次启动,则直接把fsimage和Edits加载进内存;
    ②客户端对元数据的增删改的请求;
    ③NN记录操作日志,更新滚动日志;
    ④NN在内存中对数据增删改;

  • 第二阶段:Secondary NameNode工作:
    ①2NN询问NN是否需要CheckPoint。直接带回NN是否检查结果;
    ②2NN请求执行CheckPoint;
    ③NN滚动正在写的Edits日志
    ④将滚动前的编辑日志和镜像文件拷贝到2NN
    ⑤2NN将两者加载到内存进行合并
    ⑥合并生成新镜像文件Fsimage.chkpoint

  • Fsimage 和 Edits概念:
    第一次格式化NN后, 在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current/ 目录下会生成:

      fsimage_0000000000000000000
      fsimage_0000000000000000000.md5
      seen_txid
      VERSION
    

    ①Fsimage文件:HDFS中元数据的一个永久性检查节点,其中包含 HDFS的所有目录和文件的inode的序列化信息
    ②Edits文件:存放HDFS所有HDFS更新操作的路径,文件系统客户端所有 写操作首先会记录Edits文件中
    ③seen_txid保存的是一个数字,就是最后一个edits_ 的后缀数字
    ④每次NN启动的时候都会将fsimage读入内存,并加载Edits里面的更新操作,保证内存中的元数据是最新的,同步的;可以看成NN在启动时就会将fsimage和Edits进行了合并;
    - oiv 查看Fsimage文件:

    基本语法:hdfs oiv -p 文件类型 -i 镜像文件路径 -o 转换后文件输出路径
    

    例:

    [zy@hd101 current]$ hdfs oiv -p XML -i fsimage_0000000000000000074 	
    -o /opt/module/hadoop-2.7.2/fsimage.xml 
    

    /opt/module/hadoop-2.7.2/fsimage.xml 部分内容如下:

<?xml version="1.0"?>
<fsimage>
 <NameSection>
  <genstampV1>1000</genstampV1>
  <genstampV2>1009</genstampV2>
  <genstampV1Limit>0</genstampV1Limit>
  <lastAllocatedBlockId>1073741832</lastAllocatedBlockId>
  <txid>74</txid>
 </NameSection>
 <INodeSection>
  <lastInodeId>16395</lastInodeId>
  <inode>
   <id>16385</id>
   <type>DIRECTORY</type>
   <name></name>
   <mtime>1568927063386</mtime>
   <permission>zy:supergroup:rwxr-xr-x</permission>
   <nsquota>9223372036854775807</nsquota>
   <dsquota>-1</dsquota>
  </inode>
  <inode>
   <id>16387</id>
   <type>DIRECTORY</type>
   <name>demo</name>
   <mtime>1568920091277</mtime>
   <permission>zy:supergroup:rwxr-xr-x</permission>
   <nsquota>-1</nsquota>
   <dsquota>-1</dsquota>
  </inode>
Fsimage中没有记录块所对应DataNode,为什么?
在集群启动后,要求DataNode上报数据块信息,并间隔一段时间后再次上报。
  • oev 查看Edits文件:
    基本语法:
    hdfs  oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
    
    例:
[zy@hd101 current]$ hdfs oev 
 -p XML
 -i edits_0000000000000000075-0000000000000000075 
 -o /opt/module/hadoop-2.7.2/edits.xml  
[zy@hd101 current]$ cat /opt/module/hadoop-2.7.2/edits.xml 
cat到的内容如下:	
<?xml version="1.0" encoding="UTF-8"?>
<EDITS>
  <EDITS_VERSION>-63</EDITS_VERSION>
  <RECORD>
    <OPCODE>OP_START_LOG_SEGMENT</OPCODE>
    <DATA>
      <TXID>75</TXID>
    </DATA>
  </RECORD>
</EDITS>
NameNode如何确定下次开机启动的时候合并哪些Edits?(见下文)
  • CheckPoint 时间设置:

①通常情况下,2NN会每一小时执行一次:
[hdfs-default.xml]

<property> 
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600</value>
</property>

②一分钟检查一次操作次数
③当操作次数达到1百万时,SecondaryNameNode执行一次。

<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
  <description>操作动作次数</description>
</property>
<property> 
  <name>dfs.namenode.checkpoint.check.period</name>
  <value>60</value>
  <description>1分钟检查一次操作次数</description>
</property>
NameNode的故障处理

NameNode故障后,可以采用如下两种方法恢复数据。

方法一:将2NN中的数据拷贝到NN的存储数据目录;
①kill -9 NameNode进程
②删除NameNode存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)

rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*

③拷贝SecondaryNameNode中数据到原NameNode存储数据目录:

scp -r 
atguigu@hadoop104:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/*
./name/

④重新启动NameNode:

hadoop-daemon.sh start namenode
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值