对于一个企业大数据应用来说,搞定了大数据存储基本上就解决了大数据应用最重要的问题。Google 三驾马车的第一驾是GFS,Hadoop最先开始设计的就是HDFS,可见分布式存储的重要性,整个大数据生态计算框架多种多样,但是大数据的存储却没有太大的变化,HDFS依旧是众多分布式计算的基础。当然HDFS也有许多缺点,一些对象存储等技术的出现给HDFS的地位带来了挑战,但是HDFS目前还是最重要的大数据存储技术,新的计算框架想要获得广泛应用依旧需要支持HDFS。大数据数据量大、类型多种多样、快速的增长等特性,那么HDFS是如何去解决大数据存储、高可用访问的了?
Hadoop分布式文件系统的设计目标就是把数以千计的服务器管理起来,将这么大规模的服务器当作一个分布式文件系统进行管理,以提供PB存储容量应对大量数据的存储,同时供计算框架和上层应用提供服务,可以像普通文件系统一样存储、访问大规模的文件数据。具体的实现是将数据进行分块后进行并行的存储以及冗余存储,如下系统架构:
图中hdfs中有两个关键组件,一个是Namenode负责对分布式文件系统元数据的管理,存储了文件名、路径、副本数量、数据块id以及存储的Datanode节点等信息,另一个是Datanode节点,负责文件数据的存储和读写操作,HDFS将文件数据分割成若干数据块,每个DataNode存储一部分数据块,这样文件就分布存储在整个HDFS服务器中。
从hdfs系统架构就可以看出,通过将大文件切分成小的数据块存储到不同服务器上,可以实现一个大文件的存储,同时通过联合多个服务器多块硬盘实现整个存储系统的大容量,大文件的分片存储,不同分片可以进行并行读写操作,进而实现数据的高速访问。
在一个分布式系统中,节点失效是比较常见的,在HDFS系统中不可避免的遇到网络问题、磁盘故障、DataNode节点故障、Namenode节点故障,那么HDFS是如何应对这些问题,保障系统的高可用的了。
首先我们来看下数据存储的故障容错,这块主要是磁盘介质,存储数据可能会出现错乱,这个HDFS主要会对存储在DataNode上的数据块,计算并存储校验和,并计算Datanode读取数据的校验和,如果异常就会转而去读取其他DataNode节点的备份数据。
其次,节点故障,磁盘,HDFS节点故障主要是通过心跳机制,DataNode会定期通过心跳去NameNode保持联系,Namenode监测到DataNode超时没有心跳后,就会查其元数据,通知其他节点复制失效节点上的数据块到其他服务器上,保证副本数量,磁盘故障的话DataNode也是类似处理,DataNode检测到磁盘故障后,将故障快反馈给namenode进行数据块复制。
接着NameNode鼓掌容错,作为HDFS核心节点,记录着HDFS文件分配表信息,所有的文件路径和数据块存储信息都保存在NameNode上,NameNode故障将导致整个集群的不可用,HDFS设计采用主从热备提高系统的可用性。
在文件操作中,NameNode负责文件元数据的操作,DataNode负责处理文件的读写请求,文件数据流不会经过NameNode的处理,只会跟存储在具体DataNode进行联系,因此NameNode不会成为系统的瓶颈,成百上千台DataNode节点应对文件内容数据流的读写,其吞吐量大大提高了。
数据访问延时较长,数据以分块的方式存储在磁盘当中,读取需要经过Namenode到DataNode网络访问流程,以及磁盘寻址的过程,不如内存缓存访问高效以及不如关系型数据库利用索引加快数据访问特性。
不适合大量小文件存储,小文件太多造成文件元数据过多,超出了NameNode的处理能力,容易造成NameNode的瓶颈。
文件写入支持单一,只支持追加文件,不支持随机文件写入以及文件更新。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。