Hbase技术原理及优化措施研究
Hdfs简介
Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
Hdfs原理
2.1 结构
Hdfs集群中包含三种类型的节点,namenode、secondaryNameNode,datanode。其结构图如下
1. Namenode负责管理文件系统的命名空间和客户端对文件的访问。NameNode会保存文件系统的具体信息,包括文件信息、文件被分割成具体block块的信息、以及每一个block块归属的DataNode的信息。
2. Datanode负责存储数据,hdfs中所有的文件都存储在datanode中。文件以block的形式存储在datanode中。Datanode周期性的将其所有的block块信息发送给NameNode。
3. Namenode存放文件系统树及所有文件、目录的元数据。元数据持久化为2种形式:namespcae image(fileImage)、edit log。Secondary节点定期合并主Namenode的namespace image和edit log, 避免edit log过大,通过创建检查点checkpoint来合并。它会维护一个合并后的namespace image副本, 可用于在Namenode完全崩溃时恢复数据。
2.2 文件写入原理
业务应用调用HDFS Client提供的API打开文件
1. HDFS Client联系Namenode获取到文件信息(数据块、datanode位置信息)
2. 业务应用调用read API读取文件
3. HDFS Client根据从Namenode获取到的信息,联系Datanode,获取的相应数据块(Client采用就近原则读取数据)
4. HDFS Client会与多个Datanode通讯获取数据块
5. 数据读取完成后,业务调用close关闭连接
2.3 文件读取原理
2.4 目录合并原理
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就变小了
参考资料: https://blog.csdn.net/weixin_38750084/article/details/82963235