java - Hector 和 Cassandra 问题 NoSuchFieldError : DEFAULT_MEMTABLE_THROUGHPUT_IN_MB

标签 java database nosql cassandra hector

我正在测试通过 Hector 与 Cassandra 数据库的连接。但是当我运行 Junit 测试时,我不断收到以下消息:

java.lang.NoSuchFieldError:DEFAULT_MEMTABLE_THROUGHPUT_IN_MB

有人知道我做错了什么吗?

感谢您的帮助, 克里斯

-------------------------------------------------------------------------------
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。用于调整内存表刷新的参数(例如 DEFAULT_MEMTABLE_THROUGHPUT_IN_MB)在最近的版本中已更改,以简化调整过程。如果您能准确地告诉我们您正在使用的 Hector 和 Cassandra 的版本,事情可能会变得更加清楚......

关于java - Hector 和 Cassandra 问题 NoSuchFieldError : DEFAULT_MEMTABLE_THROUGHPUT_IN_MB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9658430/

相关文章:

database - CloudKit 数据库查询问题

sql - 高可用性架构

c# - 在RavenDB中,如何查询文档中嵌套的 "objects"?

azure - 表存储服务(Azure 的 nosql 实现)与 Windows Azure 缓存(非结构化内存缓存)

java - 我如何引用在 ANTLR 中多次调用同一规则?

java - 通过 GWT 中的延迟绑定(bind)实例化接口(interface)?

java - XJC外部绑定(bind)文件总是失败

java - 尝试制作棋盘格

mysql - 存储动态复选框值的良好数据库结构是什么?

database - Cassandra - 对于给定的 ColumnFamily,每个节点恰好一行宽?