我已将复制因子从3减少到1,但是没有看到namenode或datanode之间的任何活动来删除过度复制的HDFS文件块。有没有办法监视或强制复制作业?
答案 0 :(得分:21)
更改dfs.replication
仅适用于您创建的新文件,但不会修改现有文件的复制因子。
要更改已存在的文件的复制因子,您可以运行以下命令,该命令将以递归方式运行在HDFS中的所有文件中:
hadoop dfs -setrep -w 1 -R /
答案 1 :(得分:5)
当您将默认复制因子从3更改为让来自cloudera manager的2说
Cloudera Manager(CDH 5.0.2) -> HDFS -> Configuration -> View and Edit -> Service-Wide -> Replication -> Replication Factor (dfs.replication) -> 2
然后只写入新数据,每个块有2个副本。
请使用
hdfs dfs -setrep 2 /
如果要更改所有现有数据的复制因子,请在命令行上(通常是具有HDFS网关角色的节点)。此命令以递归方式更改根目录/.
下所有文件的复制因子<强>语法:强>
hdfs dfs -setrep [-R] [-w] <numReplicas> <path>
where
-w flag requests that the command wait for the replication to complete and can take a very long time
-R flag is just for backwards compatibility and has no effect
<强>参考:强>
答案 2 :(得分:0)
新的复制因子仅影响新文件。更改在shell中运行的现有文件的复制因子(在具有hadoop入口点的节点上)
hadoop fs -setrep -w <replication factor> -R /
但是,只有&#34; hdfs&#34;可以写入/(&#34; hdfs&#34;是超级用户,而不是&#34; root&#34;)。所以,你可能必须运行这个:
sudo -u hdfs hadoop fs -setrep -w <replication factor> -R /
答案 3 :(得分:-7)
也许你可以编写一个map函数来删除文件块!