zoukankan      html  css  js  c++  java
  • hadoop-NameNode和SecondaryNameNode

    1.NN和2NN工作机制

        

       第一阶段:NameNode启动

        (1) 第一次启动NameNode格式化后,创建fsimage和edits文件,如果不是第一次启动,直接加载编辑日志和镜像文件到内存;

        (2) 客户端对元数据进行增删改的请求;

        (3) NameNode记录操作日志,更新滚动日志;

        (4) NameNode在内存中对数据进行增删改查;

      第二阶段:Secondary NameNode工作

        (1) Secondary NameNode询问NameNode是否需要checkpoint直接带回NameNode是否检查结果;

        (2) Secondary NameNode请求执行checkpoint;

        (3) NameNode滚动正在写的edits日志;

        (4) 将滚动的编辑日志文件和镜像文件拷贝到Secondary NameNode;

        (5) Secondary NameNode加载编辑日志和镜像文件到内存,并合并;

        (6) 生成新的镜像文件fsimage.chekpoint;

        (7) 拷贝fsimage.chkpoint到NameNode;

        (8) NameNode将fsimage.chkpoint重命名成fsimage;

      Fsimage:NameNode内存中元数据序列化后形成的文件;

      Edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算元数据);

      NameNode启动时,先滚动edits并生成一个空的edits.inprogress,然后加载edits和fsimage到内存中,此时NameNode内存就持有最新的元数据信息,client开始对NameNode发送元数据的增删改查的请求,这些请求的操作首先会被记录的edit.inprogress中(查询元数据的操作不会被记录在edits中,因为查看操作不会更改元数据信息),如果此时NameNode挂掉,重启后从edits中读取元数据的信息。然后,NameNode会在内存中执行元数据的增删改查的操作;

      由于edits中记录的操作会越来越多,edits文件会越来越大,导致NameNode在启动加载edits时会很慢,所以需要edits和fsimage进行合并(所谓合并,就是将edits和fsimage加载到内存中,照着edits中的操作一步步执行,最终形成新的fsimage)。secondarynamenode的作用就是帮助NameNode进行edits和fsimage的合并工作;

      secondaryNameNode首先会询问NameNode是否需要checkpoint(触发checkpoint需要满足两个条件中的任意一个,定时时间到和edits中数据写满了)。直接带回NameNode是否检查结果。secondarynamenode执行checkpoint操作,首先会让NameNode滚动edits并生成一个空的edits.inprogree,滚动edits的目的是给edits打个标记,以后所有新的操作都会写入edits.inprogree,其他未合并的edits和fsimage会拷贝到secondarynamenode的本地,然后将拷贝的edits和fsimage加载到内训中进行合并,生成fsimage.chkpoint,然后将fsimage.chkpoint拷贝给NameNode,重命名为fsimage后替换掉原来的fsimage。NameNode在启动时就只需要加载之前未合并的edits和fsimage即可,因为合并过的edits中的元数据信息已经被记录在fsimage中;

    2.Fsimage和Edits解析

      NameNode被格式化之后,将在/opt/module/hadoop/data/tmp/dfs/name/current目录中产生如下文件

        

      Fsimage文件:HDFS文件系统元数据的永久性的检查点,其中包含HDFS文件系统的所有目录和文件idnode的序列化信息;

      Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中;

      seen_txid:文件保存的是一个数字,就是最后一个edits_的数字;

      每次NameNode启动的时候都会将fsimage文件读入内存,加载edits里面的更新操作,保存内存中的元数据信息是最新的,同步的,可以看成NameNode启动的时候就将fsimage和edits文件进行了合并;

      2.1 oiv查看Fsimage文件

        2.1.1 查看oiv和oev命令

    [root@master current]# hdfs

          

        2.1.2 基本语法

          hafs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径

        2.1.3 实例

    [root@master current]# pwd
    /opt/module/hadoop/data/temp/dfs/name/current
    [root@master current]# hdfs oiv -p XML -i fsimage_0000000000000000580 -o /opt/module/hadoop/fsimage.xml  

      2.2 oev查看edits文件

        2.2.1 基本语法

          hdfs oev -p 文件类型 -i 编辑日志 -o 文件输出路径

        2.2.2 实例

    [root@master current]# hdfs oev -p XML -i edits_0000000000000000579-0000000000000000580 -o /opt/module/hadoop/edits.xml

    3.CheckPoint时间设置

      通常情况下,SecondaryNameNode每隔一小时执行一次;

      [hdfs-default.xml]

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

      一分钟检查一次操作次数,当操作次数达到一百万,SencondaryNameNode执行一次;

    <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 >

    4.NameNode故障处理

      4.1 将SecondaryNameNode中数据拷贝到NameNode存储数据的目录;

        4.1.1 kill -9 namenode进行号

        4.1.2 删除NameNode存储的数据(/opt/module/hadoop/data/temp/dfs/name)

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

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

        4.1.4 重新启动NameNode

      4.2 使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中;

        4.2.1 修改hdfs-site.xml文件

    <property>
      <name>dfs.namenode.checkpoint.period</name>
      <value>120</value>
    </property>
    
    <property>
      <name>dfs.namenode.name.dir</name>
      <value>/opt/module/hadoop/data/tmp/dfs/name</value>
    </property>

        4.2.2 kill -9 NameNode进程号

        4.2.3 删除NameNode存储的数据(/opt/module/hadoop/data/temp/dfs/name)

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

        4.2.4 如果SecondaryNameNode不和NameNode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的评级目录,并删除in_use.lock文件

        4.2.5 导入检查点数据

    bin/hdfs namenode -importCheckpoint

    5.集群安全模式

      NameNode启动时,首先将映射文件fsimage载入内存,并执行编辑日志edits中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求。但是此刻,NameNode运行在安全模式,即NameNode的文件系统对于客户端来说是只读的;

      系统中的数据块的位置并不是有NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NameNode发送新的块列表信息,NameNode了解到足够都的块位置信息之后,即可搞笑运行文件系统; 

      如果满足“最小副本条件”,NameNode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。

      5.1 基本语法

    1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态) 
    (2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态) 
    (3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态) 
    (4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态)

      5.2 实例

        5.2.1 进入安全模式

    bin/hdfs dfsadmin -safemode enter

        5.2.2 执行下面的脚本

    #!/bin/bash
    bin/hdfs dfsadmin -safemode wait
    bin/hdfs dfs -put ~/hello.txt /root/hello.txt

        5.2.3 再打开一个窗口,执行

    bin/hdfs dfsadmin -safemode leave

        5.2.4 退出安全模式

    hadoop dfsadmin -safemode leave
  • 相关阅读:
    编程之美3.7 队列中最大值问题
    群聊天
    POJ 3384 Feng Shui 半平面交
    Fiberead
    熊猫资本李论:为何我不看好“轻轻家教”模式?_亿欧网_驱动创业创新
    轻轻家教_百度百科
    为什么我们要使用新型Web安全协议HSTS?
    http://www.doframe.com/jetoolweb/index.html
    http://www.16aspx.com/Code/Show/5352
    http://www.ybtsoft.com/
  • 原文地址:https://www.cnblogs.com/wnwn/p/12558069.html
Copyright © 2011-2022 走看看