Hadoop大数据原理(2) - 分布式文件系统HDFS

1. 数据存储问题

  大数据技术主要是要解决大规模数据的计算处理问题,但是我们要想对数据进行计算,首先要解决的其实是大规模数据的存储问题。

  在单机时代,如果需要保存文件的大小超过了我们计算机磁盘的大小,如何存储呢?主要的解决方案是通过RAID,对于文件存储,一般考虑数据存储的容量、数据的读写速度、数据的可靠性这3个问题,下面我们先对RAID的相关技术进行介绍。

2. RAID技术的原理和思路

  RAID(独立磁盘冗余阵列)技术是将多块普通磁盘组成一个阵列,共同对外提供服务。主要是为了改善磁盘的存储容量、读写速度,增强磁盘的可用性和容错能力。在 RAID 之前,要使用大容量、高可用、高速访问的存储系统需要专门的存储设备,这类设备价格要比 RAID 的几块普通磁盘贵几十倍。

  目前的服务器支持插入多块硬盘,通过RAID技术来实现数据在多块磁盘上的并发读写和数据备份,下面简单介绍常见的几种RAID技术。

2.1 常用RAID的原理介绍

  • RAID0

  RAID0是数据在从内存缓冲区写入磁盘时,根据磁盘数量将数据分成N份,这些数据同时并发写入 N 块磁盘,使得数据整体写入速度是一块磁盘的N倍;读取的时候也一样,因此RAID0具有极快的数据读写速度。但是RAID0不做数据备份,N块磁盘中只要有一块损坏,数据完整性就被破坏,其他磁盘的数据也都无法使用了。

  下面是数据存储的示例:

磁盘1 磁盘2 磁盘3
D a t
a
  • RAID1

  RAID1是数据在写入磁盘时,将一份数据同时写入两块磁盘,这样任何一块磁盘损坏都不会导致数据丢失,插入一块新磁盘就可以通过复制数据的方式自动修复,具有极高的可靠性。

  下面是数据存储的示例:

磁盘1 磁盘2
D D
a a
t t
a a
  • RAID10

  RAID10结合了RAID0和RAID1的方案:

  • 将所有磁盘N平均分成两份,数据同时在两份磁盘写入,相当于 RAID1;
  • 在每一份磁盘里面,利用 RAID0技术并发读写;

  这样既提高可靠性又改善性能。但RAID10的磁盘利用率较低,一半的磁盘用来备份数据。

  下面是数据存储的示例:

磁盘1 磁盘2 磁盘3 磁盘4
D D a a
t t a a
  • RAID3

  RAID3可以在数据写入磁盘的时候,将数据分成N-1份,并发写入N-1块磁盘,并在第N块磁盘记录校验数据,这样任何一块磁盘损坏(包括校验数据磁盘),都可以利用其他N-1块磁盘的数据修复。

  这种技术方案会对第N块磁盘上频繁写入,会造成这块磁盘更容易损坏,需要频繁更换,不是一个好的解决方案。

  • RAID5

  在RAID3方案的基础上,RAID5将校验数据固定写入第N块磁盘改为螺旋写入所有磁盘,这样就解决了RAID3方案中第N块磁盘频繁写导致容易损坏的问题。

  下面是数据存储的示例:

磁盘1 磁盘2 磁盘3
D a P
t P a
  • RAID6

  当数据需要更高可靠性的时候,出现同时损坏2块磁盘的情况下,仍然需要进行数据修复,就可以考虑使用RAID6了,数据只写入N-2块磁盘,使用2块磁盘螺旋式写入校验信息,两块磁盘上的校验信息使用不同的算法生成。

  下面是数据存储的示例:

磁盘1 磁盘2 磁盘3 磁盘4
D a P Q
t P Q a

2.2 RAID间的性能比较

  下表为N块相同磁盘数下,各RAID的情况比较:

RAID类型 访问速度 数据可靠性 磁盘利用率
RAID0 很快 很低 100%
RAID1 很慢 很高 50%
RAID10 中等 很高 50%
RAID5 较快 较高 (N-1)/N
RAID6 较快 较(RAID5)高 (N-2)/N

3. 大数据时代的分布式文件系统

  在计算机领域,提高算力和数据存储能力有2种思路,一种是升级计算机,也就是我们说的垂直伸缩,包括升级CPU、内存、磁盘等将1台计算机变得更强大,另外一种就是用分布式文件系统,称为水平伸缩,添加更多的计算机到系统中来提高算力。

  上一篇文章也提到过,互联网公司现在都水平伸缩的道路,这就是近十年引导技术潮流的分布式与大数据技术。

  实际上,将RADI的思想原理应用到分布式集群中,就形成了Hadoop分布式文件系统HDFS的架构思想。

3.1 HDFS的稳固地位

  Google大数据三驾马车,第一驾就是GFS(Google文件系统),Hadoop的第一个产品就是HDFS,分布式文件存储是分布式计算的基础。

  HDFS作为最早的大数据存储系统,存储了各种数据资产,无论什么样的新技术,要想得到人们的广泛使用,必须支持HDFS才能够获取里面存储的数据,虽然HDFS不一定是最好的大数据存储技术,但它一定是最重要的大数据存储技术。

3.2 HDFS的技术架构

  Hadoop分布式文件系统HDFS的设计目标是管理数以千计的服务器和磁盘,将大规模的服务器计算资源当作一个单一的存储系统进行管理,对应用程序提供数以PB计的存储容量,让应用程序像使用普通文件系统一样存储大规模的文件数据。

  和RAID在多个磁盘上进行文件存储及并行读写的思路一样,将设计思想扩大到整个分布式服务器集群,就是HDFS的核心原理。HDFS部署在服务器集群上,集群中所有服务器的磁盘都可供HDFS使用。

  下图是HDFS的架构图,其中包含2个关键组件DataNode和NameNode:
Hadoop-HDFS-架构图

核心组件

  • DataNode

  NameNode负责文件数据的存储和读写,HDFS将文件数据分割成若干数据块(Block),每个DataNode存储一部分数据块,这样文件就分布存储到整个HDFS服务集群中了。

  应用程序可对其进行数据访问,并且在集群中对数据并行访问,提高访问速度。

  • NameNode

  NameNode负责整个分布式文件系统的元数据管理,包含了:文件路径名、数据块的ID和存储位置信息,这样就能够根据NameNode找到存储在DataNode中对应的数据了。

3.3 HDFS的高可用设计

  HDFS为了保证数据的高可用,会将一个数据块复制为多份(缺省情况为 3 份),并将多份相同的数据块存储在不同的服务器上,甚至不同的机架上。这样当有磁盘损坏,或者某个DataNode服务器宕机,甚至某个交换机宕机,导致其存储的数据块不能访问的时候,客户端会查找其备份的数据块进行访问。

  下面从不同的层面详细介绍一下HDFS的高可用设计。

数据存储故障容错

  对存储在DataNode上的数据块,计算并存储校验和(CheckSum),读取数据的时候,重新计算读取出来的数据的校验和,正确表示数据正常。

磁盘故障容错

  如果DataNode监测到本机的某块磁盘损坏,将该块磁盘上存储的所有BlockID报告给NameNode,NameNode检查这些数据块还在哪些DataNode上有备份,通知相应的DataNode服务器将对应的数据块复制到其他服务器上,保证数据块的备份数满足要求。

DataNode故障容错

  DataNode通过心跳和NameNode保持通信,如果DataNode超时未发送心跳,NameNode就会认为这个DataNode已经宕机失效,立即查找这个DataNode上存储的数据块,通知其他存放相同数据块的服务器复制一份数据块到其他服务器上,保证HDFS存储的数据块备份数符合用户设置的数目。

NameNode故障容错

  根据以上介绍能够看出,NameNode是HDFS的核心,所以对NameNode采用主从热备的方式提供高可用服务,通过ZooKeeper选举,争夺znode锁资源,获得主服务器资格,DataNode会相2个NameNode同时发生心跳,只有主NameNode才能向DataNode返回控制信息。

  正常运行期间,主从NameNode之间通过一个共享存储系统shared edits来同步文件系统的元数据信息。当主NameNode服务器宕机,从NameNode会通过ZooKeeper升级成为主服务器,并保证HDFS集群的元数据信息,也就是文件分配表信息完整一致。

3.4 HDFS保证系统可用性的策略

冗余备份

  任何的程序、数据,都至少要有一个备份,规模大的互联网企业甚至有多个数据中心,进行除了跨服务器的备份,还进行跨数据中心的备份,这也是所谓的异地多活。

失效转移

  当要访问的程序或者数据无法访问时,需要将访问请求转移到备份的程序或者数据所在的服务器上。

限流降级

  当大量的用户请求或者数据处理请求到达的时候,由于计算资源有限,可能无法处理如此大量的请求,进而导致资源耗尽,系统崩溃。拒绝部分请求称为限流,关不部分功能减少消耗称为降级。

  限流是互联网应用的常备功能,因为超出负载能力的访问流量在何时会突然到来,你根本无法预料,所以必须提前做好准备,当遇到突发高峰流量时,就可以立即启动限流。

  降级通常是为可预知的场景准备的,比如电商的“双十一”促销,为了保障促销活动期间应用的核心功能能够正常运行,比如下单功能,可以对系统进行降级处理,关闭部分非重要功能,比如商品评价功能。


  参考文章

猜你喜欢

转载自blog.csdn.net/initiallht/article/details/124720314