Hadoop クラスターにロードされた tarball (access.logs.tar.gz) にあるログ ファイルがあります。解凍せずに豚に直接ロードする方法はあるのだろうか?
2 に答える
@ChrisWhiteの答えは技術的に正しいので、私の代わりに彼の答えを受け入れる必要があります(少なくともIMO)。
tar.gz
Hadoop を使用してファイルから離れなければなりません。Gzip ファイルは分割できないため、gzip ファイルが大きい場合、マッパーでホットスポットが発生する可能性があります。たとえば、.tar.gz
100 GB のファイルがある場合、計算を分割することはできません。
一方、それらは小さいとしましょう。その場合、Pig はそれらをまとめてうまく処理し、分割の問題は解消されます。これには、NameNode を使用して大量の小さなファイルを処理するという欠点があります。また、ファイルが小さいため、ファイルをより合理的な形式に再構成する計算コストは比較的安価です。
では、ファイルをどの形式に再構成する必要がありますか? 良い質問!
- それらすべてを 1 つの大きなブロック レベルの圧縮されたシーケンス ファイルに連結することは、最も困難ですが、パフォーマンスの点で最もやりがいがあります。
- もう 1 つは、圧縮を完全に無視してそれらのファイルを展開するか、少なくともそれらを連結することです (圧縮しないとパフォーマンス ヒットが見られます)。
- 最後に、ファイルを最大 100 MB のチャンクにブロブしてから gzip することができます。
ある種の tarball ローダーを piggybank に書き込むことは完全に合理的だと思いますが、個人的にはデータを別の方法でレイアウトしたいと考えています。
PigStorage はファイルが圧縮されていることを認識します (拡張子 .gz により、これは実際には PigTextInputFormat が拡張する TextInputFormat に実装されます)、その後は tar ファイルを扱うことになります。tar 内のファイル間のヘッダー行を処理できる場合は、PigStorage をそのまま使用できます。それ以外の場合は、PigTextInputFormat の独自の拡張機能を記述して、各ファイル間の tar ヘッダー行の削除を処理する必要があります。