Проблема запуска Кассандры - PullRequest
1 голос
/ 30 августа 2011

Сначала я прочитал это это .

Я не могу заставить Кассандру снова работать. Я использую Гектор в качестве моего клиента для подключения к экземпляру Cassandra 0.8.2 и загрузки своей схемы. Через Гектора я использую 2 разных класса для создания 2 разных семейств столбцов - Articles & TagsArticlesCF.

Через основной класс я создаю семейства столбцов с именами «Articles» и «TagsArticlesCF» следующим образом:

public static void main(String[] args) {
    cluster = HFactory.getOrCreateCluster("test cluster", "xxx.xxx.xxx.xxx:9160");
    newKeyspaceDef = HFactory.createKeyspaceDefinition(keyspaceName);
    if( (cluster.describeKeyspace(keyspaceName)) == null){
        createSchema();
    }


    Keyspace ksp = HFactory.createKeyspace(keyspaceName, cluster);
    Articles art = new Articles(cluster, newKeyspaceDef,ksp);
TagsArticlesCF tags = new TagsArticlesCF(cluster,newKeyspaceDef,ksp);

Вот пример того, как выглядят мои семейства столбцов / как они создаются:

public Articles(Cluster cluster, KeyspaceDefinition ksp, Keyspace ksp2)  {
BasicColumnFamilyDefinition bcfDef = new BasicColumnFamilyDefinition();
        bcfDef.setName("Articles");
        bcfDef.setKeyspaceName("test3");
        bcfDef.setDefaultValidationClass(ComparatorType.UTF8TYPE.getClassName());
        bcfDef.setKeyValidationClass(ComparatorType.UTF8TYPE.getClassName());
        bcfDef.setComparatorType(ComparatorType.UTF8TYPE);

        ColumnFamilyDefinition cfDef = new ThriftCfDef(bcfDef);
        BasicColumnDefinition columnDefinition = new BasicColumnDefinition();
        columnDefinition.setName(StringSerializer.get().toByteBuffer("title"));
        columnDefinition.setIndexType(ColumnIndexType.KEYS);
        columnDefinition.setValidationClass(ComparatorType.UTF8TYPE.getClassName());
        cfDef.addColumnDefinition(columnDefinition);
...

Я пытаюсь добавить полную схему в Cassandra, которая будет поддерживать запросы, которые я планирую выполнить для загруженных данных. Я запускал метод main несколько раз, чтобы загрузить новые семейства столбцов в базу данных. После запуска метода main несколько раз и настройки нескольких вещей (проверка, было ли семейство столбцов уже в KeyspaceDefinition), запущенный экземпляр Cassandra остановился.

Мне любопытно несколько вещей, использующих Гектор / Java:

  1. Я планирую иметь около 10 семейств столбцов с разными столбцами (для поддержки разных запросов). Лучше ли организовать мои занятия так, чтобы у меня был класс для каждого семейства столбцов?

  2. В чем именно разница между KeyspaceDefinition и Keyspace? Почему проводится различие?

Мы попытались получить новый экземпляр Кассандры, и вот что мы натолкнулись. Я пытаюсь лучше понять, что происходит, поэтому любые комментарии и помощь, чтобы избежать ошибок такого рода, будут с благодарностью приняты:

[root@appscluster1 bin]# ./cassandra -p cassandra.pid
[root@appscluster1 bin]#  INFO 10:52:36,437 Logging initialized
 INFO 10:52:36,484 JVM vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.6.0_25
 INFO 10:52:36,485 Heap size: 1046937600/1046937600
 INFO 10:52:36,490 JNA not found. Native methods will be disabled.
 INFO 10:52:36,526 Loading settings from file:/opt/cassandra/apache-cassandra-0.8.2/conf/cassandra.yaml

[root@appscluster1 bin]#  INFO 10:52:36,872 DiskAccessMode 'auto' determined to be mmap, indexAccessMode is mmap
 INFO 10:52:37,346 Global memtable threshold is enabled at 332MB
 INFO 10:52:37,348 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:37,497 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:37,617 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:37,984 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:38,252 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:38,259 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:38,545 Opening /opt/cassandra/persist8/data/system/IndexInfo-g-73
 INFO 10:52:38,661 Opening /opt/cassandra/persist8/data/system/Schema-g-169
 INFO 10:52:38,685 Opening /opt/cassandra/persist8/data/system/Schema-g-170
 INFO 10:52:38,730 Opening /opt/cassandra/persist8/data/system/Schema-g-171
 INFO 10:52:38,751 Opening /opt/cassandra/persist8/data/system/Migrations-g-171
 INFO 10:52:38,763 Opening /opt/cassandra/persist8/data/system/Migrations-g-170
 INFO 10:52:38,776 Opening /opt/cassandra/persist8/data/system/Migrations-g-169
 INFO 10:52:38,795 Opening /opt/cassandra/persist8/data/system/LocationInfo-g-2
 INFO 10:52:38,827 Opening /opt/cassandra/persist8/data/system/LocationInfo-g-1
 INFO 10:52:39,048 Loading schema version ec437ac0-d28a-11e0-0000-c4ffed3367ff
 INFO 10:52:39,645 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:39,663 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)

... (больше того же самого) ...

 INFO 10:52:40,463 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:41,390 Opening /opt/cassandra/persist8/data/test3/Articles-g-367
ERROR 10:52:41,392 Missing sstable component in /opt/cassandra/persist8/data/test3/Articles-g-367=[Index.db, Data.db]; skipped because of /opt/cassandra/persist8/data/test3/Articles-g-367-Index.db (No such file or directory)
 INFO 10:52:41,863 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
 INFO 10:52:41,865 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)

... (больше того же самого) ...

 INFO 10:52:41,892 Removing compacted SSTable files (see http://wiki.apache.org/cassandra/MemtableSSTable)
ERROR 10:52:41,898 Exception encountered during startup.
java.lang.RuntimeException: javax.management.InstanceAlreadyExistsException: org.apache.cassandra.db:type=ColumnFamilies,keyspace=test3,columnfamily=TagsArticlesCF
       at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:315)
       at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:466)
       at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:436)
       at org.apache.cassandra.db.Table.initCf(Table.java:369)
       at org.apache.cassandra.db.Table.<init>(Table.java:306)
       at org.apache.cassandra.db.Table.open(Table.java:111)
       at org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:187)
       at org.apache.cassandra.service.AbstractCassandraDaemon.activate(AbstractCassandraDaemon.java:341)
       at org.apache.cassandra.thrift.CassandraDaemon.main(CassandraDaemon.java:80)
Caused by: javax.management.InstanceAlreadyExistsException: org.apache.cassandra.db:type=ColumnFamilies,keyspace=test3,columnfamily=TagsArticlesCF
       at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
       at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484)
       at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
       at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
       at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
       at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
       at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:311)
       ... 8 more
Exception encountered during startup.
java.lang.RuntimeException: javax.management.InstanceAlreadyExistsException: org.apache.cassandra.db:type=ColumnFamilies,keyspace=test3,columnfamily=TagsArticlesCF
       at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:315)
       at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:466)
       at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:436)
       at org.apache.cassandra.db.Table.initCf(Table.java:369)
       at org.apache.cassandra.db.Table.<init>(Table.java:306)
       at org.apache.cassandra.db.Table.open(Table.java:111)
       at org.apache.cassandra.service.AbstractCassandraDaemon.setup(AbstractCassandraDaemon.java:187)
       at org.apache.cassandra.service.AbstractCassandraDaemon.activate(AbstractCassandraDaemon.java:341)
       at org.apache.cassandra.thrift.CassandraDaemon.main(CassandraDaemon.java:80)
Caused by: javax.management.InstanceAlreadyExistsException: org.apache.cassandra.db:type=ColumnFamilies,keyspace=test3,columnfamily=TagsArticlesCF
       at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:453)
       at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.internal_addObject(DefaultMBeanServerInterceptor.java:1484)
       at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:963)
       at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:917)
       at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:312)
       at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
       at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:311)
       ... 8 more

[root@appscluster1 bin]#

Спасибо!

1 Ответ

3 голосов
/ 02 сентября 2011

Как вы отправляете определение Keyspace в кластер?

Взгляните на методы следующего теста: https://github.com/rantav/hector/blob/master/core/src/test/java/me/prettyprint/cassandra/service/CassandraClusterTest.java#L115-189

Если пространство ключей и / или семейство столбцов уже существует, вы должны быть в состоянии перехватить исключение IllegalArgumentException.

...