web-dev-qa-db-ja.com

Hadoopgzip圧縮ファイル

私はHadoopを初めて使用し、ウィキペディアのダンプを処理しようとしています。これは6.7GBのgzip圧縮xmlファイルです。 hadoopはgzip圧縮ファイルをサポートしているが、解凍できるのは1つのマッパーのみであるため、1つのジョブでマッパーのみが処理できることを読みました。これにより、処理が制限されるようです。代替手段はありますか? xmlファイルを解凍して複数のチャンクに分割し、gzipで再圧縮するようなものです。

私はhadoopgzipについて http://researchcomputing.blogspot.com/2008/04/hadoop-and-compressed-files.html から読みました

ご協力いただきありがとうございます。

18
Boolean

GZIPコーデックで圧縮されたファイルは、このコーデックの動作方法のために分割できません。 Hadoopの単一のSPLITは、単一のマッパーでのみ処理できます。したがって、単一のGZIPファイルは単一のマッパーでのみ処理できます。

この制限を回避するには、少なくとも3つの方法があります。

  1. 前処理ステップとして:ファイルを解凍し、分割可能コーデック(LZO)を使用して再圧縮します。
  2. 前処理ステップとして:ファイルを解凍し、小さなセットに分割して再圧縮します。 ( これを参照
  3. これを回避する方法を可能にするHadoop(私が書いた)にこのパッチを使用してください: Splittable Gzip

HTH

21
Niels Basjes

これは、HDFSにおける最大の誤解の1つです。

はい、gzipファイルとして圧縮されたファイルはMapReduceで分割できませんが、コーデックとしてのGZipがHDFSで値を持たず、分割可能にできないことを意味するわけではありません。

コーデックとしてのGZipは、RCFiles、Sequence Files、Arvo Files、およびその他の多くのファイル形式で使用できます。これらの分割可能な形式でGzipコーデックを使用すると、Gzipと分割可能なコンポーネントから優れた圧縮とかなり優れた速度が得られます。

8
Ted Malaska

コーデックの制限により、GZIPファイルをパーティション分割することはできません。 6.7GBは実際にはそれほど大きくないので、1台のマシンで解凍して(1時間以内で完了します)、XMLをHDFSにコピーします。次に、HadoopでウィキペディアXMLを処理できます。

Cloud9 には WikipediaPageInputFormat クラスが含まれています。このクラスを使用してHadoopでXMLを読み取ることができます。

3
bajafresh4life

解凍して、代わりにSplittable LZ圧縮を使用してみませんか?m

http://blog.cloudera.com/blog/2009/11/hadoop-at-Twitter-part-1-splittable-lzo-compression/

0
Corey J. Nolet