12

hdfs -put を使用して、20GB の大きなファイルを hdfs にロードしています。現在、プロセスは 4 分で実行されます。hdfsにデータをロードする際の書き込み時間を改善しようとしています。さまざまなブロックサイズを利用して書き込み速度を改善しようとしましたが、以下の結果が得られました:

512M blocksize = 4mins;
256M blocksize = 4mins;
128M blocksize = 4mins;
64M blocksize = 4mins;

ボトルネックが何であるか、および -put コマンドのパフォーマンスを向上させるために調査できる他のオプションを知っている人はいますか?

4

3 に答える 3

14

20GB/4分で約85MB/秒になります。これは、HDFS プロトコルとネットワークのすべてのオーバーヘッドを考慮して、1 台のドライブから期待できるかなり妥当なスループットです。それがあなたのボトルネックだと思います。取り込みプロセスを変更しない限り、これを魔法のように高速化することはできません。

核となる問題は、20GB は適切な量のデータであり、そのデータが単一のストリームとして HDFS にプッシュされることです。Hadoop クラスターに多数のディスクがある場合、ディスク I/O によって制限されますが、これは非常に不十分です。

ご覧のとおり、ブロック サイズを変更しても、この動作は変更されません。ディスクから HDFS へのデータ量は同じです。

ファイルを 1GB のファイルに分割し、それらを複数のディスクに分散してから-put、並行してプッシュすることをお勧めします。ネットワークがボトルネックになる場合は、これらのファイルを複数のノードに分割することを検討することもできます。データの受信方法を変更して、これを高速化することはできますか? 明らかに、ファイルを分割して移動するのにも時間がかかります。

于 2013-10-24T17:34:35.450 に答える
2

distcp hadoop distcp -Ddfs.block.size=$[256*1024*1024] /path/to/inputdata /path/to/outputdata を使用して並列コピーを実行することもできます

于 2013-10-30T11:29:33.800 に答える