2016-05-02 9 views
0

SequenceFilesへの追加が非常に遅いようです。私たちは、小さなファイルを含むフォルダをファイル名をキーとして、内容を値としてSequenceFilesに変換しています。ただし、スループットは約2MB /秒(約2〜3ファイル/秒)と非常に低いです。私たちはMioを持っています。小さなファイルと最大3つのファイル/秒の私たちの目的のために信じられないほど遅いです。私たちがやっていることSequenceFileへのHDFSの追加が遅い

は単純です:

for(String file : files) { 
    byte[] data = Files.readAllBytes(Paths.get(dir.getAbsolutePath() 
        + File.separatorChar + file)); 
    byte[] keyBytes = l.getBytes("UTF-8"); 
    BytesWritable key = new BytesWritable(keyBytes); 
    BytesWritable val = new BytesWritable(data); 

    seqWriter.append(key, val); 
} 

任意のヒント、物事をスピードアップする方法についてのアイデア?

答えて

0

ほとんどの場合、犯人は圧縮されて書き込まれています(たとえば、gzipはネイティブlibをサポートしていません)。 seqWriterの設定方法については言及していないので、これは単なる推測です。

スピードアップのもう1つの点は、小さなファイルをダウンロードする待ち時間が実際の追加操作ではなく、ボトルネックになる可能性があるため、ファイルをバッチで、または非同期で並行してプリフェッチすることです。

appendがボトルネックの場合は、バッファサイズを増やすこともできます。 io.file.buffer.size(デフォルトは4k)を設定するか、BufferSizeOptionオプションを使用してライタービルダーに渡します。

+0

ファイルまたはHDFSを実行しているマシンでローカルに使用できます。私たちは圧縮を使用するので、私はそれを無効にしようとし、それなしでいくつかのベンチマークを行います。 – mroman

+0

いいえ、圧縮は実際のボトルネックではないようです。 – mroman

+0

@mromanその後、プロファイラをつかんで、何が長くかかるのか把握してください;) –

関連する問題