1. 简述HDSF通过什么中间组件去存储数据 ?
HDFS(Hadoop Distributed File System)通过以下中间组件来存储和管理数据:
-
NameNode:
- NameNode是HDFS架构中的主节点,负责管理文件系统的命名空间和客户端对文件的访问。它存储了文件系统树的元数据以及每个文件到数据块的映射信息。NameNode知道每个文件由哪些数据块组成,以及这些数据块存储在哪些DataNode上。
-
DataNode:
- DataNode是HDFS的工作节点,负责存储实际的数据块。每个DataNode会将其存储的数据块信息定期报告给NameNode,并通过心跳信号告知其存活状态。DataNode执行数据块的读写操作,并根据NameNode的指令进行数据块的复制和删除。
-
Secondary NameNode:
- Secondary NameNode并不是一个备份NameNode,而是一个辅助节点,用于减轻NameNode的负担。它定期从NameNode获取文件系统的状态信息,帮助合并EditLog和FsImage,防止EditLog文件过大。
-
Standby NameNode(也称为Backup NameNode或Checkpoint NameNode):
- Standby NameNode是NameNode的备份节点,用于在NameNode故障时提供故障转移。它定期从主NameNode同步命名空间的镜像,并准备好在主NameNode不可用时接管服务。
-
JournalNode(在HA配置中):
- 在HDFS的高可用性(HA)配置中,JournalNode用于存储NameNode的状态信息,确保两个NameNode(一个Active和一个Standby)可以共享状态信息,从而实现故障转移和高可用性。
-
ZooKeeper(在HA配置中):
- ZooKeeper用于在HDFS的HA配置中管理NameNode的状态,确保在故障转移时只有一个NameNode处于Active状态。
通过这些组件,HDFS实现了一个高度可靠和可扩展的分布式存储系统,能够支持大规模数据集的存储和处理。
2. 简述HDFS跨节点怎么进行数据迁移 ?
HDFS(Hadoop Distributed File System)设计了一种机制来在不同的DataNode之间进行数据迁移,这个过程通常称为"数据平衡"或"数据重新复制"。以下是HDFS跨节点进行数据迁移的几种情况和相应的机制:
-
数据块副本的自动复制:
- HDFS自动将数据块的多个副本存储在不同的DataNode上以提供数据的高可用性。
- 当新增DataNode到集群中时,NameNode会指示将一些数据块的副本迁移到新的DataNode上。
-
数据块副本的重新复制:
- 如果某个DataNode失败或离线,NameNode会检测到副本数量低于配置的副本因子(通常为3)。
- NameNode随后会指示其他DataNode复制缺失的副本到健康的DataNode上。
-
数据块的移动以进行负载均衡:
- HDFS提供了一个叫做"Balancer"的工具,它可以自动地在DataNode之间移动数据块,以平衡集群的存储负载。
- Balancer根据DataNode的存储容量和网络带宽来智能地选择数据块进行迁移。
-
手动数据迁移:
- 管理员可以使用Hadoop的命令行工具手动触发数据块的复制或迁移。
- 例如,使用
hdfs dfsadmin -report
命令查看集群状态,然后使用hdfs dfs -moveFromLocal
或hdfs dfs -put
命令将文件复制到特定的DataNode。
-
数据迁移的触发条件:
- NameNode会根据集群的策略和配置参数来决定何时触发数据迁移。
- 例如,可以设置
dfs.namenode.replication.min
和dfs.datanode.balance.bandwidthPerSec
等参数来控制副本的最小数量和Balancer的带宽。
-
网络拓扑感知