大数据技术与原理--分布式文件系统HDFS

一:HDFS简介和相关概念:

HDFS是Hadoop的核心组件之一,负责大数据的分布式存储。随着现代数据量的增大,单台计算机无法存储海量的数据,

需要集群来存储数据。

HDFS实现的目标:

1:兼容廉价的普通机器,利用分布式文件系统底层可以是性能比较低的机器。

2:实现数据的流式读写。一次读取比较数据量比较大。全部读取或者大部分读取,不像传统文件系统读取某块数据。

3:支持大数据集。HDFS的文件数据量大的可以达到几个TB。

4:支持简单的文件模型:支持高效的读写效率。对文件进行简化,牺牲了文件的一些性能,获得快速处理的特性。HDFS

只允许追加数据,不允许修改数据。

5:具有很好的跨平台特性:java语言开发,具有很好的跨平台特性。

HDFS的局限性:

1:不适合低延迟数据访问,HDFS适合批量处理读取数据,如果需要访问一条很小的数据,需要读取很多的数据在进行

筛选,不适合实时数据请求。

2:无法高效存储大量的小文件,存储文件需要再名称节点的内存中建立文件的索引,如果文件大小过小,文件数量过

多的话,会在检索文件的时候带来性能的问题。

3:不支持多用户写入及修改文件。为了提高批量处理数据的需求,设计如此。

HDFS的相关概念:

HDFS中的块:与平时普通文件系统的块有联系和区别。联系:为了为了降低磁盘的寻址开销,都分块存储数据。普通的

文件一块的大小几KB,HDFS默认文件的块大小是64MB。块比较大的两个原因1支持大规模数据存储、2降低寻址开销。

HDFS寻址需要三级寻址:元数据目录->数据节点->取数据节点的数据。

HDFS文件分块的好处:

1突破单机存储容量的上线,可以把一个很大的文件切割成多少分,分别存储到不同的机器中。

以前很大的文件由于收到存储容量的限制不能很好的存储。现在通过HDFS可以实现。

2简化系统设计:一个块的大小固定,方便元数据的管理。

3适合数据备份。通过以块为单位进行存储,方便数据进行备份。

注意事项:块大小并不i是越大越好,因为MapReduce是根据HDFS块大小为基本处理单位的。如果块太大,会导致

MapReduce只有一两个任务在执行,失去了并行性的效果。

HDFS中的名称结点:

先用一张图来理解名称结点的作用:

HDFS的原理及架构 hdfs技术原理_结点

 

FsImage:以树型结构记录分布式文件系统文件的结构。通过它,可以知道整个文件系统的目录是什么样的。

FsImage主要包括:文件的复制等级,文件修改和访问的时间,文件快的大小,文件的访问权限。

FsImage在系统启动的时候把历史的元数据和EditLog中记录的对文件的操作结合起来,得到最新的元数据。同时创

建新的EditLog。EditLog:记录整个运行过程中对数据的创建,删除等操作。

在系统运行的过程中,在EditLog记录对数据(文件)的增删改查。

两者配合工作,为了降低FsImage的负担,EditLog记录对数据的操作。当系统重启的时候再把记录更新到FsImage。

需要事项:FsImage没有记录文件具体在那个数据节点存储的。这个文件的保存路径的信息单独在内存中的一块

区域维护。名称结点和数据节点不断地沟通,实时维护这个存储文件路径的信息。第二名称结点负责分担EditLog

的负担。

分担的过程:

  1. secondary NameNode通知所有数据结点不要发送日志到Editlog,而写到新的editNew中。
  2. secondary NameNode负责FsImage和旧的Editlog的合并,并把合并好的FsImage返回给名称结点。
  3. 名称结点把editNew变成editLog。

名称结点是HDFS中的主节点。充当HDFS系统的管家,负责整个系统的元数据的管理。比如有个几个TB的文件被分

割成好几个文件谁来记录和管理这些分割的数据呢?名称结点就起到了这个作用,负责记录这个分割文件的信息。名称

结点存储系统的元数据。

元数据记录的信息如下:

1:文件是什么。

2:这个文件被分成了多少块。

3:每个块和文件是怎么映射的。

4:每个块到底存储在哪个服务器上。

HDFS中的数据结点:

负责具体数据的存储,客户端拿到路径之后,是和HDFS中的数据结点交流。

负责具体存储实际数据

二:HDFS体系结构

HDFS采用主从的架构,主要对以下几个方面进行管理。

读写管理:

客户端要访问数据,首先和名称结点交流。获取元数据信息,从而确定要访问的数据具体放在那个结点上面。客户

端想要写数据,也要先和名称结点交流。比如分割一个很大的文件,比如一两个TB的文件,名称结点会确定要分成

多少个块以及块存储的位置。得到指令之后,客户端会把数据存储到对应的结点中。

命名空间的管理:

命名空间包括目录、文件、块。于访问传统文件结构的方式一样。

通讯协议:

各个组件的通讯协议构建在TCP/IP协议之上。客户端和名称结点的通讯采用TCP协议。名称结点和数据结点进行交互是

采用专门的数据结点协议进行交互。客户端取数据客户端与数据结点进行通信采用远程过程调用RPC实现。

HDFS体系结构的局限性:

命名空间保存再内存中,存在空间上限。存储文件规模的限制。

性能瓶颈:和客户端访问数据需要通过管家(名称结点)实现,性能吞吐量下降。

隔离问题:整个命名空间都保存在单个结点中,不同程序之间没有做到有效的安全隔离。

集群可用性:存在单点故障问题。需要注意的是:HDFS1.0版本的secondary namenode是冷备份,需要有时间恢复集群。

三:HDFS存储原理

1、冗余数据保存问题:

HDFS底层的机器是比较廉价的机器,很容易出故障。解决这种的方式就是数据的冗余保存。默认的冗余因子是3。即一份数

据有三份相同的数据,这样设置的好处有如下方面。

①加快访问速率:同时访问相同的数据时可以加快访问速率,并行访问相同的数据。

②容易检查数据错误:通过检查其它版本来确定数据的准确性。

③保证数据的可靠性:系统会周期性的探测数据的冗余数量是否符合配置的要求。

2、数据读写策略:

数据结点的存放问题(假设冗余因子时3):当有数据结点要写数据的时候,会有一份副本存在这个数据结点上。如果写请

求不是来亲自集群内部,则会选择一个磁盘不太慢,CPU不太忙的结点存储第一份副本。第二个副本会放置在和第一个副本

不同的机架上。第三个副本会放在第一个副本的机架的其它结点上。如果还有多余的副本,则随机算法进行放置。

读取数据的时候会根据API确定机架ID,客户端也可以确定要读数据的机架ID,算出哪个机架ID离自己进,则选择这个最近

的结点进行读取,如果没有则随机读取。

3、数据恢复问题:

名称结点出错:会有冷备份的名称结点进行备份恢复。在HDFS1.0中会暂停服务一段时间,当数据恢复之后重新提供服务。

数据结点出错:数据结点会通过发送心跳信息给名称结点。如果过一段时间没有给抿成结点发送消息,则名称结点会把

它标记为宕机,然后把数据复制分发到其他可用的数据上。复制的数据源可以根据名称结点从其它机器上获得。当负载不

均衡的时候也可以动态调整文件位置。

数据出错:通过校验码检验数据是否正确,写入数据的时候会写入数据和校验码,当读取数据的时候会读取数据和检验码。

计算检验码和读取的校验码是否一致,若一致,则数据正确。否则数据出错,根据其它副本进行数据恢复。

四:HDFS读写数据过程

两张图来理解HDFS读写数据的过程:

读数据过程:

HDFS的原理及架构 hdfs技术原理_HDFS_02

写数据过程:

HDFS的原理及架构 hdfs技术原理_HDFS的原理及架构_03