在snappy压缩列系列上运行hadoop作业

时间:2014-04-23 21:17:31

标签: hadoop cassandra apache-pig datastax snappy

我正在尝试转储压缩列族的猪关系。它是一个单独的列,其值为json blob。它通过snappy压缩进行压缩,值验证器为BytesType。在我创建关系和转储后,我得到了垃圾。这是描述:

ColumnFamily: CF
  Key Validation Class: org.apache.cassandra.db.marshal.TimeUUIDType
  Default column value validator: org.apache.cassandra.db.marshal.BytesType
  Cells sorted by: org.apache.cassandra.db.marshal.UTF8Type
  GC grace seconds: 86400
  Compaction min/max thresholds: 2/32
  Read repair chance: 0.1
  DC Local Read repair chance: 0.0
  Populate IO Cache on flush: false
  Replicate on write: true
  Caching: KEYS_ONLY
  Bloom Filter FP chance: default
  Built indexes: []
  Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy
  Compression Options:
    sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor

然后我:

grunt> rows = LOAD 'cql://Keyspace/CF' using CqlStorage();

我也试过了:

grunt> rows = LOAD 'cql://Keyspace/CF' using CqlStorage()as (key: chararray, col1: chararray, value: chararray);

但是当我转储它时它仍然看起来像它的二进制文件。

压缩是不是透明处理还是我只是遗漏了什么?我做了一些谷歌搜索,但没有看到任何关于这个问题。我也在使用Datastax Enterprise。 3.1。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我能够解决这个问题。在DAO中发生了另一层压缩,它使用java.util.zip.Deflater / Inflater,以及CF上定义的snappy压缩。解决方案是扩展CassandraStorage并覆盖getNext()方法。新实现调用super.getNext()并在适当的位置膨胀元组。