hdfs 文档存储服务器,HDFS分布式文档系统

HDFS(Hadoop Distributed File System) 分布式文档系统

HDFS 的关键组件有两个 Datanode 和 NameNode

1.DataNode

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

2.NameNode

负责整个分布式文档系统的元数据(MetaData)管理,也就是文档路径名、数据块的 ID 以及存储位置等信息,相当于操作系统中文档分配表(FAT)的角色。HDFS 为了保证数据的高可用,会将一个数据块复制为多份(缺省情况为 3 份)

HDFS 如何保证存储的高可用性

1.数据存储故障容错

磁盘介质在存储过程中受环境或者老化影响,其存储的数据可能会出现错乱。HDFS 的应对措施是,对于存储在 DataNode 上的数据块,计算并存储校验和(CheckSum)。在读取数据的时候,重新计算读取出来的数据的校验和,如果校验不正确就抛出异常,应用进程捕获异常后就到其他 DataNode 上读取备份数据。

2.磁盘故障容错

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

3.DataNode 故障容错

DataNode 会通过心跳和 NameNode 保持通信,如果 DataNode 超时未发送心跳,NameNode 就会认为这个 DataNode 已经宕机失效,立即查找这个 DataNode 上存储的数据块有哪些,以及这些数据块还存储在哪些服务器上,随后通知这些服务器再复制一份数据块到其他服务器上,保证 HDFS 存储的数据块备份数符合用户设置的数目,即使再出现服务器宕机,也不会丢失数据。

4.NameNode 故障容错

NameNode 采用主从热备的方式提供高可用服务

集群部署两台 NameNode 服务器,一台作为主服务器提供服务,一台作为从服务器进行热备,两台服务器通过 ZooKeeper 选举,主要是通过争夺 znode 锁资源,决定谁是主服务器。而 DataNode 则会向两个 NameNode 同时发送心跳数据,但是只有主 NameNode 才能向 DataNode 返回控制信息。

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

HDFS 是如何通过大规模分布式服务器集群实现数据的大容量、高速、可靠存储、访问的。

1.文档数据以数据块的方式进行切分,数据块可以存储在集群任意 DataNode 服务器上,所以 HDFS 存储的文档可以非常大,一个文档理论上可以占据整个 HDFS 服务器集群上的所有磁盘,实现了大容量存储。

2.HDFS 一般的访问模式是通过 MapReduce 进程在计算时读取,MapReduce 对输入数据进行分片读取,通常一个分片就是一个数据块,每个数据块分配一个计算进程,这样就可以同时启动很多进程对一个 HDFS 文档的多个数据块进行并发访问,从而实现数据的高速访问。关于 MapReduce 的具体处理过程,我们会在专栏后面详细讨论。

3.DataNode 存储的数据块会进行复制,使每个数据块在集群里有多个备份,保证了数据的可靠性,并通过一系列的故障容错手段实现 HDFS 系统中主要组件的高可用,进而保证数据和整个系统的高可用。

常用的保证系统可用性的策略

1.冗余备份

任何进程、任何数据,都至少要有一个备份,也就是说进程至少要部署到两台服务器,数据至少要备份到另一台服务器上。

2.失效转移

当要访问的进程或者数据无法访问时,需要将访问请求转移到备份的进程或者数据所在的服务器上,这也就是失效转移

3.降级限流

当大量的用户请求或者数据处理请求到达的时候,由于计算资源有限,可能无法处理如此大量的请求,进而导致资源耗尽,系统崩溃。这种情况下,可以拒绝部分请求,即进行限流;也可以关闭部分功能,降低资源消耗,即进行降级

你可能感兴趣的:(hdfs,文档存储服务器)