zoukankan      html  css  js  c++  java
  • HDFS元数据管理实战篇

               HDFS元数据管理实战篇

                                       作者:尹正杰

    版权声明:原创作品,谢绝转载!否则将追究法律责任。

    一.HDFS元数据概述

    1>.什么是HDFS元数据

      NameNode的主要工作是存储HDFS命名空间,HDFS元数据(或HDFS命名空间)是由inode(其存储属性,如权限,修改,访问时间和磁盘空间配额)表示的文件和目录的层次结构。命名空间还包括文件到块ID的映射关系。

      NameNode存储HDFS元数据,而DataNode存储实际的HDFS数据。当客户端连接到Hadoop读取和写入数据时,它们首先连接到NameNode,从而直到实际数据块存储在哪里或往哪个DataNode写入其数据。。

      HDFS元数据包括以下信息:
        (1)HDFS文件位置(持久化);
        (2)HDFS文件的所有权和权限(持久化);
        (3)HDFS数据块的名称(持久化);
        (4)HDFS数据块的位置(为持久化,仅在内存中存储,该信息由集群的所有DataNodes节点汇报而来);

      温馨提示:
        除了上面的第4条,元数据文件fsimage包括以上列出的所有元数据。

    2>.检查点

      NameNode维护命名空间树,以及将数据块映射到集群中的DataNode。inode和块列表一起定义命名空间的元数据,称为映像(fsimage)。

      NameNode将整个映像存储在其内存中,并在NameNode文件系统上存储该映像的记录。命名空间的这个持久记录称为检查点。

      NameNode将对HDFS文件系统的更改写入日志,命名为编辑日志。很重要的一点是,仅当NameNode启动,用户请求或者辅助节点或Standby NameNode创建新的检查点时才会改变检查点,否则NameNode在运行时不会改变它的检查点。

      当NameNode启动时,它会从磁盘上的检查点初始化命名空间映像,并重播日志中的所有更改。在开始为客户端提供服务之前,他会创建一个新的检查点(fsimage文件)和一个空编辑日志文件。

      温馨提示:
        fsimage文件包含存储在DataNode上的数据块和HDFS文件之间的映射信息。如果这个文件丢失或损坏,则存储在DataNode上的HDFS数据无法被访问,好像所有的数据已经消失了!

    3>.fsimage和编辑日志

      当客户端将数据写入HDFS时,写操作会更改HDFS元数据,当然,这些更改将由NameNode记录到编辑日志中。同时,NameNode还将更新其元数据的内存。

      每个客户端事务由NameNode记录在预写日志中,NameNode在向客户端发送确认之前刷新并同步编辑日志。

      NameNode处理来自集群中多个客户端的请求,因此为了优化将这些事务保存到磁盘的过程,它批处理多个客户端事务。

    二.下载最新的fsimage文件

    1>.fsimage和编辑日志的存储位置

      fsimage和编辑日志时与HDFS元数据相关联的两个关键结构。NameNode将这了两个结构存储在由hdfs-site.xml文件中的配置参数"dfs.namenode.name.dir"(映像文件)和"dfs.namenode.edits.dir"(编辑文件)指定的存储路径。

      如下图所示,是我们上面提到的两个参数指定的目录内容。

      温馨提示:
        Secondary NameNode(或Standby NameNode)具有相同的文件结构。
        另外需要注意的是,编辑日志由多个编辑段组成的,每个段都是以"edits_*"开头的文件;fsimage文件当然以"fsimage_*"开头。

    2>.下载最新的映像(fsimage)文件

    [root@hadoop105.yinzhengjie.com ~]# hdfs dfsadmin -help fetchImage 
    -fetchImage <local directory>:
        Downloads the most recent fsimage from the Name Node and saves it in    the specified local directory.
    
    [root@hadoop105.yinzhengjie.com ~]# 
    [root@hadoop105.yinzhengjie.com ~]# hdfs dfsadmin -help fetchImage
    [root@hadoop105.yinzhengjie.com ~]# ll
    total 0
    [root@hadoop105.yinzhengjie.com ~]# 
    [root@hadoop105.yinzhengjie.com ~]# hdfs dfsadmin -fetchImage ./          #下载最新的映像文件到当前目录
    20/09/02 00:54:34 INFO namenode.TransferFsImage: Opening connection to http://hadoop101.yinzhengjie.com:50070/imagetransfer?getimage=1&txid=latest
    20/09/02 00:54:34 INFO common.Util: Combined time for fsimage download and fsync to all disks took 0.00s. The fsimage download took 0.00s at 3000.00 KB/s. Synchronous (fsync) write to disk of /root/./fsimage_0000000000000004419 took 0.00s.
    [root@hadoop105.yinzhengjie.com ~]# 
    [root@hadoop105.yinzhengjie.com ~]# 
    [root@hadoop105.yinzhengjie.com ~]# ll
    total 4
    -rw-r--r-- 1 root root 3731 Sep  2 00:54 fsimage_0000000000000004419
    [root@hadoop105.yinzhengjie.com ~]# 
    [root@hadoop105.yinzhengjie.com ~]# hdfs dfsadmin -fetchImage ./          #下载最新的映像文件到当前目录

    3>.温馨提示

      NameNode仅存储文件系统元数据,例如磁盘上fsimage文件中的文件,块,目录和权限信息,它将实际块位置信息保留在内存中。

      当客户端读取数据时,NmaeNode会高速客户端文件块所在位置。在这一点上,客户端不需要进一步与NameNode进行关于数据本身传送的通信。

      由于NameNode元数据具有的关键性质,因此应配置多个目录作为dfs.namenode.name.dir配置参数的值。在理想情况下,推荐使用NFS设备挂载点,这样做的目的是可以保证数据的冗余性。

    三.离线映像查看器

    1>.如何查看映像文件的内容呢?

      下载映像文件后, 如何查看其内容呢?如下图所示,下载的映像文件其是一个二进制文件,我们不能使用文本工具去查看相应的内容(如果您强行这样做,根本得不到该文件存储的正确信息,如下图所示)。
    
      可以使用离线映像查看器(oiv)查看fsimage文件的内容,从而了解集群的命名空间。此工具将fsimage文件的内容转换为人类可读的格式,并允许通过只读WebHDFS API检查HDFS的命名空间。
    
      生产环境中fsimage文件一般都相当大(如果您的集群数据量在刚刚达到PB级别,那么映像文件通常都能达到GB的容量),OIV可以帮助您快速处理文件的内容。正如其名,它可以离线帮咱们查看映像文件。
    
      温馨提示:
        上面我们提到了如何下载映像文件,细心的小伙伴估计已经发现了,如果你可以直接登录到NameNode节点,压根就无需下载映像文件。只要到对应的存储目录拷贝一份即可,千万别试图去修改它!(如果你之意要这样做,修改前最好做好备份哟~)
     

    2>.

     

    3>.

     

  • 相关阅读:
    CSS3box-shadow属性的使用
    IE7下z-index失效问题
    CSS3的writing-mode属性
    eclipse Java EE安装和web项目的创建
    用JS去掉前后空格或中间空格大全
    webstorm自带debugger服务器
    用meta标签让网页用360打开时默认为极速模式
    移动端可拖动导航菜单小demo
    DCL并非单例模式专用
    领域专用语言
  • 原文地址:https://www.cnblogs.com/yinzhengjie2020/p/13363924.html
Copyright © 2011-2022 走看看