深入浅出: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)
blank

相关推荐

  • 电路板维修入门教程视频_电路板坏了去哪里维修

    电路板维修入门教程视频_电路板坏了去哪里维修(一)          电容篇  1、电容在电路中一般用“C”加数字表示(如C25表示编号为25的电容)。电容是由两片金属膜紧靠,中间用绝缘材料隔开而组成的元件。电容的特性主要是隔直流通交流。电容容量的大小就是表示能贮存电能的大小,电容对交流信号的阻碍作用称为容抗,它与交流信号的频率和电容量有关。容抗XC=1/2πfc(f表示交流信号的

  • TCP拥塞控制基本原理

    TCP拥塞控制基本原理从拥塞控制原理来看,我们有两种方案来解决TCP拥塞控制问题。但是IP层并不提供显式的网路拥塞控制反馈。TCP采用的是方式是让每一个发送方根据感受的网络拥塞程度来限制其向连接发送流量的速率。拥塞控制TCP拥塞控制常被称为加性增,乘性减。这样的方式能够在拥塞的情形下,快速减少发送速率,从而避免严重的拥塞现象出现。慢启动TCP连接在刚开始建立的阶段,发送速率起始慢,T…

  • 求最大公约数和最小公倍数的算法[通俗易懂]

    求最大公约数和最小公倍数的算法[通俗易懂]在刷题的过程中,经常会遇到很多关于最小公倍数和最大公约数的问题。以下是用C语言写的求最大公约数和最小公倍数的算法。最大公约数。求最大公约数有三种算法。1、辗转相除法。   辗转相除法又称为欧几里德算法。这个方法大家已经都已经在数学上学过了。具体的步骤就是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是…

  • 数据库概念设计与逻辑设计[通俗易懂]

    数据库概念设计与逻辑设计[通俗易懂]一、概念设计概念设计的目的就是为了建立概念数据模型,概念数据模型也称为高级数据模型,之所以称为高级数据模型是因为它更接近于人的思维,而不是机器的思维,相比于关系模型更容易理解,此处的高级和低级的概念,与程序语言领域的高低级是一样的。我们通常称Java语言为高级语言,汇编语言为低级语言,是因为高级语言对于我们而言要比汇编语言更容易理解。关于概念数据模型,我们一般都会采用E-R图进行描述。E-R图的规则如下:1.实体采用矩形框,联系采用菱形框,属性采用椭圆形框。2.实体、联系、属性必须使用文字描

  • oracle数据库怎么创建连接_eclipse连接数据库代码

    oracle数据库怎么创建连接_eclipse连接数据库代码应用场景:目标数据分散在多个实例下的时候,需要把这些需要的数据整合到同一个数据库下,需要创建数据库连接。用语句创建参考文章:https://blog.csdn.net/hongweibing1/article/details/50623669但是报错:“口令缺失或无效”,选择手动创建。1、找到DatabaseLinks,右键选择“新建”2、进入“创建数据库连接”窗口,勾选“公共”,填写“数据库连接-名称”、“连接到-用户名”、“连接到-口令”、“连接到-数据库”。3、点击左下方的“应用”即

  • Google发布开源Java程序 给力CSS

    Google发布开源Java程序 给力CSS

发表回复

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

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