1

尝试使用 MapReduce 程序将记录插入 cassandra,从减少作业中得到以下错误。

13/03/29 07:39:34 INFO mapred.JobClient: Task Id : attempt_201303281807_0009_r_000000_0, Status : FAILED
java.io.IOException: InvalidRequestException(why:TimeUUID should be 16 or 0 bytes (3))
    at org.apache.cassandra.hadoop.ColumnFamilyRecordWriter$RangeClient.run(ColumnFamilyRecordWriter.java:309)
Caused by: InvalidRequestException(why:TimeUUID should be 16 or 0 bytes (3))
    at org.apache.cassandra.thrift.Cassandra$batch_mutate_result.read(Cassandra.java:20350)
    at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
    at org.apache.cassandra.thrift.Cassandra$Client.recv_batch_mutate(Cassandra.java:926)
    at org.apache.cassandra.thrift.Cassandra$Client.batch_mutate(Cassandra.java:912)
    at org.apache.cassandra.hadoop.ColumnFamilyRecordWriter$RangeClient.run(ColumnFamilyRecordWriter.java:301

slicePredicate 定义是

SlicePredicate predicate = new SlicePredicate().setSlice_range(new SliceRange(ByteBuffer.wrap(new byte[16]), ByteBuffer.wrap(new byte[16]), false, 150));
        ConfigHelper.setInputSlicePredicate(conf, predicate);

我已经尝试了其他几个 api 来设置 sliceRange 而不使用。例如其他 api:https://code.google.com/p/skltpservices/source/browse/Components/log-analyzer/trunk/src/main/java/se/skl/skltpservices/components/analyzer/domain/TimeUUID。 java?spec=svn1939&r=1939

列族定义为:

create column family myColumnFamily
  with column_type = 'Standard'
  and comparator = 'TimeUUIDType'
  and default_validation_class = 'UTF8Type'
  and key_validation_class = 'UTF8Type'
  and read_repair_chance = 0.1
  and dclocal_read_repair_chance = 0.0
  and gc_grace = 864000
  and min_compaction_threshold = 4
  and max_compaction_threshold = 32
  and replicate_on_write = true
  and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
  and caching = 'KEYS_ONLY'
  and compression_options = {'sstable_compression' : 'org.apache.cassandra.io.compress.SnappyCompressor'};

感谢在 Column 系列中使用 TimeUUIDType 比较器并使用 Mapreduce 插入的任何帮助。

4

0 回答 0