Cassandra 如何在CQL 3.0中使用sstableloader

Cassandra 如何在CQL 3.0中使用sstableloader,cassandra,bulkloader,cql3,cassandra-cli,Cassandra,Bulkloader,Cql3,Cassandra Cli,我正在尝试对使用CQL 3.0创建的表使用sstableloader 我在Cassandra中创建了一个带有CQL 3的表,如下所示: CREATE TABLE users1 ( id text PRIMARY KEY, firstname text, lastname text, ) WITH compaction={'class': 'SizeTieredCompactionStrategy'} AND compression={'sstable_compression':

我正在尝试对使用CQL 3.0创建的表使用sstableloader 我在Cassandra中创建了一个带有CQL 3的表,如下所示:

CREATE TABLE users1 (
  id text PRIMARY KEY,
  firstname text,
  lastname text, 
) WITH
compaction={'class': 'SizeTieredCompactionStrategy'} AND
 compression={'sstable_compression': 'SnappyCompressor'};
我使用SSTableImpleUseredWriter创建sstables,如下所示:

IPartitioner partitioner = new Murmur3Partitioner();
SSTableSimpleUnsortedWriter usersWriter = new SSTableSimpleUnsortedWriter(  
        directory, partitioner,keyspace,"users1",AsciiType.instance, null,64);
    long timestamp = System.currentTimeMillis() * 1000;
    ByteBuffer id = bytes("a11");
    usersWriter.newRow(id);
    usersWriter.addColumn(bytes("firstname"), bytes("Ticho"), timestamp);
    usersWriter.addColumn(bytes("lastname"), bytes("Richie"), timestamp);
    usersWriter.close();
    System.exit(0);
虽然生成了sstables,并且我成功地将sstables加载到EC2中的4节点集群中。但我不能质疑他们。它只是等待并最终给出一个RPC超时错误。 我可以使用使用CLI创建的columnfamily成功地进行上传和查询,如中所示

请告诉我如何将SSTABLESimpleUseredWriter与CQL一起正确使用


我的最终目标是使用CQL(复制SQL表)中的复合键创建columnfamily,并使用SSTableLoader从非常大的csv导出文件上载数据。

以下是用于cf的cli描述输出:

Key Validation Class: org.apache.cassandra.db.marshal.UTF8Type
Default column value validator: org.apache.cassandra.db.marshal.BytesType
Columns sorted by: org.apache.cassandra.db.marshal.CompositeType(org.apache.cassandra.db.marshal.UTF8Type)
您至少有三个问题:

  • 分区密钥验证程序使用的是AsciitType而不是UTF8Type。当ByteBufferUtil.bytes(字符串)调用编码为UTF8时,您不需要对它们做任何事情
  • CQL中的列名始终是复合类型,因此(只要不使用集合),您需要使用db.marshal.CompositeType构建列名,其中复合列表中的最后一个类型是UTF8
  • 请检查表的cli列表输出,其中包括一列,该列的名称和值为空,您需要添加,例如:

    RowKey:123 =>(列=,值=,时间戳=1376298826474000) =>(列=firstname,值=416c6578,时间戳=1376298826474000) =>(列=lastname,值=4861736c656875727374,时间戳=1376298826474000)


或者,您可以批量加载到与旧列族格式向后兼容的“静态列”表中:

CREATE TABLE users1 (
  id text PRIMARY KEY,
  firstname text,
  lastname text, 
) WITH COMPACT STORAGE;
SSTableLoader示例应使用老式的pre-CQL格式