複数のマッパーを使用して、Hadoop で 1 つの bzip2 ファイルのさまざまな部分を並行して読み取って、パフォーマンスを向上させることができると聞きました。しかし、検索しても関連するサンプルが見つかりません。関連するコード スニペットを教えていただければ幸いです。ありがとう。
ところで:gzipには同じ機能があります(複数のマッパーが1つのgzipファイルの異なる部分を並行して処理します)。
http://comments.gmane.org/gmane.comp.jakarta.lucene.hadoop.user/30662を見ると、bzip2 形式は実際に分割可能であり、複数のマッパーが 1 つのファイルで作業できることがわかります。パッチはhttps://issues.apache.org/jira/browse/HADOOP-4012で提出されました。ただし、HADOOP 0.21.0 以上でしか利用できないようです。
個人的な経験から、bzip2 のこの手法を使用するために必要なことは何も変わりません。Hadoop は、最小分割サイズに応じて自動的に取得する必要があります。
bzip2 はデータをブロック単位で圧縮したため、ブロック単位で解凍し、各ブロックを個別のマッパーに送信できます。ただし、gzip にはそのような手法がないため、これを別のマッパーに送信することはできません。
並列 bz2 圧縮と解凍の例については、pbzip2を参照してください。
並列の gzip もありますpigz。並列圧縮は行いますが、並列解凍は行いません。deflate 形式は、並列解凍には適していません。ただし、a) 履歴をリセットして特別な gzip ストリームを準備するか、b) 最初のパスで gzip ファイルにインデックスを作成することができます。どちらの方法でも、異なる部分を並行して読み取るか、より効率的なランダム アクセスを行うことができます。