问题描述
我正在测试通过Hector的Cassandra数据库连接。但是当我运行Junit测试时,我常常得到以下消息:
I'm testing the connection to Cassandra Database over Hector. But when I run the Junit Tests I constanly get following message:
java.lang.NoSuchFieldError:DEFAULT_MEMTABLE_THROUGHPUT_IN_MB
java.lang.NoSuchFieldError: DEFAULT_MEMTABLE_THROUGHPUT_IN_MB
有人知道我做错了什么?
Does somebody know what I do wrong?
感谢您的帮助,
Chris
Thanks for your help,Chris
-------------------------------------------------------------------------------
Test set: com.acolsolutions.trademaniac.CreateSchemaTest
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.287 sec <<< FAILURE!
testAddDropKeyspace(com.acolsolutions.trademaniac.CreateSchemaTest) Time elapsed: 0.218 sec <<< ERROR!
**java.lang.NoSuchFieldError: DEFAULT_MEMTABLE_THROUGHPUT_IN_MB**
at me.prettyprint.cassandra.service.ThriftCfDef.<init>(ThriftCfDef.java:119)
at me.prettyprint.hector.api.factory.HFactory.createColumnFamilyDefinition(HFactory.java:658)
at com.acolsolutions.trademaniac.CreateSchemaTest.testAddDropKeyspace(CreateSchemaTest.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:53)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:123)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:164)
at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:110)
at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:175)
at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(SurefireStarter.java:107)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:68)
这里的代码:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.acolsolutions.trademaniac;
import org.junit.*;
import static org.junit.Assert.*;
import com.acolsolutions.trademaniac.migrations.Schema;
import java.net.UnknownHostException;
import java.util.Arrays;
import javassist.NotFoundException;
import me.prettyprint.cassandra.service.CassandraHostConfigurator;
import me.prettyprint.cassandra.service.ThriftCluster;
import me.prettyprint.cassandra.service.ThriftKsDef;
import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
import me.prettyprint.hector.api.factory.HFactory;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;
/**
*
* @author charms
*/
public class CreateSchemaTest {
private ThriftCluster cassandraCluster;
private CassandraHostConfigurator cassandraHostConfigurator;
public CreateSchemaTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setupCase() throws TTransportException, TException, IllegalArgumentException,
NotFoundException, UnknownHostException, Exception {
cassandraHostConfigurator = new CassandraHostConfigurator("localhost:9160");
cassandraCluster = new ThriftCluster("Test Cluster", cassandraHostConfigurator);
}
@After
public void tearDown() {
}
// TODO add test methods here.
// The methods must be annotated with annotation @Test. For example:
//
// @Test
// public void hello() {}
@Test
public void testAddDropKeyspace() throws Exception {
ColumnFamilyDefinition cfDef = HFactory.createColumnFamilyDefinition("DynKeyspace", "DynCf");
cassandraCluster.addKeyspace(
new ThriftKsDef("DynKeyspace", "org.apache.cassandra.locator.SimpleStrategy", 1, Arrays.asList(cfDef)));
String ksid2 = cassandraCluster.dropKeyspace("DynKeyspace");
assertNotNull(ksid2);
// Now let's wait for schema agreement.
cassandraCluster.addKeyspace(new ThriftKsDef("DynKeyspace", "org.apache.cassandra.locator.SimpleStrategy", 1, Arrays.asList(cfDef)), true);
ksid2 = cassandraCluster.dropKeyspace("DynKeyspace", true);
assertNotNull(ksid2);
}
}
推荐答案
像您使用不兼容版本的Hector和Cassandra。用于调整memtable刷新的参数(例如DEFAULT_MEMTABLE_THROUGHPUT_IN_MB)在最近的版本中已更改,以简化调整过程。如果你能告诉我们你正在使用的Hector和Cassandra的版本,事情可能会变得更清楚...
Looks like you are using incompatible versions of Hector and Cassandra. The parameters for tuning memtable flushing (such as DEFAULT_MEMTABLE_THROUGHPUT_IN_MB) have been changed in recent versions to simplify the tuning process. If you can tell us precisely what versions of Hector and Cassandra you are using, things may become clearer...
这篇关于Hector& Cassandra发出NoSuchFieldError:DEFAULT_MEMTABLE_THROUGHPUT_IN_MB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!