《从0开始学大数据》之HDFS是如何实现大数据高速、可靠的存储和访问

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

HDFS 的架构图

图片来自极客时间课程《从0开始学大数据》
从图中你可以看到 HDFS 的关键组件有两个,一个是 DataNode,一个是 NameNode。
DataNode
负责文件数据的存储和读写操作,HDFS 将文件数据分割成若干数据块(Block),每个 DataNode 存储一部分数据块,这样文件就分布存储在整个 HDFS 服务器集群中。应用程序客户端(Client)可以并行对这些数据块进行访问,从而使得 HDFS 可以在服务器集群规模上实现数据并行访问,极大地提高了访问速度。在实践中,HDFS 集群的 DataNode 服务器会有很多台,一般在几百台到几千台这样的规模,每台服务器配有数块磁盘,整个集群的存储容量大概在几 PB 到数百 PB。NameNode
负责整个分布式文件系统的元数据(MetaData)管理,也就是文件路径名、数据块的 ID 以及存储位置等信息,相当于操作系统中文件分配表(FAT)的角色。HDFS 为了保证数据的高可用,会将一个数据块复制为多份(缺省情况为 3 份),并将多份相同的数据块存储在不同的服务器上,甚至不同的机架上。这样当有磁盘损坏,或者某个 DataNode 服务器宕机,甚至某个交换机宕机,导致其存储的数据块不能访问的时候,客户端会查找其备份的数据块进行访问。

数据块多份复制存储的示意

图片来自极客时间课程《从0开始学大数据》
图中对于文件 /users/sameerp/data/part-0,其复制备份数设置为 2,存储的 BlockID 分别为 1、3。Block1 的两个备份存储在 DataNode0 和 DataNode2 两个服务器上,Block3 的两个备份存储 DataNode4 和 DataNode6 两个服务器上,上述任何一台服务器宕机后,每个数据块都至少还有一个备份存在,不会影响对文件 /users/sameerp/data/part-0 的访问。

和 RAID 一样,数据分成若干数据块后存储到不同服务器上,可以实现数据大容量存储,并且不同分片的数据可以并行进行读 / 写操作,进而实现数据的高速访问。你可以看到,HDFS 的大容量存储高速访问相对比较容易实现。

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

NameNode 高可用容错能力非常重要。NameNode 采用主从热备的方式提供高可用服务。
图片来自极客时间课程《从0开始学大数据》
集群部署两台 NameNode 服务器,一台作为主服务器提供服务,一台作为从服务器进行热备,两台服务器通过 ZooKeeper 选举,主要是通过争夺 znode 锁资源,决定谁是主服务器。而 DataNode 则会向两个 NameNode 同时发送心跳数据,但是只有主 NameNode 才能向 DataNode 返回控制信息。正常运行期间,主从 NameNode 之间通过一个共享存储系统 shared edits 来同步文件系统的元数据信息。当主 NameNode 服务器宕机,从 NameNode 会通过 ZooKeeper 升级成为主服务器,并保证 HDFS 集群的元数据信息,也就是文件分配表信息完整一致。

小结

1.文件数据以数据块的方式进行切分,数据块可以存储在集群任意 DataNode 服务器上,所以 HDFS 存储的文件可以非常大,一个文件理论上可以占据整个 HDFS 服务器集群上的所有磁盘,实现了大容量存储。
2.HDFS 一般的访问模式是通过 MapReduce 程序在计算时读取,MapReduce 对输入数据进行分片读取,通常一个分片就是一个数据块,每个数据块分配一个计算进程,这样就可以同时启动很多进程对一个 HDFS 文件的多个数据块进行并发访问,从而实现数据的高速访问。关于 MapReduce 的具体处理过程,我们会在专栏后面详细讨论。
3.DataNode 存储的数据块会进行复制,使每个数据块在集群里有多个备份,保证了数据的可靠性,并通过一系列的故障容错手段实现 HDFS 系统中主要组件的高可用,进而保证数据和整个系统的高可用。

思考题

想象一个场景,我们想利用全世界的个人电脑、手机、平板上的空闲存储空间,构成一个可以付费共享的分布式文件系统,希望用户可以安装一个 App 在自己的个人设备上,将个人资料安全地存储到这个分布式文件系统中,并支付一定费用;用户也可以用这个 App 将自己设备上的空闲存储空间共享出去,成为这个分布式文件系统存储的一部分,并收取一定费用。如果是你来设计这个分布式文件系统,你是怎么思考的?你的设计方案是什么?

来自极客时间精选留言

大神1

听过本期音频,我想,在现实的条件下,实现这样的设想非常困难,例如:【1】用户空间(尤其是手机,iPad)不能保障高可用的性能,随时被访问被验证;【2】网络条件要求过高,尤其是被需求或者需要均衡时频繁的文件迁移;【3】要验证HDFS所有备份块的可用性,因此个人中端上不能过多不同用户,过碎的数据块;【4】为了保证系统的高效一般一块数据不会过小,要不然会浪费过多的计算资源(进程),如果单块数据在128M左右,自然会受到终端存储规模的制约【5】等等诸多隐患。因此,稳定的分布式端点还是必要的,不然文件将在诸多节点中频繁移动浪费大量的网络资源。【补】过于复杂的架构网络,对验证的响应延时也造成了麻烦。边走边打字暂时先想到这些😬

大神2

1、互联网上用户交分散,需要用CDN的模式,分层分区域部署NameNode,NameNode上数据汇总到上级,上级数据按需分发到下级。同一个区域的用户(DataNode)分配到同一个NameNode
2、用户DataNode机器可用性极差,按10%算,平均一个数据需要10个备份。不过可以有一定策略改进,比如让用户活跃时间跟用户等级挂钩,等级跟功能挂钩,以鼓励用户增加在线时间;存储数据可以分级别,高级别数据备份更多,可用性安全性速度更高,级别低备份少。
3、安全性考虑,其他用户存储在NameNode上的数据,不能被宿主机破解查看和修改
暂时想了这些,感觉再想下去要变成百度网盘或者迅雷了

该笔记摘录自极客时间课程
《从0开始学大数据》

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: HDFS的高可靠和容错性是通过数据的复制和分布式存储实现的。HDFS数据分成多个块,并将这些块存储在不同的节点上,以确保数据可靠性和容错性。当某个节点出现故障时,HDFS会自动将该节点上的数据复制到其他节点上,以保证数据可靠性和可用性。此外,HDFS还提供了数据校验和机制,以检测数据的完整性和一致性。 ### 回答2: HDFS(Hadoop分布式文件系统)的高可靠性和容错性是通过以下几种方式实现的。 首先,HDFS以分布式存储的方式保存文件。每个文件会被划分成一个或多个数据块,并复制到多个存储节点上。这种数据复制方式可以提高系统的可靠性。当某个存储节点发生故障时,系统可以自动从备份节点中获取数据,保证数据的可用性。 其次,HDFS采用主从架构,拥有一个主节点和多个从节点。主节点负责管理整个文件系统的命名空间和元数据信息,而从节点负责实际存储数据。如果主节点发生故障,系统可以通过选举机制在从节点中选举一个新的主节点,保证系统的连续性和可用性。 此外,HDFS实现数据完整性校验和错误检测机制。每个数据块都会计算一个校验和,存储在主节点的元数据中。在读取数据的过程中,系统会自动对数据块进行校验和的校验,以检测数据的一致性和完整性。如果校验和不匹配,则说明数据块已经损坏,系统会从其他副本中获取正确的数据。 最后,HDFS还支持快速故障恢复和自动负载均衡。当某个存储节点发生故障时,系统可以迅速从其他存储节点中获取备份数据,进行快速故障恢复。同时,系统还可以自动调整数据的分布,进行负载均衡,避免某个节点成为瓶颈。 总体来说,HDFS通过数据复制、主从架构、完整性校验和故障恢复机制等多种技术手段,实现了高可靠和容错性。这些机制保证了数据可靠存储和高可用性,使HDFS成为大规模数据处理的理想选择。 ### 回答3: HDFS(Hadoop分布式文件系统)的高可靠性和容错性是通过以下几个方面来实现的。 首先,HDFS采用了数据冗余的机制。它将文件切分成多个数据块,并将每个数据块复制到不同的机器上存储。默认情况下,HDFS将每个数据块复制三次,分别存储在不同的机架上的不同节点上。这样即使某个节点发生故障,也能够通过其他副本进行数据恢复,提高了系统的可靠性和容错性。 其次,HDFS具备自动故障检测和恢复的能力。它通过心跳机制来监控每个节点的状态,并及时检测到节点是否宕机或者故障。一旦检测到故障,HDFS会自动将故障节点上的数据块复制到其他副本,并将新的副本调度到可用的节点上,以保证数据可靠性和容错性。 另外,HDFS还支持数据块级别的校验和机制。每个数据块都有对应的校验和信息,用于检测数据传输或存储过程中的错误。当读取数据时,HDFS会自动验证校验和,如果校验和不匹配,则会从其他副本中获取正确的数据进行恢复。 此外,HDFS还支持快速的数据恢复机制。当某个节点宕机或者故障时,HDFS会优先选择与故障节点距离较近的节点来恢复数据,以减少数据传输的时间和网络开销,提高恢复的效率和可靠性。 综上所述,HDFS通过数据冗余、自动故障检测和恢复、数据校验和以及快速的数据恢复机制等多种方式,实现了高可靠性和容错性。这些机制能够有效地保护数据免受硬件故障或网络故障的影响,并提供高可靠性的分布式文件存储和处理能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值