HDFS读数据流程
事件描述:客户端要下载一个200m的数据文件,hdfs是如何读取的。
两个对象:一个客户端、一个集群
流程:
1.客户端创建一个分布式文件系统(DistributedFileSystem),向集群NameNode请求下载文件。
2.集群判断客户端是否有权限,并判断是否有对应的文件,并返回目标文件元数据。
3.客户端创建一个流对象,选择读取节点的原则:首先考虑节点距离最近,然后要看该节点是否数据量很大,(负载均衡问题)当达到一定的量级后访问其他节点。读取顺序:先读第一块,再读第二块。
NN和2NN工作机制
思考:NameNode中的元数据是存储在哪里?
回答:NameNode元数据存放在内存中。但是一旦断电,元数据丢失。因此产生在磁盘中备份元数据的FsImage。但是内存的元数据更新时,如果同时更新FsImage会导致效率低,为了能够进行更新,引入Edits文件(只进行追加操作,效率高)。每当元数据有更新或者添加元素时,修改内存中的元数据并追加到Edits中。一旦断电,可以通过FsImage和Edits的合并,合成元数据。
工作流程:服务器一启动,将FsIamge和Edits加载到内存。服务器一关机,将Edits和FsImage合并 。若Edits追加过多,需要2NN将Edits和FsImage定期合并。
NN和2NN之间的区别是NN中记录了最新的inprogress操作。
DataNode工作机制
工作机制:
1.DataNode启动后向NameNode注册,并汇报DataNode中有哪些块信息。
2.DataNode每周期上报所有块信息。
3.DataNode每过3秒告诉NameNode还活着,若超过3秒没有回复,则再等10分钟,若再超过10分钟,再等30秒,若还是没有收到心跳,则说明该节点不可用。
掉线时限参数设置:
如果hadoop被挂掉了,在被挂掉的hadoop中使用命令即可恢复:
hdfs --daemon start datanode
数据完整性
对原始数据进行封装,使用奇偶校验位,若1的个数是偶数,则为0;若1的个数是奇数则为1;为防止网络传输错误,使用crc校验位,对比传输后的数据看是否一致。
标签:数据完整性,NN,读数据,FsImage,Edits,DataNode,NameNode,机制,客户端 From: https://blog.csdn.net/weixin_66383346/article/details/136654192