2015-10-14 25 views
0

我有一個表,如:使用SSTableSimpleUnsortedWriter採用全鍵列的表

CREATE TABLE example (
    id TEXT, 
    time TIMESTAMP, 
    value TEXT, 
    PRIMARY KEY (id, time, value)); 

在代碼中有這樣的:

cmpType = CompositeType.getInstance(AsciiType.instance, 
            TimestampType.instance, 
            AsciiType.instance); 

SSTableSimpleUnsortedWriter writer = new SSTableSimpleUnsortedWriter(outputDir, 
     new Murmur3Partitioner(), keyspace, table, cmpType, null, sstSize); 

void write(String id, Date time, String value) { 
    long timestamp = System.currentTimeMillis() * 1000; 
    writer.newRow(bytes(id)); 
    writer.addColumn(
      cmpType.builder() 
        .add(TimestampType.instance.decompose(time)) 
        .add(bytes(value)) 
        .build(), 
      bytes(""), timestamp); 
} 

但我不知道,怎麼用addColumn在這種情況下是正確的。當我嘗試上傳使用sstableloader這樣的代碼卡桑德拉的結果,我得到:

java.util.concurrent.ExecutionException: org.apache.cassandra.streaming.StreamException: Stream failed 
    at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299) 
    at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286) 
    at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) 
    at org.apache.cassandra.tools.BulkLoader.main(BulkLoader.java:122) 
Caused by: org.apache.cassandra.streaming.StreamException: Stream failed 
    at org.apache.cassandra.streaming.management.StreamEventJMXNotifier.onFailure(StreamEventJMXNotifier.java:85) 
    at com.google.common.util.concurrent.Futures$4.run(Futures.java:1172) 
    at com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService.execute(MoreExecutors.java:297) 
    at com.google.common.util.concurrent.ExecutionList.executeListener(ExecutionList.java:156) 
    at com.google.common.util.concurrent.ExecutionList.execute(ExecutionList.java:145) 
    at com.google.common.util.concurrent.AbstractFuture.setException(AbstractFuture.java:202) 
    at org.apache.cassandra.streaming.StreamResultFuture.maybeComplete(StreamResultFuture.java:208) 
    at org.apache.cassandra.streaming.StreamResultFuture.handleSessionComplete(StreamResultFuture.java:184) 
    at org.apache.cassandra.streaming.StreamSession.closeSession(StreamSession.java:412) 
    at org.apache.cassandra.streaming.StreamSession.sessionFailed(StreamSession.java:617) 
    at org.apache.cassandra.streaming.StreamSession.messageReceived(StreamSession.java:472) 
    at org.apache.cassandra.streaming.ConnectionHandler$IncomingMessageHandler.run(ConnectionHandler.java:256) 
    at java.lang.Thread.run(Thread.java:745) 

回答

0

的解決方案是一些名稱添加到列最後一個非使用的價值:

writer.addColumn(
     cmpType.builder() 
       .add(TimestampType.instance.decompose(time)) 
       .add(bytes(value)) 
       .add(bytes("empty")) 
       .build(), 
     bytes(""), timestamp);