2013-07-23 22 views
8

レプリケーションファクタを3から1に減らしましたが、過度に複製されたHDFSファイルブロックを削除するためのネームノードまたはデータノード間のアクティビティはありません。レプリケーションジョブを監視または強制する方法はありますか?HDFS削減レプリケーションファクタ

答えて

18

変更するdfs.replicationは、作成した新しいファイルにのみ適用されますが、既存のファイルの複製係数は変更されません。あなたはの言うようにする3から、デフォルトの複製因子を変更すると

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

'hadoop fs -setrep -w 1 -R /'にするべきではありませんか? – zeekvfu

+0

理想的には、それは 'hadoop fs'です。しかし、 'hadoop dfs'は廃止されていますが、まだ動作しています。 – daemon12

+1

@zeekvfu、実際には、apache hdfsの最終リリースでは以下のようになります:hdfs dfs -setrep -w 2 -R / –

-7

多分ファイルブロックを削除するマップ関数を書くことができます!

4

すでに存在するファイルの複製ファクタを変更するには、HDFS内のすべてのファイルに再帰的に実行される次のコマンドを実行することができClouderaのManagerから2

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

、各ブロックの2つのレプリカを持って書かれた新しいデータのみ。あなたはすべての既存のデータの複製因子を変更したい場合は

コマンドライン(HDFSゲートウェイの役割を持つ一般ノード)に

hdfs dfs -setrep 2/

を使用してください。このコマンドは、ルートディレクトリ/の下にあるすべてのファイルの複製係数を再帰的に変更します。

構文:

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 

参考:

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

新しい複製因子は、新しいファイルのみに影響します。

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

(Hadoopのエントリポイントを持つノード上の)シェルで実行しかし、唯一の「HDFSは」/に書き込むことができ、既存のファイルの複製因子を変更するには(「HDFSは」スーパーユーザではなく、「ルート」です)。したがって、これを実行する必要があります:

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