一、HDFS体系结构与基本概念
我们通过 Hadoop shell 上传的文件是存放在DataNode 的 block 中,通过Linux shell 是看
不到文件的,只能看到 block。
可以一句话描述HDFS:把客户端的大文件存放在很多节点的数据块中。在这里,出现
了三个关键词:文件、节点、数据块。HDFS 就是围绕着这三个关键词设计的,
HDFS:负责数据的分布式存储 主从结构
NameNode :主节点可以有两个;(NameNode、Secondary NameNode)
1.负责接收用户的操作请求,是用户操作的入口,
2.维护文件系统的目录结构,称作命名空间namespace
DataNode :从节点 ,可以有很多个;负责存储文件
block块:block 是HDFS 读写数据的基本单位。默认128M(查看配置文件hdfs-default.xml)
副本replication:副本就是备份,目的是为了安全防止数据丢失。一个 block 的多个副本会存放在不同的 datanode 上。默认为3份(查看HDFS-default.xml)
SecondaryNameNode:SNN 只有一个职责,就是合并NameNode 中的edits 到fsimage 中。
合并原理如图
NameNode 的作用是管理文件目录结构,是管理数据节点的。名字节点维护两套数据,
一套是文件目录与数据块之间的对应关系,另一套是数据块与节点之间的位置对应关系。
前一套数据是静态的,是存放在磁盘上的,通过fsimage 和edits 文件来维护;后一套数据是动态的,不保存到磁盘的,每当集群启动的时候,会自动建立这些信息。
在HDFS 集群运行过程中,这两套元数据信息都加载到内存中。当客户端有大量的小文件上传操作时,会产生大量的block,这些block 的元数据信息都会存储在NameNode 内存中,造成NameNode 的内存压力。