Узел титана не подходит

У меня есть небольшой кластер Titan 0.5.0 с 8 узлами. Каждый узел запускает Titan в Rexster 2.5.0 и Cassandra. Все они настроены одинаково. К сожалению, почти всегда один из них не успевает запуститься.
В большинстве случаев это один из seed-узлов.

Используя cassandra в качестве хранилища, я получаю следующее в журнале Rexster/Titan.

WARN  com.tinkerpop.rexster.config.GraphConfigurationContainer - Could 
  not open global configuration com.thinkaurelius.titan.core.TitanException:
  Could not open global configuration
 at com.thinkaurelius.titan.diskstorage.Backend.
   getStandaloneGlobalConfiguration(Backend.java: 405)
...
Caused by: com.thinkaurelius.titan.diskstorage.TemporaryBackendException: 
  Temporary failure in storage backend
 at com.thinkaurelius.titan.diskstorage.cassandra.astyanax.
   AstyanaxStoreManager.ensureColumnFamilyExists(AstyanaxStoreManager.java:446)
...
Caused by: com.netflix.astyanax.connectionpool.exceptions.BadRequestException: 
  BadRequestException: [host=192.168.0.10(192.168.0.10):9160, latency=496(496),
  attempts=1] InvalidRequestException(why:Cannot add already existing
  column family "system_properties" to keyspace "titan")
 at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(
   ThriftConverter.java:159)

Rexster не запускается и поэтому не загружает график. Однако узел Cassandra, к которому Rexster не удалось подключиться, кажется, в порядке: nodetool указывает узел как часть кольца. Если я запускаю запросы к оставшимся экземплярам Rexster, все работает.

Я стер все данные перед запуском узлов.

Я переключился на cassandrathrift, что привело к аналогичному исключению (то же исключение TitanException, вызванное PermanentBackendException, вызванное TimeoutException). Тайм-аут хранения в Rexster составляет 30 секунд. Это может быть слишком мало, так как в данный момент я запускаю все узлы одновременно, но это не объясняет проблемы с cassandra.

Что здесь происходит не так?

изменить:

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

Вопрос: Есть ли способ, которым расширение может безопасно создавать индексы? Я создал для этого отдельный поток: Каковы методы создания индексов?

Я увеличил тайм-аут хранения до 60 с и повторил процедуру после удаления создания индекса из кода. Я по-прежнему запускаю все узлы одновременно. Опять один узел Rexstitan (начальный узел №2) не запускается.

Журнал Cassandra действительно содержит исключение

java.lang.IllegalArgumentException: Unknown keyspace/cf pair (titan.txlog)
    at org.apache.cassandra.db.Keyspace.getColumnFamilyStore(Keyspace.java:166)
    at org.apache.cassandra.db.Keyspace.getRow(Keyspace.java:326)
    at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:65)
    at org.apache.cassandra.db.ReadVerbHandler.doVerb(ReadVerbHandler.java:47)
    at org.apache.cassandra.net.MessageDeliveryTask.run(MessageDeliveryTask.java:60)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

который я вижу в обоих начальных узлах. В то время как Rexster на одном начальном узле, похоже, не заботится о другом экземпляре Rexster, он не запускается с

Caused by: com.netflix.astyanax.connectionpool.exceptions.BadRequestException: BadRequestException: [host=192.168.0.10(192.168.0.10):9160, latency=66(66), attempts=1]InvalidRequestException(why:Cannot add already existing column family "graphindex_lock_" to keyspace "titan")
    at com.netflix.astyanax.thrift.ThriftConverter.ToConnectionPoolException(ThriftConverter.java:159)
    at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:65)
    at com.netflix.astyanax.thrift.AbstractOperationImpl.execute(AbstractOperationImpl.java:28)
    at com.netflix.astyanax.thrift.ThriftSyncConnectionFactoryImpl$ThriftConnection.execute(ThriftSyncConnectionFactoryImpl.java:151)
    at com.netflix.astyanax.connectionpool.impl.AbstractExecuteWithFailoverImpl.tryOperation(AbstractExecuteWithFailoverImpl.java:119)
    at com.netflix.astyanax.connectionpool.impl.AbstractHostPartitionConnectionPool.executeWithFailover(AbstractHostPartitionConnectionPool.java:338)
    at com.netflix.astyanax.thrift.ThriftClusterImpl.executeSchemaChangeOperation(ThriftClusterImpl.java:146)
    at com.netflix.astyanax.thrift.ThriftClusterImpl.internalCreateColumnFamily(ThriftClusterImpl.java:240)

в rexstitan.log. Звучит очень похоже на исключения, поднятые ранее.

Просто для уточнения: с ошибкой я имею в виду, что Rexster запущен и может быть запрошен, но не смог загрузить «график» графа Титана.

Возможно, мне нужно уменьшить размер до минимума, чтобы проверить, связано ли это с размером кластера.

изменить №2:

Это не связано с размером кластера. И это становится действительно раздражающим. Иногда это BadRequestException выше, иногда это BadRequestException, потому что уже есть ключевое пространство "титан". Или это IllegalArgumentException:

2646 [main] WARN  com.tinkerpop.rexster.config.GraphConfigurationContainer -
  Database has already been initialized but not frozen
  java.lang.IllegalArgumentException: Database has already been initialized but not frozen
    at com.google.common.base.Preconditions.checkArgument(Preconditions.java:93)
    at com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.<init>(GraphDatabaseConfiguration.java:1294)
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:93)
    at com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:73)
    at com.thinkaurelius.titan.tinkerpop.rexster.TitanGraphConfiguration.configureGraphInstance(TitanGraphConfiguration.java:33)
    at com.tinkerpop.rexster.config.GraphConfigurationContainer.getGraphFromConfiguration(GraphConfigurationContainer.java:124)
    at com.tinkerpop.rexster.config.GraphConfigurationContainer.<init>(GraphConfigurationContainer.java:54)
    at com.tinkerpop.rexster.server.XmlRexsterApplication.reconfigure(XmlRexsterApplication.java:99)
    at com.tinkerpop.rexster.server.XmlRexsterApplication.<init>(XmlRexsterApplication.java:47)
    at com.tinkerpop.rexster.Application.<init>(Application.java:97)
    at com.tinkerpop.rexster.Application.main(Application.java:189)

Нельзя ли запустить сразу несколько нод, они конфликтуют? Это единственная причина, о которой я могу думать, потому что я могу получить любое исключение, и иногда оно работает нормально.


person Sebastian Schlicht    schedule 22.01.2015    source источник
comment
Из Я неправильно использовал Титан. и Я создал для этого отдельную ветку: Кажется, я пришел к выводу, что вопрос следует удалить? Не против сделать это?   -  person Jacek Laskowski    schedule 23.01.2015
comment
Если честно я бы не хотел его удалять. Сначала могут быть люди, работающие с одной и той же проблемой. Более важно то, что проблема все еще существует, даже если сейчас она вызвана другим исключением.   -  person Sebastian Schlicht    schedule 23.01.2015
comment
Разве другой вопрос не охватывает случай? Этот вопрос появляется как первоначальная мысль, которая привела к другому вопросу, который, скорее всего, привлечет внимание людей.   -  person Jacek Laskowski    schedule 23.01.2015
comment
К сожалению, это не так. Это просто дополнительный вопрос, вытекающий из того, что я пытался решить вышеописанной проблемой. Вы правы, моя попытка привела к другому исключению. Возможно, мне следует задать новый вопрос для второго исключения, но мне они кажутся очень похожими и могут иметь одну и ту же причину.   -  person Sebastian Schlicht    schedule 23.01.2015


Ответы (1)


Проблема в одновременном запуске узлов Титана. (версия 0.5.0)
Чем больше узлов вы запускаете одновременно, тем больше вероятность появления BadRequestException, поскольку все узлы пытаются одновременно создать одни и те же семейства пространств ключей/столбцов в кластере Cassandra.

Чтобы преодолеть эту проблему, вы должны

  1. запустить Cassandra (все узлы сразу в порядке)
  2. запустить один узел Титана
  3. откройте консоль Rexster на этом узле, создайте схему и индексы
  4. запустить оставшиеся узлы Титана
person Sebastian Schlicht    schedule 13.03.2015