web-dev-qa-db-ja.com

あるHDFSから別のHDFSにデータをコピーする方法は?

2つのHDFSセットアップがあり、HDFS1からHDFS2にいくつかのテーブルをコピー(移行または移動ではなく)したい。あるHDFSから別のHDFSにデータをコピーする方法は? Sqoopまたは他のコマンドライン経由で可能ですか?

14
sharp

DistCp(分散コピー)は、クラスター間でデータをコピーするために使用されるツールです。 MapReduceを使用して、その配布、エラー処理と回復、およびレポートを実行します。ファイルおよびディレクトリのリストをマップタスクへの入力に展開し、それぞれがソースリストで指定されたファイルのパーティションをコピーします。

使用法:$ hadoop distcp <src> <dst>

例:$ hadoop distcp hdfs://nn1:8020/file1 hdfs://nn2:8020/file2

file1からnn1nn2にファイル名file2でコピーされます

Distcpは現在のところ最高のツールです。 Sqoopは、リレーショナルデータベースからHDFSへ、またはその逆にデータをコピーするために使用されますが、HDFSからHDFS間ではコピーされません。

詳細:

2つのバージョンがあります-distcp2の実行時パフォーマンスは、distcpと比較して

27
Avinash Reddy

Hadoopには、distcpと呼ばれる便利なプログラムが付属しており、Hadoopファイルシステムとの間で大量のデータを並行してコピーできます。 distcpの標準的な使用例は、2つのHDFSクラスター間でデータを転送するためです。クラスタが同一バージョンのhadoopを実行している場合、hdfsスキームを使用するのが適切です。

$ hadoop distcp hdfs://namenode1/foo hdfs://namenode2/bar

Namenode1の/fooディレクトリ内のデータは、namenode2の/ barディレクトリにコピーされます。 /barディレクトリが存在しない場合は、作成されます。また、複数のソースパスに言及することもできます。

rsyncコマンドと同様に、distcpコマンドはデフォルトで既に存在するファイルをスキップします。 -overwriteオプションを使用して、宛先ディレクトリの既存のファイルを上書きすることもできます。オプション-updateは、変更されたファイルのみを更新します。

$ hadoop distcp -update hdfs://namenode1/foo hdfs://namenode2/bar/foo

distcpは、クラスター全体で並行して実行されるマップによってコピーの作業が行われるMapReduceジョブとして実装することもできます。レデューサーはありません。

異なるバージョンを実行している2つのHDFSクラスター間でデータをコピーしようとすると、RPCシステムに互換性がないため、コピープロセスが失敗します。その場合、ソースから読み取るには、読み取り専用のHTTPベースのHFTPファイルシステムを使用する必要があります。ここで、ジョブは宛先クラスターで実行する必要があります。

$ hadoop distcp hftp://namenode1:50070/foo hdfs://namenode2/bar

50070は、namenodeの組み込みWebサーバーのデフォルトのポート番号です。

15
Baban Gaigole

distcpは、hadoopファイルシステムとの間でデータを並行してコピーするために使用されます。これは、一般的なhadoop fs -cpコマンド。バックグラウンドプロセスでは、distcpはMapReduceジョブとして実装され、マッパーはクラスター全体に並行してコピーするためにのみ実装されます。

使用法:

  • あるファイルを別のファイルにコピーする

    % hadoop distcp file1 file2

  • ある場所から別の場所にディレクトリをコピーする

    % hadoop distcp dir1 dir2

dir2が存在しない場合は、そのフォルダーを作成して内容をコピーします。 dir2は既に存在し、dir1はその下にコピーされます。 -overwriteオプションは、同じフォルダー内でファイルを強制的に上書きします。 -updateオプションは、変更されたファイルのみを更新します。

  • 2つのHDFSクラスター間でデータを転送する

    % hadoop distcp -update -delete hdfs://nn1/dir1 hdfs://nn2/dir2

-deleteオプションは、ソースに存在しないファイルまたはディレクトリを宛先から削除します。

dtIngest を試してください。これは Apache Apex プラットフォーム上で開発されています。このツールは、HDFS、共有ドライブ、NFS、FTP、Kafkaなどのさまざまなソースからさまざまなソースにデータをコピーします。リモートHDFSクラスターからローカルHDFSクラスターへのデータのコピーは、dtIngestでサポートされています。 dtIngestはデータを並行してコピーするためにyarnジョブを実行するため、非常に高速です。障害処理、リカバリなどの面倒を見て、定期的なディレクトリのポーリングをサポートして、継続的なコピーを実行します。

使用法:dtingest [オプション] ... SOURCEURL ... DESTINATIONURLの例:dtingest hdfs:// nn1:8020/source hdfs:// nn2:8020/dest

1
priya

distcpコマンドは、あるクラスターから別のクラスターに並行してコピーするために使用します。 srcのnamenodeのパスとdstのnamenodeのパスを設定する必要があります。内部ではマッパーを使用します。

例:

$ hadoop distcp <src> <dst>

distcpに設定できるオプションはほとんどありません

-m noの場合データをコピーするためのマッパーを使用すると、コピー速度が向上します。

-atomicデータを自動コミットする場合。

-updateは、古いバージョンのデータのみを更新します。

Hadoopにファイルをコピーするための一般的なコマンドは-cpと-putがありますが、データボリュームが少ない場合にのみ使用されます。

0
Pankaj Mandale

次のように、ソースまたはターゲットクラスターのいずれかを使用して、基になるMapReduceジョブを実行できることに注意してください。

hadoop --config /path/to/hadoop/config distcp <src> <dst>
0
Paul Back