失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Hadoop大数据原理(2) - 分布式文件系统HDFS

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

时间:2023-12-02 20:17:17

相关推荐

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

文章目录

1. 数据存储问题2. RAID技术的原理和思路2.1 常用RAID的原理介绍2.2 RAID间的性能比较 3. 大数据时代的分布式文件系统3.1 HDFS的稳固地位3.2 HDFS的技术架构核心组件 3.3 HDFS的高可用设计数据存储故障容错磁盘故障容错DataNode故障容错NameNode故障容错 3.4 HDFS保证系统可用性的策略冗余备份失效转移限流降级

1. 数据存储问题

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

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

2. RAID技术的原理和思路

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

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

2.1 常用RAID的原理介绍

RAID0

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

下面是数据存储的示例:

RAID1

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

下面是数据存储的示例:

RAID10

RAID10结合了RAID0和RAID1的方案:

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

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

下面是数据存储的示例:

RAID3

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

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

RAID5

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

下面是数据存储的示例:

RAID6

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

下面是数据存储的示例:

2.2 RAID间的性能比较

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

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:

核心组件

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保证系统可用性的策略

冗余备份

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

失效转移

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

限流降级

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

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

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

参考文章

/hadoop/i1la1jyc.htmlhttps://pennywong.gitbooks.io/hadoop-notebook/content/introduction.html/qq_21127151/article/details/118449568

如果觉得《Hadoop大数据原理(2) - 分布式文件系统HDFS》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。