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

prdp8dxp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(335)

我正在尝试转储压缩列族的pig关系。它是一个值为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);

但当我扔掉它的时候,它看起来还是二进制的。
是压缩处理不透明还是我遗漏了什么?我在谷歌上搜索了一下,但没有看到关于这个问题的任何东西。同时我也在使用datasax enterprise。3.1. 提前谢谢!

zujrkrfu

zujrkrfu1#

我能解决这个问题。dao中使用java.util.zip.deflater/inflater进行了另一层压缩,并在cf上定义了snapy压缩。解决方案是扩展cassandrastorage并重写getnext()方法。新的实现调用super.getnext(),并在适当的地方膨胀元组。

相关问题