1. 概述HDFS集群分为两大角色:NameNode、DataNode(Secondary NameNode)
NameNode负责管理整个文件系统的元数据,记录存放在哪些datanode中,以及存放路径
dataNode 负责管理用户的文件数据块
文件会按照固定大小(blocksize)来切分成块后分布式存储在若干台datanode上
每一个文件快可以有多个副本,并存放在不同的datanode上
datanode 会定期向namenode汇报自身所保存的文件block信息,而namenode则会负责保持文件的副本数量(当减少datanode的时候,namenode才知道当前副本状态,从而进行副本维持)
HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行
2. 写数据流程
比较简单,看图即懂
上传文件到HDFS流程图
3. 读数据流程
比较简单,看图即懂
从HDFS读取文件流程图
4. nameNode、secondNameNode管理元数据机制
4.1 机制
每次更新元数据,namenode都需要记录下来这些更新信息,方便之后查询更新过的元数据。
假如每次记录在磁盘上,几千万上亿条元数据写入速度会非常慢,导致磁盘IO使用率过高,效率低;读数据的时候再上亿条数据里面搜索,查询的效率也非常低。
因此需要将更新记录放在内存中(new一个元数据对象),如果仅仅使用内存,亿级的数据又会使nameNode死机或者意外断电,那么内存中的记录全部丢失。
所以需要把内存中的亿级元数据定时写入fsimage中。由于一条元数据平均大小为150Bytes,定时时间太长的话中途断电就丢失了,定时时间太短又会导致磁盘IO占用过高的问题。
这样,secondNameNode就引入了,用于fsimage镜像同步管理。
1. 用户更新元数据时,将更新记录写入namenode内存
2. 在第1步的同时,在namenode中,只将内存中更新的记录追加到日志文件(edi