最近学习了大数据Hadoop相关知识,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用
文章目录
一 NameNode介绍
1. 整体架构
主从结构
2. 功能介绍
namenode是整个文件系统的管理节点,主要维护系统的:
- 目录树
- 文件的元信息
- 文件的块列表
- 接收客户端的请求
一般这些信息都维护在内存中,但也会维护在文件中(防止内存掉电即丢失),主要的文件有:
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