HDFS(Hadoop Distributed File System)是一种分布式文件系统,可以存储和处理大规模数据集。在HDFS中,DN(DataNode)是一个工作节点,负责存储和管理数据块。
数据块的管理
在HDFS中,文件会被分成若干个数据块(默认大小为128MB),并存储在不同的DN上。DN会将数据块写入本地磁盘,并对数据块进行管理,包括复制、删除等操作。DN还会周期性地向NN发送心跳信号,汇报本地数据块的状态和可用性。
说明: 假设一个文件被分成三个数据块,分别存储在DN1、DN2、DN3上。当DN1发生故障时,NN会收到DN1的心跳信号,并发现其中一个数据块不可用。此时,NN会将该数据块的副本从DN1上删除,并从DN2或DN3中选择一个副本进行恢复。
数据块的复制
为了保证数据的可靠性和容错性,HDFS会将每个数据块存储多个副本(默认为3个),并将副本分布在不同的DN上。当有新的数据块写入时,DN会向NN请求一个可用的DN列表,并将数据块的副本写入这些DN上。每个DN都会周期性地向其他DN请求数据块的副本,以保证自己拥有足够的副本。
说明: 假设一个数据块需要存储三个副本,分别存储在DN1、DN2、DN3上。当有新的数据块写入时,DN1会向NN请求一个可用的DN列表,NN会返回DN2和DN3。此时,DN1会将数据块的副本写入DN2和DN3上,并周期性地向它们请求数据块的副本。
数据块的删除
当一个文件或者数据块不再需要时,HDFS会将它们从系统中删除。在删除数据块时,HDFS会考虑该数据块的副本情况,并保证至少有一个副本存活。
说明: 假设一个数据块需要存储三个副本,分别存储在DN1、DN2、DN3上。当需要删除该数据块时,HDFS会首先从NN中删除数据块的元数据信息。然后,HDFS会向DN1、DN2和DN3发送删除命令。当其中一个DN收到删除命令后,它会将本地副本删除,并向其他DN请求数据块的副本,以保证至少有一个副本存活。
数据块的读取
当需要读取一个文件或者数据块时,客户端会向NN发送读取请求,NN会返回该数据块的副本列表。然后,客户端会从副本列表中选择一个DN进行读取,并向该DN发送读取请求。如果所选DN不可用,则客户端会从副本列表中选择另一个DN进行读取。
说明: 假设一个数据块需要存储三个副本,分别存储在DN1、DN2、DN3上。当需要读取该数据块时,客户端会向NN发送读取请求,NN会返回副本列表[D1, D2, D3]。客户端会选择一个DN进行读取,比如选择DN1。如果DN1不可用,则客户端会选择另一个DN进行读取。
数据块的校验和
为了保证数据块的完整性和可靠性,HDFS会为每个数据块生成一个校验和,并将其存储在NN中。在读取数据块时,客户端会对读取的数据块进行校验和计算,并将计算结果与存储在NN中的校验和进行比较,以确保数据块的完整性。
说明: 假设一个数据块的校验和为C,存储在NN中。当需要读取该数据块时,客户端会选择一个DN进行读取,并从DN上读取数据块B。然后,客户端会对B进行校验和计算,得到C'。最后,客户端将C'与存储在NN中的校验和C进行比较,以确定数据块的完整性。