7

如果集群中的复制因子发生了变化,比如从 5 变为 3,并且集群重新启动,那么旧的文件块会发生什么?它们是否会被视为过度复制并被删除,或者复制因子仅适用于新文件?这意味着旧文件块被复制 5 次,新文件块(重新启动后)被复制 3 次。如果集群没有重新启动会发生什么?

4

2 回答 2

11

如果集群中的复制因子发生了变化,比如从 5 变为 3,并且集群重新启动,那么旧的文件块会发生什么?

现有/旧文件块没有任何反应。

它们是否会被视为过度复制并被删除,或者复制因子仅适用于新文件?

新的复制因子仅适用于新文件,因为复制因子不是 HDFS 范围的设置,而是每个文件的属性。

这意味着旧文件块被复制 5 次,新文件块(重新启动后)被复制 3 次。

它与此相反。复制因子设置为 3 的现有文件将继续携带 3 个块。使用更高的默认复制因子创建的新文件将携带 5 个块。

如果集群没有重新启动会发生什么?

如果您重新启动或不重新启动集群,则不会发生任何事情。由于该属性是每个文件的,并且在创建文件时由客户端引导,因此也不需要重新启动集群来更改此配置。您只需要更新您的客户端配置。

如果您希望更改所有旧文件的复制因子,请考虑运行复制更改器命令:hadoop fs -setrep -R 5 /

于 2013-08-26T07:05:57.900 回答
0

如果您更改配置文件中的复制因子并重新启动集群:旧文件块继续保留 5 个副本。这是因为,如果您更改配置文件中的复制因子,它仅适用于尚未到达的新文件。

为了确保您的复制因子从 5 减少到 3 并删除过度复制的块,您需要使用 hadoop fs/dfs 实用程序的 setrep 命令:hdfs dfs -setrep -R 5 /

于 2018-04-02T11:03:59.950 回答