标签: hector

Cassandra服务器抛出java.lang.AssertionError:DecoratedKey(...)!= DecoratedKey

我正在尝试Cassandra.

在客户端(使用Hector),我查找了几个这样的键:

ColumnFamilyResult<String, String> result = template.queryColumns(Arrays.asList("key1","key2","key3"));
Run Code Online (Sandbox Code Playgroud)

大部分时间似乎都有效.但有时我在客户端上遇到超时异常:

Caused by: me.prettyprint.hector.api.exceptions.HTimedOutException: TimedOutException()
    at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:35)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate$1.execute(ThriftColumnFamilyTemplate.java:100)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate$1.execute(ThriftColumnFamilyTemplate.java:88)
    at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:103)
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:258)
    at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate.sliceInternal(ThriftColumnFamilyTemplate.java:88)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate.doExecuteSlice(ThriftColumnFamilyTemplate.java:46)
    at me.prettyprint.cassandra.service.template.ColumnFamilyTemplate.queryColumns(ColumnFamilyTemplate.java:113)
    at info.gamlor.experiments.Cassandra.readObjectByKey(ComplexCassandra.java:255)

Caused by: TimedOutException()
    at org.apache.cassandra.thrift.Cassandra$get_slice_result.read(Cassandra.java:7772)
    at org.apache.cassandra.thrift.Cassandra$Client.recv_get_slice(Cassandra.java:570)
    at org.apache.cassandra.thrift.Cassandra$Client.get_slice(Cassandra.java:542)
    at me.prettyprint.cassandra.service.template.ThriftColumnFamilyTemplate$1.execute(ThriftColumnFamilyTemplate.java:95)
Run Code Online (Sandbox Code Playgroud)

在服务器上,此异常显示:

ERROR 11:33:55,312 Exception in thread Thread[ReadStage:91,5,main]
java.lang.AssertionError: DecoratedKey(4948402862350542345439897754126541659, 6932) != DecoratedKey(132475956107784875457507977471906551877, 726f6f74) in C:\tem
p\cassandra\lib\cassandra\data\CassandraPolepos\ComplexObjects\CassandraPolepos-ComplexObjects-hd-2-Data.db
        at org.apache.cassandra.db.columniterator.SSTableSliceIterator.<init>(SSTableSliceIterator.java:58)
        at org.apache.cassandra.db.filter.SliceQueryFilter.getSSTableColumnIterator(SliceQueryFilter.java:66)
        at org.apache.cassandra.db.filter.QueryFilter.getSSTableColumnIterator(QueryFilter.java:78)
        at org.apache.cassandra.db.CollationController.collectAllData(CollationController.java:256)
        at org.apache.cassandra.db.CollationController.getTopLevelColumns(CollationController.java:63)
        at org.apache.cassandra.db.ColumnFamilyStore.getTopLevelColumns(ColumnFamilyStore.java:1331)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1193)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1128)
        at org.apache.cassandra.db.Table.getRow(Table.java:378)
        at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:69)
        at …
Run Code Online (Sandbox Code Playgroud)

cassandra hector

59
推荐指数
1
解决办法
2993
查看次数

Cassandra Client Java API

我最近开始使用Cassandra数据库.现在我正在评估Cassandra client我们应该推进哪些方面.

我已经在stackoverflow上看到关于哪个客户端用于Cassandra的各种帖子,但没有一个有非常确定的答案.

我的团队已经让我对此进行一些研究,并pros and consCassandra Client API’sJava中的每一个做出一定的研究.

正如我所提到的,我最近参与其中,Cassandra所以没有那么多想法为什么某些人选择Pelops client以及为什么某些人和Astyanax其他客户一起去.

我知道每个Cassandra客户的简短介绍,我的意思是我能够完成这项工作并开始阅读和写入Cassandra数据库.

以下是我到目前为止的信息.

CASSANDRA APIS

  • Hector(Production-Ready)
    最稳定的Java API,为黄金时段做好准备.

  • Astyanax(The Up and Comer)
    来自Netflix的干净Java API.它没有Hector广泛使用,但它是坚实的.


  • 符合JPA标准的Kundera(NoSQL ORM),当您想通过对象与Cassandra进行交互时,这很方便.
    这在一定程度上限制了您将无法拥有动态数量的列/名称等.但它确实允许您移植到ORM,或将存储集中到Cassandra以获得更多传统用途.

  • Pelops
    我只是简单地使用了Pelops.这是一个直接的API,但似乎没有它背后的动力.

  • PlayORM(没有约束的ORM?)
    我刚才听说过这个.看起来它试图通过引入JQL来解决传统的基于JPA的ORM和NoSQL之间的阻抗不匹配问题.看起来很有希望.

  • 节俭(避免我!)
    这是"低级"API.

以下是我们决定的优先事项Cassandra Client-

  • 首要任务是:低延迟开销,Asynch API以及生产环境的可靠性/稳定性.
    (例如,包含客户端的DAL中可以使用的用户友好的API).
  • 连接池和分区感知是其他一些很好的功能.
  • 能够检测到添加的任何新节点.
  • 良好的支持(如下院长指出)

任何人都可以对此提出一些想法吗?此外,每个Cassandra Client客户都可以满足我的要求的任何利弊也将有很大的帮助.

我相信,主要是我将围绕着Astyanax client or New Datastax client that uses Binary protocol我的研究基础到目前为止.但是没有某些信息可以支持我的研究并将其呈现给我的团队.

Astyanax客户端和New Datastax客户端(使用新的二进制协议)之间的任何比较都将有很大帮助.

这对我的研究有很大的帮助,并且会从过去使用不同客户的不同人那里获得很多相关知识.

java cassandra hector pelops astyanax

48
推荐指数
2
解决办法
3万
查看次数

你为什么不开始使用"单一和小型"Cassandra服务器,就像你通常使用MySQL一样?

对于刚开始的任何网站,负载最初是最小的并且最初以缓慢的速度增长.人们通常从他们基于MySQL的站点开始,使用单个服务器(***也是VPS而不是专用服务器)作为应用服务器和数据库服务器运行,并且通常在这种设置下太过分了而且只是因为他们觉得需要他们将数据库与应用服务器分开,为其提供单独的VPS服务器.这是初创公司在规划资源采购时期望的事情.

但到目前为止,我所看到的,与Cassandra有很大的不同.人们通常建议开始使用至少一个3节点集群(在专用服务器上),它有大量的RAM.他们建议开始使用4GB或8GB RAM.因此,与MySQL相比,Cassandra需要更多的硬件资源,因为网站可以提供类似的性能,提供类似的负载/流量和相同数量的数据.我了解Cassandra由于复制而对存储的更高要求,但其他硬件资源呢?

我们不能像基于Cassandra的应用程序一样从MySQL开始.从1或2 VPS开始,并在需要时添加更多?

编辑:

我不想比较苹果和橘子.我只是想知道当我开始使用基于VPS的单个节点的基于cassandra的单个节点基于VPS的MySQL安装时,我可能处于更危险的情况.这两种情况之间的区别.cassandra服务器比MySQL服务器更容易出现吗?如果我将tomcat与Cassandra一起使用,因为人们在单个服务器上使用LAMP堆栈,那会有什么不好.

database cassandra nosql hector

27
推荐指数
3
解决办法
1万
查看次数

Hector与Astyanax为Cassandra

我们正在以Cassandra作为数据库开始一个新的java web项目.该团队对RDBMS/JPA/Hibernate/Spring非常有经验,但对NoSQL世界来说却是一个新手.我们希望以尽可能简单的设置开始开发. Hector似乎是连接Cassandra的首选和受欢迎的选择.但是,Netflix最近提供了Astyanax,它起源于Hector.使用这两种技术的人可以分享他们的经验吗?我正在寻找简单的设置,良好的文档和简单/干净的使用.关于其他api的建议也是受欢迎的.

java cassandra nosql hector astyanax

19
推荐指数
1
解决办法
5953
查看次数

JUnit使用嵌入式服务器测试Cassandra

对于将数据保存到nosql数据存储的代码,编写单元测试的最佳方法是什么,在我们的例子中是cassandra?

=>我们使用嵌入式服务器方法使用来自git hub的实用程序(https://github.com/hector-client/hector/blob/master/test/src/main/java/me/prettyprint/hector/testutils/EmbeddedServerHelper .java).但是我一直在看这个问题.1)它将数据保存在多个测试用例中,这使得我们很难确保测试类的测试用例中的数据不同.我尝试在每个测试用例之后调用cleanUp @Ahech,但这似乎并没有清理数据.2)当我们添加更多测试时,我们的内存不足,这可能是因为1,但我还不确定.我目前有1G堆大小来运行我的构建.

=>我一直在想的另一种方法是模拟cassandra存储.但这可能会泄漏cassandra模式中的一些问题,因为我们经常发现上述方法可以解决数据存储到cassandra中的问题.

请让我知道你对此的想法,如果有人使用过EmbeddedServerHelper并且熟悉我提到的问题.


只是一个更新.通过在测试嵌入式服务器使用的cassandra.yaml中将in_memory_compaction_limit_in_mb参数更改为32,我能够解决2)运行构建时用尽java堆空间问题.以下链接帮助我http://www.datastax.com/docs/0.7/configuration/storage_configuration#in-memory-compaction-limit-in-mb.它是64并且在压实期间始终失败.

testing junit unit-testing cassandra hector

18
推荐指数
2
解决办法
2万
查看次数

Cassandra Hector:如何检索列族的所有行?

我正在寻找一个代码示例来检索列族的所有行和所有列.就像是:

SELECT * FROM MyTable
Run Code Online (Sandbox Code Playgroud)

我看到这可以使用RangeSlicesQuery完成,但你仍然需要提供一定的范围.我认为你也必须指定列名.有干净安全的方法吗?

使用Hector 1.0和Cassandra 1.0.

cassandra hector

17
推荐指数
1
解决办法
1万
查看次数

在cassandra关闭之前,每次都以编程方式将数据刷新到cassandra

我正在使用嵌入式Cassandra.当我关闭并重新启动我的Cassandra服务数据时会丢失.我认为正常的数据没有正确刷入磁盘.所以我尝试使用nodetool手动刷新数据并检查数据是否可用.但是nodetool似乎不适用于嵌入式Cassandra服务.我收到以下错误:

c:\vijay\cassandra\bin>nodetool -host 192.168.2.86 -p 7199 drain

Starting NodeTool

Failed to connect to '192.168.2.86:7199': Connection refused: connect

我尝试设置jmx属性仍然是我收到错误.我在代码中添加了以下行:

System.setProperty("com.sun.management.jmxremote", "true");
System.setProperty("com.sun.management.jmxremote.port", "7197");
System.setProperty("com.sun.management.jmxremote.authenticate", "false");
System.setProperty("com.sun.management.jmxremote.ssl", "false");
System.setProperty("java.rmi.server.hostname", "my ip");
Run Code Online (Sandbox Code Playgroud)

那么,有没有办法在不使用nodetool的情况下手动将数据刷新到Cassandra?

编辑1:
经过几个小时的尝试后,我现在能够运行nodetool(而不是将jmx配置添加到我添加到Eclipse调试配置的代码中,并且它有效).我现在运行drain命令将数据正确刷新到磁盘.所以现在我的问题是:为什么数据没有正确刷新?每当我重新启动Cassandra服务时,最近的更改都消失了.

java cassandra hector

17
推荐指数
1
解决办法
2437
查看次数

使用Hector在Cassandra中查询CompositeType列

这是我面临的情景样本.说我有这个列族:

    create column family CompositeTypeCF 
    with comparator = 'CompositeType(IntegerType,UTF8Type)' 
    and key_validation_class = 'UTF8Type' 
    and default_validation_class = 'UTF8Type'
Run Code Online (Sandbox Code Playgroud)

下面是一些使用Hector的示例Java代码,了解如何将一些数据插入此列族:

 Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "192.168.1.6:9160");
 Keyspace keyspaceOperator = HFactory.createKeyspace("CompositeTesting", cluster);
 Composite colKey1 = new Composite();
 colKey1.addComponent(1, IntegerSerializer.get());
 colKey1.addComponent("test1", StringSerializer.get());
 Mutator<String> mutator = HFactory.createMutator(keyspaceOperator, StringSerializer.get());
 Mutator<String> addInsertion = mutator.addInsertion("rowkey1", "CompositeTypeCF",
     HFactory.createColumn(colKey1, "Some Data", new CompositeSerializer(), StringSerializer.get()));
 mutator.execute();
Run Code Online (Sandbox Code Playgroud)

这是有效的,如果我去cassandra-cli做一个列表,我得到这个:

$ list CompositeTypeCF;

Using default limit of 100
-------------------
RowKey: rowkey1
=> (column=1:test1, value=Some Data, timestamp=1326916937547000)
Run Code Online (Sandbox Code Playgroud)

我现在的问题是:如何在Hector中查询这些数据?基本上我需要以几种方式查询它:

  1. 给我整行Row Key ="rowkey1"
  2. 给我列数据,其中列名的第一部分=某个整数值
  3. 给我列名称的第一部分在特定范围内的所有列

java cassandra hector composite-types

13
推荐指数
1
解决办法
6477
查看次数

在Apache Cassandra + Hector + Java中的键空间上插入行

我正在研究使用Java和Hector的Apache Cassandra 0.7.6版,我尝试创建一个集群,一个密钥空间并在创建的密钥空间中插入一列.

通过查看示例,我了解到键空间等同于SQL数据库中的数据库,而列族与表相同.知道这一点,我试图创建我的简单示例结构.

 Cluster tutorialCluster = HFactory.getOrCreateCluster("TutorialCluster","127.0.0.1:9160");
 ConfigurableConsistencyLevel ccl = new ConfigurableConsistencyLevel();

 ccl.setDefaultReadConsistencyLevel(HConsistencyLevel.ONE);

 Keyspace tutorialKeyspace = HFactory.createKeyspace("Tutorial", tutorialCluster, ccl);
 Mutator<String> mutator = HFactory.createMutator(tutorialKeyspace, stringSerializer);

 mutator.addInsertion("CA Burlingame", "StateCity", HFactory.createColumn(650L, "37.57x122.34", longSerializer, stringSerializer));

 MutationResult mr = mutator.execute();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在cassandra启动时运行它,但它返回一个异常.

Exception in thread "main" me.prettyprint.hector.api.exceptions.HInvalidRequestException: InvalidRequestException(why:Keyspace Tutorial does not exist)
at me.prettyprint.cassandra.connection.HThriftClient.getCassandra(HThriftClient.java:70)
at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:226)
Run Code Online (Sandbox Code Playgroud)

但我已经创建了"Tutorial"键空间,并在mutator中使用.

java cassandra nosql hector

12
推荐指数
1
解决办法
2626
查看次数

Cassandra连接的健康检查(使用hector)?

对于我的应用程序的操作监视,我正在寻找类似于常用的"SQL连接验证"查询

选择1;

在Cassandra,使用Hector驱动程序.我尝试过像Cluster.getKnownPoolHosts()和.getConnectionManager().getActivePools()这样的事情.但是,只有当我真正尝试使用查询访问Cassandra时,它们的状态似乎才会不断更新.

我希望我的运行状况检查独立于任何需要存在的键空间或用户CF,因此只运行"虚拟"查询似乎很困难(针对什么?).当然,它不应占用大量内存或产生任何重大负载.

我可以以某种方式强制Hector更新其连接池状态而不运行真正的查询吗?

(顺便说一句:CQL甚至不接受"SELECT 1"作为有效查询.)

cassandra hector

12
推荐指数
2
解决办法
9985
查看次数