发布网友 发布时间:2024-10-17 09:48
共1个回答
热心网友 时间:2024-11-05 19:43
HDFS的概念与架构HDFS采用master/slave架构,由一个Active的NameNode和多个DataNode组成。为避免NameNode单点问题,通常会部署NameNode的standby作为备份。NameNode主要负责元数据的存储与操作,而DataNode则负责实际存储数据。DataNode通常在一个机器上部署一个进程,这些机器分布在多个机架上。客户端操作HDFS文件时,会向NameNode获取文件元数据信息,NameNode返回文件块的存储位置,客户端选择最近的节点进行操作。数据块通常在同机架的两个节点存储两份,以防单个机架故障导致数据丢失,同时在另一个机架上存储一份以提高数据可靠性。数据块分布策略考虑了网络延迟和机架间交换机压力,以优化性能。
DataNode需要定期向NameNode的active和standby节点汇报心跳信息。如果有DataNode心跳异常,NameNode会确认该节点为死节点,并在其他节点复制存储的数据,保证数据块的副本数。DataNode还会将本地数据块信息上报给NameNode的active和standby节点。
在Hadoop 1.x版本中,名节点单点问题限制了集群稳定性。Hadoop 2.x引入了名节点HA机制,采用主备模式。主节点提供读写服务,备节点处于standby状态。当主节点故障时,备节点会自动接替主节点,由Zookeeper控制器实现主备切换。共享存储系统保存HDFS元数据,主备节点通过共享存储实现元数据同步。DataNode向主备节点上报数据块位置信息。
共享存储系统由多个JournalNode进程组成,负责数据一致性。当主节点故障,系统恢复主备状态,JournalNode集群中的EditLog需同步一致,确保数据完整性。主节点内存中文件系统镜像可能落后,因此在恢复一致后,从集群中补齐缺失的EditLog。只有完成这两步,新主节点才能安全提供服务。
客户端通过RPC从名节点获取文件块存储位置。名节点返回所有副本的位置信息,客户端选择距离最近的DataNode读取数据。读操作透明进行,客户端处理类似连续数据流。
客户端将数据写入DFSOutputStream缓冲区,每64KB数据构建一个Packet。数据在多个DataNode之间复制,确保数据可靠性。写操作中,错误处理机制确保数据正确性。
使用场景包括大数据存储与处理、分布式文件系统、数据备份与恢复等。缺点涉及性能瓶颈(如单点故障、网络延迟)、配置复杂度、资源消耗等。