HDFS架构
HDFS是一个master/slave结构的服务,其中NameNode是master,一般只在一台节点上启动;DataNode是slave,一般每台节点都会启动一个;DataNode不断地主动向NameNode发送心跳、汇报block信息等;为了对NameNode进行备份,还会有一个SecondaryNameNode
创新互联专业提供
多线服务器托管服务,为用户提供五星数据中心、电信、双线接入解决方案,用户可自行在线购买
多线服务器托管服务,并享受7*24小时金牌售后服务。
HDFS各类操作
- 创建目录
client与namenode直接交互,在INode中创建目录节点,并将操作写入edit log中即可,全程不需要datanode参与。 - 删除文件
客户端与namenode交互删除文件,namenode只是标记要删除,但不会主动通知datanode;
当对应的datanode向namenode发送心跳时,namnode会把删除指令放到返回值里;
所以一般删除不是立即删除,而是有一定的延迟。 - 读文件
client先与namenode交互,通过getBlockLocatitions方法获取到文件block所在节点,然后client再与datanode交互获取具体数据;
block可能不是一次全部返回,可能需要多次调用getBlockLocatitions。
客户端读数据时如果DN发生故障,则会接着读取下一个数据块儿,并记录这个出故障的节点;读数据返回中包含了数据的校验和,如果发现错误,会报告给NN,并从其它副本读取。 - 写文件
client先与NN交互,在NN命名空间中创建一个新文件;
第二步client真正写入之前再跟NN交互获取要在哪儿写,addBlock返回一个LocateBlock对象,包含数据库标志和版本号;
LocateBlock还提供了跟DN交互的数据流管道,client写入到管道中的数据被分为一个个的文件包,这些被放入到一个输出队列中;
第三步client跟DN交互写入数据,第一个节点写完,由第一个DN向第二个DN写,写完还要返回ack确认信息;如果收到ack确认信息,则将这个文件包从队列中删除;
写完一个数据块之后,DN会跟NN交互,向NN提交这个数据块。
对于某个DN发生故障的情况:
1,先关闭数据流通道,正在写的数据包由于没有收到ack,不会从队列中删除,数据不会丢失;
2,正常的DN上的数据块会被赋予一个新的版本号,并通知NN。主要是故障节点恢复后,发现版本号跟NN上的不一致就会自动删除了;
3,数据流管道删除错误节点并重新建立管道,继续在正常几点上写数据;
4,文件关闭后,NN发现此数据库没有达到副本数要求,会选择一个新的DN来复制数据块。
- SecNameNode备份
hdfs的元数据保存在Inode对象中,但是namenode是一个单点master,如果数据都在内存则无法进行故障恢复。
hdfs有一个检查点机制,会把某个时间点内存中的Inode持久化到fsimage文件中,同时对每个操作记录写入到edit log中。
SecNameNode则负责把namenode上的fsimage和edit log合并。
1,SecNN不断地获取NN上editlog的大小,如果太小则不做处理;
2,如果editlog较大,则SecNN通知NN发起一次检查点操作;
3,NN会产出一个新的editlog——edit.new,此后对元数据的操作都写入到edit.new文件中;
4,而SecNN则通过http接口分别将NN上的fsimage和editlog拉取到SecNN节点上,并在内存中合并,并产出文件fsimage.ckpt;
5,SecNN再主动通知NN镜像已合并完成;
6,NN通过http接口拉取过来fsimage.ckpt并覆盖原来的fsimage,最后将edit.new改回edit
HDFS HA
https://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-name-node/index.html
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享题目:HDFS原理及架构-创新互联
本文链接:
http://6mz.cn/article/dpegpo.html