これによると Cloudera post 、Snappy IS分割可能。
MapReduceの場合、圧縮データを分割可能にする必要がある場合、BZip2、LZO、およびSnappy形式は分割可能ですが、GZipは分割可能ではありません。分割可能性はHBaseデータとは関係ありません。
しかし、Hadoopの決定的なガイドによると、Snappyは分割できません。
Web上にはいくつかの矛盾する情報もあります。分割可能だと言う人もいれば、そうではないと言う人もいます。
どちらも正しいですが、レベルが異なります。
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>
スナッピーブロックは分割可能ではありませんが、スナッピーブロックを含むファイルは分割可能です。
Hadoop内のすべての分割可能なコーデックはorg.Apache.hadoop.io.compress.SplittableCompressionCodec
を実装する必要があります。 2.7の時点でのhadoopソースコードを見ると、org.Apache.hadoop.io.compress.SnappyCodec
がこのインターフェースを実装していないことがわかります。したがって、分割可能ではないことがわかります。
単純なJSONファイルとsnappyで圧縮されたものの間で、同じ数のワーカー/プロセッサーに対して、HDFSでSpark 1.6.2を使用してテストしました。
Snappyファイルは次のように作成されます:.saveAsTextFile("/user/qwant/benchmark_file_format/json_snappy", classOf[org.Apache.hadoop.io.compress.SnappyCodec])
したがって、SnappyはJSONの場合Sparkで分割可能ではありません。
ただし、JSONの代わりにparquet(またはORC)ファイル形式を使用すると、これは分割可能になります(gzipを使用する場合でも)。