HDFS 是分布式文件系统,它默认的存储单元是 128MB 的数据块(hadoop1.x 为 64MB)。
HDFS 架构:
HDFS 的体系框架是 Master-Slave 主备结构,一个典型的 HDFS 通常由单个 NameNode 和多个 DataNode 组成,但是为备份元数据,一般还有一个 secondary namenode(HA 模式没有,standby namenode 代替 secondary namenode)。
1. Client:客户端
- 会切分文件。文件上传 HDFS 的时候,Client 将文件切分成一个一个的 Block,然后进行存储。
- 与 NameNode 交互,获取文件的位置信息。
- 与 DataNode 交互,读取或者写入数据。
- Client 提供一些命令来管理 HDFS,比如启动关闭 HDFS、访问 HDFS 目录及内容等
2. NameNode:名称节点,也称主节点
- 整个 hadoop 集群中只有一个 namenode,它是整个系统的 “总管”,用来管理数据的元数据信息,不存储具体的数据。
- 配置副本策略,Namenode 负责监控各个 DataNode 的健康状态,一旦发现某个 DataNode 宕掉,则将该 DataNode 移出 HDFS 并重新备份其上面的数据。
- 处理客户端读写请求。
3. DataNode:数据节点,也称从节点。NameNode 下达命令,DataNode 执行实际的操作
- datanode 是真正存储数据的地方,存储实际的数据块。
- 执行数据块的读写操作。
4. Secondary NameNode:secondary namenode 用来辅助 namenode,但并不是 namenode 的热备,宕机时不能代替 namenode 进行工作。(测试环境用 secondary namenode,生产环境用集群高可用)
- 辅助 NameNode,分担其工作量
- 定期地将 namenode 的 fsimage 和 Edits 文件进行合并,并传输给 NameNode,防止日志文件过大。
- 合并之后的 fsimage 会在 secondary namenode 中保存一份,当 namenode 节点挂掉时可辅助恢复 NameNode。
相关问题:
1.Secondary NameNode 工作机制
SecondaryNameNode 是 HDFS 分布式文件系统中的一个辅助组件,它的主要作用是定期合并 Fsimage 和 Edits 文件,当 NameNode 发生故障时,Secondary NameNode 可以将从 NameNode 中下载的最新的 FSimage 和 Edits 文件合并到本地,来保证 HDFS 元数据的一致性和完整性。
SecondaryNameNode 的工作机制包括以下几个方面:
1. 接收 NameNode 的 checkpoint 请求:
SecondaryNameNode 会接收来自 NameNode 的 checkpoint 请求,并向 NameNode 发送 checkpoint 请求。在这个过程中,SecondaryNameNode 会对 NameNode 的 edits 日志进行回滚,以保证元数据的一致性和完整性。
2. 定期合并 Fsimage 和 Edits 文件:
SecondaryNameNode 会定期地从 NameNode 下载最新的 Fsimage 和 Edits 文件,并将它们合并到本地。在这个过程中,SecondaryNameNode 会检查 Fsimage 和 Edits 文件的一致性和完整性,并将任何缺失的数据从 NameNode 下载到本地。
2.NN 和 2NN 有什么区别?
NameNode 是整个集群的 “大脑”,需要处理大量的元数据操作和查询请求,维护整个分布式文件系统的命名空间和元数据信息。
Secondary NameNode 是 NameNode 的一个辅助组件,并不是 NameNode 的备份结点,无法代替 NameNode 的工作。它的主要作用是定期合并 FSimage 和 Edits 文件,当 NameNode 发生故障时,Secondary NameNode 可以将从 NameNode 中下载的最新的 FSimage 和 Edits 文件合并到本地,来保证 HDFS 元数据的一致性和完整性。
因此,NameNode 和 Secondary NameNode 的主要区别在于它们的职责和作用。NameNode 负责管理文件系统的元数据和文件信息,而 SecondaryNameNode 主要用于定期合并 FsImage 和 Edits 文件,来保证 HDFS 元数据的一致性和完整性。
3.secondary namenode 什么时候拉取 namenode 的数据进行合并
NameNode 启动时会加载之前未合并的 FSImage 和 Edits 文件进行合并,之后 SecondaryNameNode 每隔一小时执行一次,这个时间间隔可以通过参数自定义设置。