博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hadoop源码分析HDFS Client向HDFS写入数据的过程解析
阅读量:7038 次
发布时间:2019-06-28

本文共 755 字,大约阅读时间需要 2 分钟。

hot3.png

Client以数据块(Block)为单位进行数据存储。按照我们一般的理解,Client向HDFS写入数据,首先需要向NameNode申请Block;申请Block完成后,申请DataNode(包括备份存储的DataNode);二者完成后,Clent进行与DataNode之间的数据存储。

我们知道NameNode之中维护两张非常重要的表,一张是filename→blocks的映射;另外一张是block→machinelist的映射。如果是我进行设计,这两张表都可以在申请的时候完成记录。HDFS在在实现过程中,采用了另外一种方式。首先filename→blocks是在申请过程中进行记录的。当Client申请Block的时候,NameNode分配Block给客户端,并将该Block记录到该File的INode当中;在申请Block的时候,NameNode还会将DataNode和备份存储的DataNode发送给Client。但是,此时NameNode并没有记录Block和DataNode(machinelist)的映射关系。Client向DataNode写入数据完成后,由DataNode向NameNode周期性的进行汇报,报告自己节点所存储的所有Block(思考一下,为什么这么实现?)。我自己以为之所以要这么实现主要是为了考虑数据的可靠性,如果在Client和数据的传输过程中数据出现了问题,那么已经记录在NameNode 中的block→machinelist就会随之改变。当然这只是我自己的考虑,正确与否还有待考证。另外还有一个需要考虑的问题是,DataNode报告自己的block列表的频率是多少呢?

转载于:https://my.oschina.net/sdzzboy/blog/164143

你可能感兴趣的文章
网络ip
查看>>
JAVA连接SAP
查看>>
FZU2169 shadow题解
查看>>
教你正确打开async/await关键字的使用
查看>>
python 字符串复制
查看>>
【SignalR学习系列】2. 第一个SignalR程序
查看>>
js window.onload 的一个验证
查看>>
Lesson 1#08 格式化输出
查看>>
Nand Flash与Nor Flash
查看>>
sqlserver datetime的bug?
查看>>
python中元组tuple详细解析
查看>>
UVA 11178 Morley's Theorem (计算几何)
查看>>
颜色渐变的柱状图
查看>>
基于vue-cli配置移动端自适应
查看>>
处理eclipse启动时报java.lang.IllegalStateException
查看>>
BAT美团滴滴java面试大纲(带答案版)之四:多线程Lock
查看>>
第一次作业
查看>>
51nod 1068 Bash游戏 V3 博弈
查看>>
vue-axios当只调用vue.js又需要axios请求多时
查看>>
CodeM美团点评编程大赛初赛A轮
查看>>