从 0 开始学大数据
李智慧
同程艺龙交通首席架构师,前 Intel 大数据架构师,《大型网站技术架构》作者
71151 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
智慧写给你的寄语 (1讲)
从 0 开始学大数据
15
15
1.0x
00:00/00:00
登录|注册

06 | 新技术层出不穷,HDFS依然是存储的王者

用户安装App存储个人资料并共享空闲存储空间
设计分布式文件系统利用全世界的个人设备上的空闲存储空间
降级限流
失效转移
冗余备份
NameNode故障容错:主从热备方式提供高可用服务
DataNode故障容错:数据块复制到其他服务器
磁盘故障容错:数据块复制到其他服务器
数据存储故障容错:存储校验和、备份数据块
实现数据的并行访问,提高访问速度
文件数据分割成数据块,存储在不同DataNode上
NameNode负责整个分布式文件系统的元数据管理
DataNode负责文件数据的存储和读写操作
关键组件:DataNode, NameNode
实现大规模的文件数据存储
对应用程序提供数以PB计的存储容量
管理数以千计的服务器、数以万计的磁盘
思考题
系统可用性策略
高可用设计
数据块存储
HDFS架构
HDFS设计目标
HDFS存储原理

该思维导图由 AI 生成,仅供参考

我们知道,Google 大数据“三驾马车”的第一驾是 GFS(Google 文件系统),而 Hadoop 的第一个产品是 HDFS,可以说分布式文件存储是分布式计算的基础,也可见分布式文件存储的重要性。如果我们将大数据计算比作烹饪,那么数据就是食材,而 Hadoop 分布式文件系统 HDFS 就是烧菜的那口大锅。
厨师来来往往,食材进进出出,各种菜肴层出不穷,而不变的则是那口大锅。大数据也是如此,这些年来,各种计算框架、各种算法、各种应用场景不断推陈出新,让人眼花缭乱,但是大数据存储的王者依然是 HDFS。
为什么 HDFS 的地位如此稳固呢?在整个大数据体系里面,最宝贵、最难以代替的资产就是数据,大数据所有的一切都要围绕数据展开。HDFS 作为最早的大数据存储系统,存储着宝贵的数据资产,各种新的算法、框架要想得到人们的广泛使用,必须支持 HDFS 才能获取已经存储在里面的数据。所以大数据技术越发展,新技术越多,HDFS 得到的支持越多,我们越离不开 HDFS。HDFS 也许不是最好的大数据存储技术,但依然最重要的大数据存储技术
那我们就从 HDFS 的原理说起,今天我们来聊聊HDFS 是如何实现大数据高速、可靠的存储和访问的
Hadoop 分布式文件系统 HDFS 的设计目标是管理数以千计的服务器、数以万计的磁盘,将这么大规模的服务器计算资源当作一个单一的存储系统进行管理,对应用程序提供数以 PB 计的存储容量,让应用程序像使用普通文件系统一样存储大规模的文件数据。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

HDFS作为大数据存储的核心技术,以其高速、可靠和高可用的特点,稳固地占据着重要地位。文章从HDFS的设计目标出发,介绍了其实现大数据高速、可靠存储和访问的原理。通过将文件数据分割成数据块并在分布式服务器集群上进行并行读写和冗余存储,HDFS实现了PB级存储容量和高速访问。此外,文章还详细阐述了HDFS的高可用设计,包括数据存储故障容错、磁盘故障容错、DataNode和NameNode故障容错等方面。通过校验和、数据块复制和主从热备等策略,HDFS保证了数据的高可用性,为分布式系统的稳定运行提供了重要保障。总之,HDFS以其高速、可靠和高可用的特点,依然是大数据存储的不可或缺的技术基石。 HDFS通过大规模分布式服务器集群实现数据的大容量、高速、可靠存储和访问。文件数据以数据块的方式进行切分,存储在集群任意DataNode服务器上,实现了大容量存储。HDFS一般的访问模式是通过MapReduce程序在计算时读取,实现数据的高速访问。DataNode存储的数据块会进行复制,保证了数据的可靠性,并通过一系列的故障容错手段实现HDFS系统的高可用。思考题则提出了构建一个可以付费共享的分布式文件系统的场景,鼓励读者思考如何设计这个分布式文件系统。 如果我来设计这个分布式文件系统,我会考虑如何确保数据的安全性和隐私保护,以及如何建立公平的收费机制。同时,我会思考如何实现高效的数据存储和访问,以及如何处理设备故障和数据丢失的情况。我的设计方案将包括数据加密、备份策略、用户权限管理、智能负载均衡等方面的考虑,以确保系统的稳定性和可靠性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学大数据》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(96)

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

    作者回复: 很周全

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

    作者回复: 想的很周全

    2018-11-12
    43
  • 牛油果
    讲技术不讲技术脉络的也都是流氓啊。那些去中心化存储的区块链项目,就没谁写出去中心存储应是借鉴或发展于hdfs等分布式存储方案。raid到hdfs立马好理解多了。我是看过ipfs,storj,sia等几个去中心化的存储方案。通过看今天的内容,我突然感觉开窍了,他们整得太复杂了,基于hdfs加上存储时空证明就能实现去中心化存储,实现高可用的技术细节考虑的当然不同了,而存储时空权益就把终端的高可用工作分散到具体用户了。当然,namenode是中心化部署还是代理节点部署还是要考虑一下。另,通过用户贡献的存储时长和空间换来的受益,这对用户的约束可能会随时间变化而减少,进而存储的可用性是不稳定的,但这里我想了两个方案:1,用户贡献出来的资源是为了储值的,获得权益是要零存整取,加大惩罚成本(这个估计他们实际做的会想到,我当时看时反正没看到);2,整个分布式系统加一套蓝光备份系统,这种低成本数据存储方案是对要求高可用数据的备选项。

    作者回复: 深刻👍🏻

    2018-11-21
    14
  • 朱国伟
    关于DataNode 故障容错感觉处理起来好复杂啊 假设numReplicas=2 由于机器故障导致DataNode 1宕机 此时为了保证numReplicas=2会复制数据 像下面的情况怎么处理呢 - 等全部复制完了 DataNode1重启了 那此时numReplicas=3 这种情况会处理吗? - 或者复制到一半(即有些Block还没来得及复制) DataNode1重启了 这种情况又怎么办 - 或者集群勉强够用 实在没有多余的机器来复制DataNode1对应的数据了 又该如何 并且要是掉电或是网络异常 可能不是一个DataNode宕机 可能是怎个机架整个机房的DataNode的都宕机了

    作者回复: DataNode即使重启也认为其上的数据已经丢失,不会再使用。

    2018-11-10
    2
    11
  • 张晓生
    如果在一台nameNode服务器元数据有修改但是还没来得及热备到从nameNode服务器,这个时候刚好主nameNode服务器挂了,zookeeper选举出新的主服务器(之前的从节点),就会造成当前的主nameNode节点数据不正确。请问这种问题怎么解决呢?

    作者回复: NameNode在本地有操作日志,可以利用这个日志进行恢复操作,但是前提是原来的主NameNode的硬盘没坏,还有就是恢复需要时间。

    2019-01-16
    10
  • wmg
    类似于hdfs的机制,只不过将用户设备作为datanode,namenode是中心化的(否则和区块链就比较类似)。有几个问题需要考虑:1.用户设备存储空间有限,所以block的大小不能太大;2.由于block不能太大所以元数据会比较大,对namenode存储空间要求较高;3.由于datanode是不可信的,所以需要对datanode设计身份识别机制,存储的数据也必须是加密,副本数量也要设置的多一些;4.由于所有的datanode都需要和namenode通信,所以datanode的数量会有限制,这样就限制了整个集群的存储空间,可以考虑多集群的方式,用户注册的时候利用负载平衡算法将用户划分到其中一个集群。暂时想到这么多,请老师指教。

    作者回复: 很赞,不过NameNode不应该是存储空间的制约,该怎么办?

    2018-11-12
    7
  • 这个思考题的实现思路是和IPFS的实现思路应该一样的

    作者回复: 是的

    2018-11-10
    7
  • 阿文
    请问下,数据报错转到其他 DataNode 上读取备份数据。这个过程需要 经过 NameNode 吗?

    作者回复: 设计上是不需要的,client开始访问NameNode的时候已经获取了所有副本的信息,一个副本出错,client可以自己决定是否切换其他副本。 实现中client应该需要向NameNode汇报错误,NameNode可以据此修正出错的副本。

    2021-06-29
    3
  • 极无宪
    如果 DataNode 监测到本机的某块磁盘损坏,就将该块磁盘上存储的所有 BlockID 报告给 NameNode? 如果已经损坏了,DataNode怎么获取到BlockID的,BlockID与数据不是存在一起的吗?

    作者回复: 不是

    2020-01-14
    3
  • 谢烟客
    既然 DataNode 已经完成了冗余备份了,是不是我们就可以在 DataNode 节点的存储选用上使用 raid0 提升一下性能呢?

    作者回复: 没有必要,DataNode已经是对多个数据块并行访问磁盘,所以无需raid0

    2018-11-15
    3
收起评论
显示
设置
留言
96
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部