深入浅出: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 会合并成一个完整的最终文件。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java的下载与安装简易教程

    Java的下载与安装简易教程分享一下windows10系统下安装Java的教程一.Java的下载与安装要想学习Java语言,第一个条件就是要让电脑上具备有Java环境,那么怎么让电脑具备Java环境呢?1.首先下载Java的安装包。点击Java下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html(官网地址)如下图:2.点击上图红色方框的Download,跳转到另一个页面,如下图:…

  • 关于Google FREE Webhosting !的欺诈邮件 200∞「建议收藏」

    关于Google FREE Webhosting !的欺诈邮件 200∞「建议收藏」早上收到了一封貌似正常的邮件:Hello,DearGmailcustomerAfterourfreeemailservicesweofferyoutosingupforourfreehostingservices.Thisservicecurrentlyisinbetatest.Andwechooseyoutotestthis…

  • vmware15最新激活码2021_通用破解码

    vmware15最新激活码2021_通用破解码,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • tabnine激活码(注册激活)

    (tabnine激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSWQi…

  • UNIX基本操作命令

    UNIX基本操作命令UNIX命令基础登录系统:输入密码,密码不显示退出系统:ctrl+dexitlogout创建/修改密码:passwd密码输入后不显示,新密码要输入两次,匹配成功才算是修改密码成功UNIX命令格式:命令选项参数快捷键:ctrl+c:中断当前命令执行并返回shellctrl+d:终端传输或结束文本编辑ctrl+s:临时中断命令的屏幕输出ctrl+q:恢复由ctrl+s的临时中断ctrl+u:清除输入的整个命令行backspace:删除某个错误输入的字符常用操作命令

  • iOS 获取本地图片尺寸_ios图片处理软件

    iOS 获取本地图片尺寸_ios图片处理软件有时候我们需要在代码中读取图片的URL,但是需要注意的是:在Assets中的图片,会经过编译无损压缩,无法通过Path读取,只能通过named方法读取,这种情况我们应该怎么获取图片URL了?

发表回复

您的电子邮箱地址不会被公开。

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