结构:主从结构(Master/slave)名称节点/数据节点;
缺点:不适合低延时数据访问;
无法高效存储大量小文件;
不支持并发写及任意修改文件;
NN:存储元数据;元数据保存在内存中;保存文件,block,DN之间的映射关系;
DN:存储文件内容;文件内容保存在磁盘中;维护block ID到DN本地文件的映射关系;
NN数据结构:
FSImage:用于维护文件系统树以及文件树中所有的文件和文件夹的元数据;
EditLog:录了所有针对文件的创建、删除、重命名等操作;
注释:FSImage中没有记录块存储在哪个数据节点。
NN启动:加载FSImage,执行EditLog;
SecondaryNN:合并FSImage、EditLog;
过程:1)SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件edit.new上来,这个操作是瞬间完成,上层写日志的函数完全感觉不到差别;
(2)SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下;
(3)SecondaryNameNode将下载下来的FsImage载入到内存,然后一条一条地执行EditLog文件中的各项更新操作,使得内存中的FsImage保持最新;这个过程就是EditLog和FsImage文件合并;
(4)SecondaryNameNode执行完(3)操作之后,会通过post方式将新的FsImage文件发送到NameNode节点上
(5)NameNode将从SecondaryNameNode接收到的新的FsImage替换旧的FsImage文件,同时将edit.new替换EditLog文件,通过这个过程EditLog就变小了。
DN:负责保存数据和读取数据;
同性协议:
所有HDFS通信协议都是构建在TCP/IP上的;
客户端和数据节点使用数据节点协议 ,用火RPC远程调用实现;
HDFS局限性:
1、受限于内存大小;
2、受限于单个名称节点性能;
3、无法对不同程序进行隔离;
4、单点故障;
HDFS存储原理:
冗余保存:
优点:
1、加快数据传输速度------分别去取
2、容易检查数据错误--互相检查
3、保证数据可靠性--自动复制
存放方式:
第一副本存在上传节点;第二副本在不同机架;第三副本在第一机架不同节点上;其他随机;
读取:
用API确认机架ID和客户端ID,采用就近原则;没用相同ID,则随机;
数据错误与恢复:
三个:名称节点出错、数据节点出错和数据出错。
NN wrong:停机,从第二名称节点拷贝恢复;1.0需要停机,2.X有热备;
DN wrong:心跳信息;标记数据节点宕机,数据不可读;调整副本数量和位置;
Data wrong:MD5和sha1校验;
读数据:
写数据:
学习记录使用;