Hadoop 分布式文件系统

管理网络中跨多台计算机存储的文件系统称为分布式文件系统

Hadoop有一个称为HDFS的分布式系统

HDFS以流式数据访问模式来存储超大文件,运行于商用硬件集群上

HDFS的构建思路是这样的:一次写入、多次读取是最高效的访问模式,

HDFS主要特性:

  1 支持超大文件,甚至TB的文件

  2 检测和快速应对硬件故障

  3 流式数据访问,注重的是数据的吞吐量,而不是数据访问的速度

  4 简化的一致性模型,一次写入,多次读取

不适合HDFS上的应用

  1 低时间延迟的数据访问

  2 大量的小文件

  3 多用户写入,任意修改文件

 

数据块

  HDFS也有块的概念,默认为64MB,

  好处:

    1 文件的大小可以大于任意磁盘的容量

    2 使用块抽象,简化了存储子系统的设计

      * 简化存储管理

      * 消除对元数据的顾虑(块只存储数据,而文件的元数据,可以单独存储,这样,其他系统可以单独管理这些元数据)

    3 非常适用于数据备份而提供数据容错能力和可用性

 

HDFS采用了主从(Master/Slave)体系结构,namenode、DataNode、Client。

  NameNode:

    在一个HDFS中,有一个名字节点(NameNode)和第二名字节点(SecondaryNameNode)

    NameNode管理文件系统的命名空间,它维护着文件系统树及整棵树内所有的文件和目录

    这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件

    名字节点保存的关系:

      第一关系:命名空间镜像保存着某一特定时刻HDFS的目录树、元信息和数据块索引等信息。后续对这些信息的改动则保存在编辑            日志中

      第二关系:NameNode中与DataNode相关的信息在名字节点每次启动时,都会动态地重建这些信息

  datanode:

    文件系统的工作节点,它们根据需要存储并检索数据块,并定期向namenode发送它们所存储的块的列表

  客户端:

    用户和HDFS进行交互的手段,HDFS提供了命令行接口、java API、Thrift接口、C语言库、用户空间文件系统等

 

HDFS源代码结构:

  org.apache.hadoop.hdfs

 

HDFS信息流动的三种方式:

  1 HDFS的文件和目录相关事务部分,利用Hadoop远程过程调用(RPC),发送到名字节点上去执行

  2 文件数据的读写,HDFS提供了对数据的流式访问,使用基于TCP的流式数据访问接口,有利于批量处理数据

  3 NameNode和SecondaryNameNode之间处理文件系统镜像和编辑日志,使用基于HTTP的流接口

 

 数据节点

  以数据块的形式在本地Linux文件系统上保存了HDFS文件的内容,

  数据节点管理的目录下一般有4个目录和2个文件:

    1 blocksBeingWritten:保存着由客户端发起的正在写的数据块

    2 current:已经写入HDFS文件系统的数据块,还有一些系统工作时需要的文件

      唯一带目录的子目录,其中既有目录,也有文件

      大部分文件以blk_作为前缀,有两种类型:

        1 HDFS数据块,例如:blk_37857392342939347832

        2 保存数据块的校验信息,例如:blk_37857392342939347832.meta

      当目录中存储的数据块增加到一定规模时,数据节点会创建一个新的目录,用于保存新的块及元数据

    3 detach:配合数据节点升级,供数据块分离操作保存临时工作文件

    4 tmp:保存由数据块复制引发的正在写的数据块

    5 storage:保存一段提示信息,一个二进制文件,0.13版本之前是数据块的保存目录

    6 in_use.lock:表明目录已经被使用,实现一种锁机制

  

 

命名节点

  命名节点维护两个重要关系:

    1 HDFS文件系统的文件目录树,以及文件的数据块索引,既每个文件对应的数据块列表

      目录树、元信息和数据块索引等信息会持久化到磁盘上,保存在命名空间镜像和编辑日志中

    2 数据块和数据节点的对应关系,既某一数据块保存在那些数据节点的信息

      在名字节点启动后,由数据节点上报,动态建立

  命名节点的磁盘目录文件结构:

    由${dfs.name.dir}制定,有三个目录和一个文件:

      1 current:保存命名空间镜像和编辑日志,它有4个文件

        1 fsimage:元数据镜像文件

        2 edits:日志文件

        3 fstime:保存了最近一次检查点的时间,检查点一般由第二名字节点产生,是一次fsimage和edits合并的结果

        4 VERSION:名字节点存储的一些属性

      2 image:防止不兼容当前目录结构的名字节点的误启动

      3 previous.checkpoint:保存名字节点的上一次检查点,它的目录结构和current目录是一致的

      4 in_use.lock:保证名字节点独占使用该目录

  第二名字节点:

    它定期获取合并名字节点上的命名空间镜像和编辑日志,生成新的命名空间镜像,然后上传名字节点原有镜像,清空编辑日志

  名字节点的启动:

    1 名字节点加载命名空间镜像,并应用镜像编辑日志,会创建一个新的检查点,开始监听IPC和HTTP请求。

      虽然已经对外提供服务,但是只提供一个只读视图,这种名字节点的只读模式成为安全模式

    2 处理数据节点启动时的若干远程调用,建立名字节点第二关系,需要一些时间,使名字节点获得足够多的数据节点

    3 收集足够的第二关系信息后,名字节点会离开安全模式,进入正常工作状态,允许客户端和系统自身对文件系统进行修改

  HDFS安全模式的总结如下:

    1 处于安全模式下,HDFS只提供系统的只读视图,不能进行修改

    2 名字节点启动时,根据配置,检查第二关系中数据块的副本信息,满足条件时离开安全模式

    3 通过命令行支持安全模式状态查询、等待和设置

posted @ 2014-04-14 16:05  褐色键盘  阅读(222)  评论(0)    收藏  举报