2013-07-23 3 views
8

Ich habe den Replikationsfaktor von 3 auf 1 reduziert, sehe jedoch keine Aktivität aus dem Namenode oder zwischen den Daten, um übermäßig replizierte HDFS-Dateiblöcke zu entfernen. Gibt es eine Möglichkeit, den Replikationsauftrag zu überwachen oder zu erzwingen?HDFS reduzierter Replikationsfaktor

Antwort

18

Die Änderung dfs.replication wird nur auf neue Dateien angewendet, die Sie erstellen, ändert jedoch nicht den Replikationsfaktor für die bereits vorhandenen Dateien.

Um Replikationsfaktor für Dateien zu ändern, die bereits vorhanden ist, können Sie den folgenden Befehl ausführen, die auf alle Dateien in HDFS rekursiv ausgeführt werden soll:

hadoop dfs -setrep -w 1 -R/
+0

Sollte es nicht sein 'hadoop fs -setrep -w 1 -R /'? – zeekvfu

+0

Idealerweise sollte es 'hadoop fs' sein. Aber obwohl "hadoop dfs" veraltet ist, funktioniert es immer noch. – daemon12

+1

@zeekvfu, in der Tat, mit der letzten Version von Apache hdfs muss es sein: hdfs dfs -setrep -w 2 -R / –

-7

Vielleicht können Sie eine Map-Funktion schreiben, um die Dateiblöcke zu entfernen!

4

Wenn Sie den Standard-Replikationsfaktor von 3 zu ändern ist, lassen sagen 2 von cloudera Manager

Cloudera Manager(CDH 5.0.2) -> HDFS -> Configuration -> View and Edit -> Service-Wide -> Replication -> Replication Factor (dfs.replication) -> 2 

dann wird für jeden Block 2 Repliken nur neue Daten geschrieben haben.

Bitte verwenden

hdfs dfs -setrep 2/

auf der Kommandozeile (in der Regel einen Knoten mit HDFS Gateway-Rolle), wenn Sie den Replikationsfaktor aller vorhandenen Daten ändern möchten. Dieser Befehl ändert rekursiv den Replikationsfaktor aller Dateien im Stammverzeichnis /.

Syntax:

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 

Referenz:

http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.2.0-cdh5.0.0-beta-2/hadoop-project-dist/hadoop-common/FileSystemShell.html#setrep

0

Der neue Replikationsfaktor wirkt sich nur auf neue Dateien. Um Replikationsfaktor für vorhandene Dateien in der Schale (auf dem Knoten mit hadoop Einstiegspunkt) laufen

hadoop fs -setrep -w <replication factor> -R/

Aber nur „hdfs“ schreiben kann/(„hdfs“ ist der Superuser, nicht „root“). So kann, werden Sie dies ausführen müssen:

sudo -u hdfs hadoop fs -setrep -w <replication factor> -R/