文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

HDFS是如何设计架构的?

2024-12-03 12:43

关注

前言

Hadoop到目前为止发展已经有10余年,版本经过无数次的更新迭代,目前业内大家把Hadoop大的版本分为Hadoop1.0、Hadoop2.0、Hadoop3.0 三个版本。

一、Hadoop 简介

Hadoop版本刚出来的时候是为了解决两个问题:一是海量数据如何存储的问题,一个是海量数据如何计算的问题。Hadoop的核心设计就是HDFS和 Mapreduce.HDFS解决了海量数据如何存储的问题, Mapreduce解决了海量数据如何计算的问题。HDFS的全称:Hadoop Distributed File System。

二、分布式文件系统

图片 HDFS其实就可以理解为一个分布式文件系统,可以看如图1所示有4个服务器是不是都有他自己的文件系统都可以进行存储数据,假设每个服务器的存储空间存储10G的数据。假设数据量很小的时候存储10G的数据还是ok的当数据量大于服务器的存储空间时是不是单个服务器就没法存储了。 我们是不是可以在服务器中部署一个Hadoop这样就能构建出一个集群(超级大电脑)。这样就存储 4*10=40G的数据量,这样我们面向用户时是不是只有一台超级大的电脑相当于一个分布式文件系统。

HDFS是一个主从的架构、主节点只有一个NemeNode。从节点有多个DataNode。

三、HDFS 架构

图片 假设我们这里有5台服务器每台服务器都部署上Hadoop,我们随便选择一台服务器部署上NameNode剩下服务器部署上DataNode。

客户端上传文件时假设文件大小为129MHDFS默认切分的大小为128M这时就会产生出2个blkNameNode去通知DataNode上传文件(这里有一定的策略),我们就假设就将这几个文件分别存储在4个服务器上。为什们要进行分别存储在,假设DataNode服务器有一天突然挂掉了我们是不是还可通过DataNode4或2和3进行读取数据,这样是不是就防止数据丢失。

NameNode

DataNode

SecondaryNamenode

周期性的到NameNode节点拉取Edtis和fsimage文件,将这两个文件加入到内存进行 然后将这两个文件加入到内存中进行合并产生新的fsimage发送给NameNode。

四、HDFS写入数据流程

  1. 客户端会带着文件路径向NameNode发送写入请求通过 RPC 与 NameNode 建立通讯, NameNode 检查目标文件,返回是否可以上传;
  2. Client 请求第一个 block 该传输到哪些 DataNode 服务器上;
  3. NameNode 根据副本数量和副本放置策略进行节点分配,返回DataNode节点,如:A,B,C
  4. Client 请求A节点建立pipeline管道,A收到请求会继续调用B,然后B调用C,将整个pipeline管道建立完成后,逐级返回消息到Client;
  5. Client收到A返回的消息之后开始往A上传第一个block块,block块被切分成64K的packet包不断的在pepiline管道里传递,从A到B,B到C进行复制存储
  6. 当一个 block块 传输完成之后,Client 再次请求 NameNode 上传第二个block块的存储节点,不断往复存储
  7. 当所有block块传输完成之后,Client调用FSDataOutputSteam的close方法关闭输出流,最后调用FileSystem的complete方法告知NameNode数据写入成功

五、HDFS读取数据流程

  1. 客户端会先带着读取路径向NameNode发送读取请求,通过 RPC 与 NameNode 建立通讯,NameNode检查目标文件,来确定请求文件 block块的位置信息
  2. NameNode会视情况返回文件的部分或者全部block块列表,对于每个block块,NameNode 都会返回含有该 block副本的 DataNode 地址
  3. 这些返回的 DataNode 地址,会按照集群拓扑结构得出 DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离 Client 近的排靠前;心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后;
  4. Client 选取排序靠前的 DataNode 调用FSDataInputSteam的read方法来读取 block块数据,如果客户端本身就是DataNode,那么将从本地直接获取block块数据
  5. 当读完一批的 block块后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的 block 列表,继续读取
  6. 所有block块读取完成后,Client调用FSDataInputStream.close()方法,关闭输入流,并将读取来所有的 block块合并成一个完整的最终文件

六、HDFS缺陷

注意:早期版本

  1. 单点问题
  2. 内存受限

总结

上述给大家讲解了简单的HDFS架构,我在最后面留了一个小问题,我会在下期通过画图的方式给大家讲解,我在这里为大家提供大数据的资料需要的朋友可以去下面GitHub去下载,信自己,努力和汗水总会能得到回报的。我是大数据老哥,我们下期见~~~

本文转载自微信公众号「大数据老哥」,可以通过以下二维码关注。转载本文请联系大数据老哥公众号。

 

来源: 大数据老哥内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯