初识HDFS

最近学习了大数据Hadoop相关知识,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用


文章目录


一 NameNode介绍

1. 整体架构

主从结构
初识HDFS

2. 功能介绍

namenode是整个文件系统的管理节点,主要维护系统的:

  • 目录树
  • 文件的元信息
  • 文件的块列表
  • 接收客户端的请求

一般这些信息都维护在内存中,但也会维护在文件中(防止内存掉电即丢失),主要的文件有:
初识HDFS

3. 主要文件介绍

(1) fsimage

用来存储已经完成的文件信息,存储在datanode的特定路径下(在配置文件中设置):

<inode><id>16393</id><type>FILE</type><name>LICENSE.txt</name><replication>2</replication><mtime>1586332513657</mtime><atime>1586332513485</atime><preferredBlockSize>134217728</preferredBlockSize><permission>root:supergroup:0644</permission><blocks><block><id>1073741827</id><genstamp>1003</genstamp><numBytes>150569</numBytes></block>
</blocks><storagePolicyId>0</storagePolicyId></inode>

xml的层次表示文件的包含关系;inode表示一个文件,里面包含了元信息和对应的数据块列表;其余信息略。

(2) edits

保存正在上传的文件的元信息,如文件上传时的状态,
一个record表示一个事务(比如上传一个大文件),

OP_ADD:执行上传操作
OP_ALLOCATE_BLOCK_ID:申请block块id
OP_SET_GENSTAMP_V2:设置GENSTAMP
OP_ADD_BLOCK:添加block块
OP_CLOSE:关闭上传操作

(3) seen_txid

它代表的是namenode里面的edits*文件的尾数,namenode重启的时候,会按照seen_txid的数字,顺序从头跑edits_0000001~到seen_txid的数字。如果根据对应的seen_txid无法加载到对应的文件,NameNode进程将不会完成启动以保护数据一致性。

(4) VERSION

保存了集群的版本等信息(不要随意初始化节点)

4. NameNode总结

namenode维护了两份信息:

  • 从文件到文件块列表的映射,保存在fsimage和edits中(当集群启动的时候会把这些元信息加载到内存中)
  • 从文件块列表到保存文件块的datanode的映射(集群启动的时候由datanode发送给namenode)

注意:hdfs不适合存储小文件:
因为需要在内存中维护文件的元信息,文件元信息的大小恒定,所以存储过多的小文件会导致内存溢出,同时还造成存储空间的浪费。

二 SecondaryNameNode介绍

SecondaryNameNode主要负责定期的把edits文件中的内容合并到fsimage中,这个合并操作称为checkpoint,在合并的时候会对edits中的内容进行转换,生成新的内容保存到fsimage文件中。

三 DataNode介绍

datanode提供真实的文件数据的存储服务;

hdfs会按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称为一个block,HDFS默认的block大小是128MB;

HDFS中,如果一个文件的大小小于一个数据块的大小,那么并不会占用整个数据块的存储空间;

datanode还可以存储文件的副本,来保证安全性;

集群重启的时候,datanode会把节点信息和节点上的块信息发送给namenode,这样就可以从namenode找到文件的实际存储位置。

四 总结

如有错误恳请指正,如有侵权请联系我删除
参考文章:http://wiki.xuwei.tech/hadoop1/quick.html

上一篇:HDFS学习:HDFS机架感知与副本放置策略


下一篇:Hadoop学习笔记 - HDFS 概述