为什么存储三个副本?而不是两个或者四个?
时间: 2023-07-12 09:57:20 浏览: 377
存储三个副本是为了在发生故障时保证数据的可靠性和可用性。如果只存储两个副本,当其中一个副本发生故障时,还剩下一个副本,但是这个副本的可靠性和可用性就无法得到保证。如果存储四个副本,虽然数据的可靠性和可用性得到了更好的保证,但是存储成本和维护成本也会增加,因此三个副本是一个比较合理的折中方案。同时,三个副本也符合CAP理论中的一致性和可用性要求。
相关问题
一个集群假设有7台计算机,其中一个是 namenode ,剩下6个是 datanode 。一个文件 t est . log 424MB,请描述这个文件在这个集群中 hdfs 存储策略,及读写过程。用图和文字描述。 (注:一个块3个副本)
根据HDFS的存储策略,一个文件会被分成多个块(block),每个块的大小默认为128MB,但可以通过配置进行修改。在这个集群中,一个文件大小为424MB,因此会被分成4个块,其中第一个块大小为128MB,第二个块大小为128MB,第三个块大小为128MB,第四个块大小为40MB。
这些块会被存储在不同的datanode上,每个块会有3个副本,其中一个是主副本(primary replica),其余两个是备份副本(replica)。主副本存储在namenode所在的机器上,而备份副本则存储在其他datanode上。这样做的目的是为了保证数据的可靠性和容错性,当某个datanode出现故障时,可以从备份副本中恢复数据。
下图展示了这个文件在HDFS中的存储策略:
![HDFS存储策略](https://img-blog.csdnimg.cn/20211103173249657.png)
在读取文件时,客户端会向namenode发送请求,namenode会返回该文件的块信息以及存储该块的datanode列表。客户端会根据这些信息从离自己最近的datanode读取数据,如果该datanode出现故障,则会从备份副本中读取数据。在写入文件时,客户端会将数据分成块,并向namenode发送请求,namenode会返回存储该块的datanode列表,客户端会将数据写入这些datanode中,并等待确认。当所有的datanode都确认写入成功后,客户端会向namenode发送完成请求,namenode会更新文件的元数据信息。
阅读全文