深入浅出:hadoop分布式文件存储系统(HDFS)

深入浅出:hadoop分布式文件存储系统(HDFS)分布式文件存储系统如上图所示,HDFS也是按照Master和Slave的结构。分NameNode、SecondaryNameNode、DataNode这几个角色。NameNode:是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间;SecondaryNameNode:是一个小弟,分担大哥namenode的一部分工作量;是Na…

大家好,又见面了,我是你们的朋友全栈君。

分布式文件存储系统

在这里插入图片描述
如上图所示,HDFS 也是按照Master 和Slave 的结构。分NameNode、SecondaryNameNode、DataNode 这几个角色。
NameNode:是Master 节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS 的名称空间;
SecondaryNameNode:是一个小弟,分担大哥namenode的一部分工作量;是NameNode 的冷备份;合并fsimage 和fsedits然后再发给namenode。
DataNode:Slave 节点,奴隶,干活的。负责存储client 发来的数据块block;执行数据块的读写操作。热备份:b 是a 的热备份,如果a 坏掉。那么b 马上运行代替a的工作。冷备份:b 是a 的冷备份,如果a 坏掉。那么b 不能马上代替a工作。但是b 上存储a 的一些信息,减少a 坏掉之后的损失。
fsimage:元数据镜像文件(文件系统的目录树。)
edits:元数据的操作日志(针对文件系统做的修改操作记录)
namenode 内存中存储的是=fsimage+edits。
SecondaryNameNode 负责定时默认1 小时,从namenode上,获取fsimage 和edits 来进行合并,然后再发送给namenode。减少namenode 的工作量。
1.工作机制
NameNode 负责管理整个文件系统元数据;DataNode 负责管理具体文件数据块存储;Secondary NameNode 协助NameNode 进行元数据的备份。HDFS 的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向NameNode 申请来进行。
在这里插入图片描述
2.读写流程
HDFS 写数据流程
1、client 发起文件上传请求,通过RPC 与NameNode 建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传;
2、client 请求第一个block 该传输到哪些DataNode 服务器上;
3、NameNode 根据配置文件中指定的备份数量及机架感知原理进行文件分配,返回可用的DataNode 的地址如:A,B,C;
注: Hadoop 在设计时考虑到数据的安全与高效,数据文件默认在HDFS 上存放三份, 存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。
4、client 请求3 台DataNode 中的一台A 上传数据(本质上是一个RPC 调用,建立pipeline), A 收到请求会继续调用B,然后B 调用C,将整个pipeline 建立完成,后逐级返回client;
5、client 开始往A 上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet 为单位(默认64K),A 收到一个packet 就会传给B,B 传给C;A 每传一个packet 会放入一个应答队列等待应答。
6、数据被分割成一个个packet 数据包在pipeline 上依次传输,在pipeline 反方向上,逐个发送ack(命令正确应答),最终由pipeline中第一个DataNode 节点A 将pipeline ack 发送给client;
7、当一个block 传输完成之后,client 再次请求NameNode 上传第二个block 到服务器。
HDFS 读数据流程
1、Client 向NameNode 发起RPC 请求,来确定请求文件block 所在的位置;
2、NameNode 会视情况返回文件的部分或者全部block 列表,对于每个block,NameNode 都会返回含有该block 副本的DataNode 地址;
3、这些返回的DN 地址,会按照集群拓扑结构得出DataNode 与客户端的距离,然后进行排序,排序两个规则:网络拓扑结构中距离Client 近的排靠前;心跳机制中超时汇报的DN 状态为STALE,这样的排靠后;
4、Client 选取排序靠前的DataNode 来读取block,如果客户端本身就是DataNode,那么将从本地直接获取数据;
5、底层上本质是建立Socket Stream(FSDataInputStream),重复的调用父类DataInputStream 的read 方法,直到这个块上的数据读取完毕;
6、当读完列表的block 后,若文件读取还没有结束,客户端会继续向NameNode 获取下一批的block 列表;
7、读取完一个block 都会进行checksum 验证,如果读取DataNode 时出现错误,客户端会通知NameNode,然后再从下一个拥有该block 副本的DataNode 继续读。
8、read 方法是并行的读取block 信息,不是一块一块的读取;NameNode 只是返回Client 请求包含块的DataNode 地址,并不是返回请求块的数据;
9、最终读取来所有的block 会合并成一个完整的最终文件。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142959.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • resque 遍历加载job目录下的类

    resque 遍历加载job目录下的类

    2022年2月21日
    38
  • R语言入门-安装R和Rstuido软件

    R语言入门-安装R和Rstuido软件安装R和Rstuido软件R语言是用于统计分析,图形表示和报告的编程语言和软件环境;Rstudio是编辑、运行R语言的最为理想的工具之一。1、官网下载R安装包  下载地址为:https://cran.r-project.org  进入链接,如下图所示,在页面顶部提供了三个下载链接,分别对应三种操作系统:Windows、Mac和Linux。请选择自己操作系统对应的链接,接下来我将以wi…

    2022年6月27日
    44
  • shiro面试知识点总结_jmeter面试常见问题

    shiro面试知识点总结_jmeter面试常见问题Shiro总结和常见面试题一、 什么是shiroShiro是一个强大易用的java安全框架,提供了认证、授权、加密、会话管理、与web集成、缓存等功能,对于任何一个应用程序,都可以提供全面的安全服务,相比其他安全框架,shiro要简单的多。二、 Shiro的核心概念Subject、SecurityManager、RealmSubject:主体,代表了当前“用户”,这个用户不一定是一个具体的…

    2022年10月14日
    0
  • 计算机专业的男生喜欢你,男生暗恋你的20个动作 一秒看出他喜欢你

    计算机专业的男生喜欢你,男生暗恋你的20个动作 一秒看出他喜欢你很多女生想知道是不是有男生在暗恋自己,下面小编为大家介绍一下男生暗恋你的20个动作。1、眼睛总是忍不住盯着那个女生。2、在女生的面前会表现得特别活跃。3、在女生开心的时候会很开心,在女生伤心的时候,心情就会像乌云密布的天空。4、如果那个女生和其他男生表现得很要好,就会忍不住要吃醋。5、如果那个女生心情低落,就会想过去安慰她。6、对于女生所拜托的事情,就算再难做也会答应。7、女生一上Q,就会很兴奋,…

    2022年7月25日
    36
  • 数据库锁表

    数据库锁表人工智能,零基础入门!http://www.captainbed.net/inner1、锁表发生在insert、update、delete语句中2、锁表的原理是数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commit或回滚或退出数据库用户3、锁表的原因:第一、A程序执行了对tableA的insert,并还未commite时,B程…

    2022年6月18日
    29
  • linux系统网桥管理工具brctl 安装及使用

    linux系统网桥管理工具brctl 安装及使用

    2022年2月12日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号