HDFS分布式文件系统简介

分布式文件系统:

   分布式文件系统管理的屋里存储资源不一定直接在本地节点上,而是通过计算机网络与节点相连。

   分布式文件系统的基于客户机/服务器模式。通常,一个分布式文件系统提供多个供公户访问的服务器。

   分布式文件系统一般都会提供备份和容错功能。

   分布式文件系统一般都基于操作系统的本地文件系统

分布式文件系统的优点:

   -传统 文件系统最大问题是容量和吞吐量的限制。

   -多用户多应用的并行读写是分布式文件系统产生的根源。

   -扩充存储空间的成本低廉

   -可提供冗余备份

   -可以为分布式计算提供基础

HDFS是一个使用java实现的,分布式的,可横向扩展的文件系统。

       HDFS= Hadoop Distributed File System

       hadoop的核心组件

       基于linux


HDFS设计目标:

     -基于廉价的普通硬件,可以容忍硬件出错

系统中的某一台或几台服务器出现故障的时候,系统仍可用且数据保持完整。

     -大数据集(大文件)

      HDFS适合存储大量文件总存储量可以达到PB,EB

      HDFS适合存储大文件,单个文件大小一般在百MB级之上

      文件数目适中

     -简单的一致性模型

      HDFS应用程序需要一次写入,多次读取一个文件的访问模式

      支持追加操作,但无法更改已写入数据

     -顺序的数据流访问

       HDFS适合用于处理批量数据,而不适合用于随机定位访问

     -侧重高吞吐量的数据访问,可以容忍数据访问的高延迟

       “计算”移动到“数据”提供基础和便利。


HDFS基本概念:

     -

     -元数据

     -namenode

     -datanode

     -客户端

block)的概念

     -在传统的块存储介质中,块是读写的最先数据单位(扇区)

     -传统文件系统基于存储块进行操作

     -HDFS也使用了块的概念,但是默认大小设为64M字节

     -HDFS将一个文件分为一个或数个块来存储

     -与传统文件系统不同的是,如果实际数据没有达到块大小,则并不实际占用磁盘空间

使用块的优点:

    -当一个文件大于进群中的任意一个磁盘的时候,文件系统可以充分利用集群中的所有的磁盘

    -管理块是底层的存储子系统相对简单

    -块更加适合备份,从而为容错和高可用性的实现带来方便

HDFS的元数据(数据信息):

    -元数据包括

      1,文件系统和目录树信息

      2,文件和块的对应关系

      3,块的存放位置

    -HDFS对元数据和实际数据采取 分别存储的方法

      1,元数据存储在一台指定的服务器上(namenode

      2,实际数据存储在集群的其他机器的本地文件系统中(DataNode

块的冗余备份:

    -每个块在集群上回存储多分(replica

     1,默认复制分数为3

     2,可针对每个文件配置,

     3,可针对每个文件配置,由客户端指定

     4,可动态修改

    -某个块的所有备份都是同一个ID

    -系统可以根据机架的配置自动分配备份位置

    1,第一份在集群的某个几家的某台机器上

    2,其他两份在另外的一个几家的两台机器上

    3,机架信息需要手工配置

NameNode

    -namenode是用来管理文件系统命名空间的组件

    -一个HDFS集群只有一台Namenode

    -namenode上存放了HDFS的元数据

    -元数据保存在namenode的内存当中,以便快速查询

      1,1G内存大致可以存放1000000个块对应的元数据信息

      2,按缺省每块64M计算,大致对应64T实际数据

DataNode

     -块的实际数据存放在DataNode

     -每个块会在本地产生两个文件,一个是实际的数据文件,另一个是块的附加信息文件,其中还包括数据的校验和生成时间。

     -DataNode通过心跳包(heartbeat)与 namenode通讯

     -客户端读取/写入数据的时候直接与DataNode通信

元数据的持久化:

     -namenode里使用两个非常重要的本地文件来保存元数据信息:

     1fsimage:保存了文件系统目录树信息,保存了文件和块的对应关系

     2edits:保存文件系统的更改记录,客户端对文件进行写操作时,操作首先记入edits,成功后才会更改内存中的数据,并不会立刻更改硬盘上的fsimage

    -块的位置信息并不做持久化


元数据的载入和更新:

    -namenode启动时:

1,通过fsimage读取元数据,载入内存

    2,执行edits中的记录,在内存中生成最新的元数据

    3,清空edits,保存最新的元数据到fsimage

    4,收集DataNode汇报的块的位置信息

    -namenode运行时:

1,对文件创建和写操作记录到edits

    2,更新内存中的元数据

    3,收集DataNode汇报块的创建和复制信息

HDFS创建文件流程:

    -客户端:1,客户端请求namenode在命名空间中建立新的文件元信息

             2,如果不能创建文件则namenode会返回失败

             3,如创建成功,客户端得到此文件的 写保护锁

    -namenode

     1namonode检查集群和文件状态

     2,创建写保护锁保证只有一个客户端在操作该文件

     3,建立该文件的元信息

     4,把创建文件这个事件加入edits

     5,位该文件分配块,以及块的冗余备份位置

HDFS写操作流程(重点):

     -客户端个文件并不是直接写到HDFS

     -HDFS客户端接收用户数据,并把内容缓存到本地

     -当本地缓存收集足够一个HDFS块大小的时候,客户端同namenode通讯注册一个新的块

     -注册块成功后,namenode会给客户端返回一个DataNode的列表(块的位置,冗余备份)

     -客户端向列表第一个DataNode写入块

     -收到DataNode的确认信息后,客户端删除本地缓存

     -客户端继续 发送下一个块,重复以上步骤

     -当所有数据发送完成后,写操作完成

HDFS的读操作流程:

     -客户端与namenode通讯获取文件的块位置信息,其中包括了块的所有冗余备份的位置信息,DataNode的列表

     -客户端回去文件位置信息后直接同有文件块的DataNode通讯,读取文件

     -如果第一个DataNode无法连接,客户端将自动联系下一个DataNode

     -如果块数据的校验值出错,则客户端需要向namenode报告,并自动联系下一个DataNode

HDFS追加写(append)的操作流程:

     -客户端与namenode通讯,获得文件的写保护锁及文件最后一个块的位置(DataNode

     -客户端挑选一个DataNode作为主写入点,并对其余节点上的该数据块加锁。

     -开始写入数据:与普通写入流程类似,依次更新各个DataNode数据

     -最后一个块写满,并且所有备份块后写入完成后,向namenode申请下一个数据块

secondary namenode

     -secondary namenode不是备份节点

     -secondary namenode的主要工作是阶段性的合并fsimageedits文件,以此来控制edits的文件大小在合理的范围(缩短重启时namenode重建fsimage时间,做数据恢复,但不是全部)

     -secondary namenode运行在不同于namenode的主机上,内存需求和namenode一样。

猜你喜欢

转载自blog.csdn.net/zcb_data/article/details/81014757