web-dev-qa-db-ja.com

Snappyは分割可能ですか、分割不可能ですか?

これによると Cloudera post 、Snappy IS分割可能。

MapReduceの場合、圧縮データを分割可能にする必要がある場合、BZip2、LZO、およびSnappy形式は分割可能ですが、GZipは分割可能ではありません。分割可能性はHBaseデータとは関係ありません。

しかし、Hadoopの決定的なガイドによると、Snappyは分割できません。 enter image description here

Web上にはいくつかの矛盾する情報もあります。分割可能だと言う人もいれば、そうではないと言う人もいます。

11
LuckyGuess

どちらも正しいですが、レベルが異なります。

Clouderaブログによると http://blog.cloudera.com/blog/2011/09/snappy-and-hadoop/

注意すべきことの1つは、Snappyは
プレーンテキストで直接使用するのではなく、シーケンスファイルやAvroデータファイルなどのコンテナ形式。後者は分割できず、MapReduceを使用して並行して処理できないためです。これはLZOとは異なり、LZO圧縮ファイルにインデックスを付けて分割点を決定し、LZOファイルを後続の処理で効率的に処理できるようにします。

これは、テキストファイル全体がSnappyで圧縮されている場合、ファイルは分割可能ではないことを意味します。ただし、ファイル内の各レコードがSnappyで圧縮されている場合、ファイルは分割可能になる可能性があります。たとえば、ブロック圧縮のシーケンスファイルの場合です。

より明確にするために、同じではありません:

<START-FILE>
  <START-SNAPPY-BLOCK>
     FULL CONTENT
  <END-SNAPPY-BLOCK>
<END-FILE>

より

<START-FILE>
  <START-SNAPPY-BLOCK1>
     RECORD1
  <END-SNAPPY-BLOCK1>
  <START-SNAPPY-BLOCK2>
     RECORD2
  <END-SNAPPY-BLOCK2>
  <START-SNAPPY-BLOCK3>
     RECORD3
  <END-SNAPPY-BLOCK3>
<END-FILE>

スナッピーブロックは分割可能ではありませんが、スナッピーブロックを含むファイルは分割可能です。

26
RojoSam

Hadoop内のすべての分割可能なコーデックはorg.Apache.hadoop.io.compress.SplittableCompressionCodecを実装する必要があります。 2.7の時点でのhadoopソースコードを見ると、org.Apache.hadoop.io.compress.SnappyCodecがこのインターフェースを実装していないことがわかります。したがって、分割可能ではないことがわかります。

3
qwwqwwq

単純なJSONファイルとsnappyで圧縮されたものの間で、同じ数のワーカー/プロセッサーに対して、HDFSでSpark 1.6.2を使用してテストしました。

  • JSON:それぞれ12GBの4つのファイル、Sparkは388のタスクを作成します(HDFSブロックごとに1つのタスク)(4 * 12GB/128MB => 384)
  • Snappy:それぞれ3GBの4つのファイル、Sparkは4つのタスクを作成します

Snappyファイルは次のように作成されます:.saveAsTextFile("/user/qwant/benchmark_file_format/json_snappy", classOf[org.Apache.hadoop.io.compress.SnappyCodec])

したがって、SnappyはJSONの場合Sparkで分割可能ではありません。

ただし、JSONの代わりにparquet(またはORC)ファイル形式を使用すると、これは分割可能になります(gzipを使用する場合でも)。

1
Thomas Decaux