HDFS的数据流以及Namenode工作机制

一:通过IO流操作HDFS

  1. HDFS文件上传
         HDFS的数据流以及Namenode工作机制_第1张图片
        效果:
        HDFS的数据流以及Namenode工作机制_第2张图片
  2. HDFS文件下载
     HDFS的数据流以及Namenode工作机制_第3张图片
  3. 定位文件读取      
    ⑴下面的文件总共有188.5M,它是分在两块Block存储的,我们如何分块读取呢
         HDFS的数据流以及Namenode工作机制_第4张图片
         HDFS的数据流以及Namenode工作机制_第5张图片
      ⑵我们指定每次读取的文件大小即可,第一次读取128M,后面再读取60.5M就读取完整了
          HDFS的数据流以及Namenode工作机制_第6张图片
         效果:
         HDFS的数据流以及Namenode工作机制_第7张图片
        下面我们再读取第二块:
         HDFS的数据流以及Namenode工作机制_第8张图片
         效果:
         HDFS的数据流以及Namenode工作机制_第9张图片
        我们可以将第二块的文件通过cmd上命令内容追加到第一块文件上,验证是否正确
         HDFS的数据流以及Namenode工作机制_第10张图片
         HDFS的数据流以及Namenode工作机制_第11张图片

二:HDFS写数据流程

  1. 剖析文件写入
      HDFS的数据流以及Namenode工作机制_第12张图片
  2.  网络拓扑的概念
     HDFS的数据流以及Namenode工作机制_第13张图片
     HDFS的数据流以及Namenode工作机制_第14张图片
  3.  机架感知
    HDFS的数据流以及Namenode工作机制_第15张图片
    HDFS的数据流以及Namenode工作机制_第16张图片
    HDFS的数据流以及Namenode工作机制_第17张图片      

三:HDFS读数据流程

         HDFS的数据流以及Namenode工作机制_第18张图片

四:NameNode工作机制

  1. 如下图
    HDFS的数据流以及Namenode工作机制_第19张图片
  2. 详情如下
     ⑴第一阶段:namenode启动
                a:第一次启动 namenode 格式化后,创建 fsimage 和 edits 文件。如果不是第一次启
                      动,直接加载编辑日志和镜像文件到内存。
                b:当客户端对元数据进行增删改的请求的时候,namenode 记录操作日志,更新滚动日志
                      namenode 在内存中对数据进行增删改查
     ⑵第二阶段:Secondary NameNode 工作
               a:Secondary NameNode 询问 namenode 是否需要 checkpoint。直接带回 namenode 是
                     否检查结果
               b:Secondary NameNode 请求执行 checkpoint
              c:namenode 滚动正在写的 edits 日志。
              d:将滚动前的编辑日志和镜像文件拷贝到 Secondary NameNode
              e:Secondary NameNode 加载编辑日志和镜像文件到内存,并合并
              f:生成新的镜像文件 fsimage.chkpoint
              g:拷贝 fsimage.chkpoint 到 namenode,namenode 将 fsimage.chkpoint 重新命名成 fsimage
  3. namenode简介
     ⑴namenode主要负责三个功能:
             a:管理元数据
             b:维护目录树
             c:响应客户请求
     ⑵详情如下
             HDFS的数据流以及Namenode工作机制_第20张图片
             HDFS的数据流以及Namenode工作机制_第21张图片
            HDFS的数据流以及Namenode工作机制_第22张图片            

五:镜像文件和编辑日志文件

  1.  简介
           namenode被格式化之后,将在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current目录中产生如下文件
           HDFS的数据流以及Namenode工作机制_第23张图片
          HDFS的数据流以及Namenode工作机制_第24张图片
     ⑴Fsimage 文件:HDFS 文件系统元数据的一个永久性的检查点,其中包含 HDFS文件系统的所有目录和
        文件 idnode 的序列化信息。
    ⑵Edits 文件:存放 HDFS 文件系统的所有更新操作的路径,文件系统客户端执行
        的所有写操作首先会被记录到 edits 文件中。
    ⑶seen_txid 文件保存的是一个数字,就是最后一个 edits_的数字
    ⑷每次次 Namenode 启动的时候都会将 fsimage 文件读入内存,并从 00001 开始
        到 seen_txid 中记录的数字依次执行每个 edits 里面的更新操作,保证内存中的元数据信息
       是最新的、同步的,可以看成 Namenode 启动的时候就将 fsimage 和 edits 文件进行了合
       并。
  2. 使用oiv查看Fsimage文件
     ⑴基本语法:
           hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径
     ⑵案例:
           HDFS的数据流以及Namenode工作机制_第25张图片
         将文件下载到本地格式化看一下:
           HDFS的数据流以及Namenode工作机制_第26张图片
  3.  使用oev命令查看edits文件
      ⑴基本语法
            hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径        
      ⑵案例
           HDFS的数据流以及Namenode工作机制_第27张图片
            将文件下载到本地格式化看一下:
           HDFS的数据流以及Namenode工作机制_第28张图片
          发现这个日志中没有什么东西,那么我们上传一个文件,试试:
          
          
         查看xml内容:
        HDFS的数据流以及Namenode工作机制_第29张图片

六:滚动编辑日志

  1. 简介
          正常情况 HDFS 文件系统有更新操作时,就会滚动编辑日志。也可以用命令强制滚动编辑日志。
  2.  滚动编辑日志(前提必须启动集群)
     命令:hdfs dfsadmin -rollEdits       

七:chkpoint  检查 时间 参数

  1. 通常情况下,SecondaryNameNode 每隔一小时执行一次。配置是在hdfs-site.xml中添加
    HDFS的数据流以及Namenode工作机制_第30张图片
            
  2. 一分钟检查一次操作次数,当操作次数达到 1 百万时,SecondaryNameNode 执行一次。
    HDFS的数据流以及Namenode工作机制_第31张图片     

八:SecondaryNameNode  目录结构

  1.  进入SecondaryNameNode服务器的目录,/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/current
     HDFS的数据流以及Namenode工作机制_第32张图片
     SecondaryNameNode 的 namesecondary/current 目录和主 namenode 的 current 目录的布局相同。
    好 处 : 在 主 namenode 发 生 故 障 时 ( 假 设 没 有 及 时 备 份 数 据 ) , 可 以 从SecondaryNameNode 恢复数据。     

九:NameNode故障处理方法

  1. Namenode 故障后,可以采用如下两种方法恢复数据。
      方法一:将 SecondaryNameNode 中数据拷贝到 namenode 存储数据的目录;

      方 法 二 :使 用 -importCheckpoint 选 项 启 动 namenode 守 护 进 程 , 从 而 将SecondaryNameNode 中
                        数据拷贝到 namenode 目录中。
  2.  案例一:使用手动拷贝 SecondaryNameNode  数据解决问题
      ⑴kill -9 namenode 进程
              HDFS的数据流以及Namenode工作机制_第33张图片
      ⑵删除 namenode 存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
               HDFS的数据流以及Namenode工作机制_第34张图片
      ⑶拷贝104服务器 SecondaryNameNode 中数据到102服务器的原 namenode 存储数据目录
           HDFS的数据流以及Namenode工作机制_第35张图片
       ⑷单独重新启动 namenode,这个我们最好使用单节点启动
            HDFS的数据流以及Namenode工作机制_第36张图片
        ⑸效果,发现数据回来了
            HDFS的数据流以及Namenode工作机制_第37张图片
  3.   案例二:采用 importCheckpoint  命令贝 拷贝 SecondaryNameNode 
     ⑴修改 hdfs-site.xml 中的配置
            HDFS的数据流以及Namenode工作机制_第38张图片
     ⑵kill -9 namenode 进程
             HDFS的数据流以及Namenode工作机制_第39张图片
     ⑶删除 namenode 存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)
            HDFS的数据流以及Namenode工作机制_第40张图片
     ⑷ 如 果 SecondaryNameNode 不 和 Namenode 在 一 个 主 机 节 点 上 , 需 要 将SecondaryNameNode
         存储数据的目录拷贝到 Namenode 存储数据的平级目录,并删除in_use.lock 文件
         a:拷贝到下面这个目录下:
              HDFS的数据流以及Namenode工作机制_第41张图片
        b:拷贝文件,并删除lock文件
              HDFS的数据流以及Namenode工作机制_第42张图片
              HDFS的数据流以及Namenode工作机制_第43张图片
      ⑸导入检查点数据(等待一会 ctrl+c 结束掉,时间有点长,需要等一下),到指定的目录下:
          HDFS的数据流以及Namenode工作机制_第44张图片      
          查看namenode的目录:发现数据已经同步回来了:
         HDFS的数据流以及Namenode工作机制_第45张图片
     ⑹启动 namenode
         HDFS的数据流以及Namenode工作机制_第46张图片
     ⑺效果:数据回来了
         HDFS的数据流以及Namenode工作机制_第47张图片     

十:集群安全 模式 操作

  1.  简介
         Namenode 启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中
    的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的 fsimage 文件
    和一个空的编辑日志。此时,namenode 开始监听 datanode 请求。但是此刻,namenode 运行
    在安全模式,即 namenode 的文件系统对于客户端来说是只读的。系统中的数据块的位置并不是
    由 namenode 维护的,而是以块列表的形式存储在datanode 中。在系统的正常操作期间,
    namenode 会在内存中保留所有块位置的映射信息。在安全模式下,各个 datanode 会向 namenode
    发送最新的块列表信息,namenode 了解到足够多的块位置信息之后,即可高效运行文件系统。
             如果满足“最小副本条件”,namenode 会在 30 秒钟之后就退出安全模式。所谓的最小副
    本 条 件 指 的 是 在 整 个 文 件 系 统 中 99.9% 的 块 满 足 最 小 副 本 级 别 ( 默 认 值 :
    dfs.replication.min=1)。在启动一个刚刚格式化的 HDFS 集群时,因为系统中还没有任何块,
    所以 namenode 不会进入安全模式。
              总之一句话,就是需要等待namenode和datanode完全建立链接之后,才会退出安全模式,
    我们才能对集群进行操作。
              集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
  2. 基本语法
    (1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
    (2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
    (3)bin/hdfs dfsadmin -safemode leave  (功能描述:离开安全模式状态)
    (4)bin/hdfs dfsadmin -safemode wait  (功能描述:等待安全模式状态)
  3.  案例
       ⑴查看安全模式状态
               HDFS的数据流以及Namenode工作机制_第48张图片
       ⑵进入安全模式
              
       ⑶在安全模式在我们上传一个文件试试
              HDFS的数据流以及Namenode工作机制_第49张图片
       ⑷离开安全模式
             HDFS的数据流以及Namenode工作机制_第50张图片
     
  4.  等待安全模式状态案例
      a:需求
              大数据中一般我们都是在晚上进行跑批的操作,跑批的时候系统是不能进行其他任何操作的,需要
            进入安全模式,那么有些操作就要等待,等待系统一旦离开安全模式就会立即进行其他的操作,这里
            我们可以通过脚本实现。
      ⑴首先进入安全模式
                HDFS的数据流以及Namenode工作机制_第51张图片   
      ⑵创建一个脚本wait.sh,就是等待安全模式一结束就上传文件
                
       ⑶执行脚本
                 HDFS的数据流以及Namenode工作机制_第52张图片       
        ⑷重新打开一个窗口,将安全模式退出
                 HDFS的数据流以及Namenode工作机制_第53张图片

十一:Namenode 多目录配置

  1.  简介
           众所周知,namenode很重要,它一旦挂掉,将会很麻烦,虽然有SecondaryNameNode进行数据
     恢复,但也比较麻烦。所以namenode 的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。
  2.  具体配置如下
       ⑴首先格式化集群,删除数据,回到初始状态
              a:103服务器执行sbin/stop-yarn.sh
              b:102服务器执行sbin/stop-dfs.sh
              c:102,103,104服务器执行删除数据操作:rm -rf data/ logs/
              d:格式化102服务器的namenode
                     bin/hdfs namenode -format
                     后面出现的data再次删除掉
       ⑵配置 hdfs-site.xml,进行多目录配置
            HDFS的数据流以及Namenode工作机制_第54张图片
            注意:这个${hadoop.tmp.dir}是在core-site.xml中配置的指定hadoop运行时产生文件的存储目录
           HDFS的数据流以及Namenode工作机制_第55张图片
     ⑶将 hdfs-site.xml同步到集群的各个服务器上
          
      ⑷需要对102服务器再次格式化一下:bin/hdfs namenode -format
      ⑸最后启动集群
      ⑹效果:
             HDFS的数据流以及Namenode工作机制_第56张图片
          发现name1和name2中数据一致:
          HDFS的数据流以及Namenode工作机制_第57张图片
          也就是说当我们进行数据操作的时候,信息会同时保存到这两个namenode当中。增强了保护性。         

你可能感兴趣的:(hadoop,hadoop)