【问题标题】:Cassandra, Titan, Fatal configuration errorCassandra、Titan、致命配置错误
【发布时间】:2017-04-02 06:32:11
【问题描述】:

我尝试使用 cassandra (linux) 启动 Titan:

TitanFactory.Builder config = TitanFactory.build();

config.set("storage.backend", "embeddedcassandra");
config.set("storage.directory", DIRECTORY);
config.set("index." + INDEX_NAME + ".backend", "elasticsearch");
config.set("index." + INDEX_NAME + ".DIRECTORY", DIRECTORY + File.separator + "es");
config.set("index." + INDEX_NAME + ".elasticsearch.local-mode", true);
config.set("index." + INDEX_NAME + ".elasticsearch.client-only", false);

graph = config.open();

获取以下日志:

09:57:50.195 [main] 错误 o.a.c.config.DatabaseDescriptor - 致命 配置错误 org.apache.cassandra.exceptions.ConfigurationException:期望 URI 在变量中:[cassandra.config]。请在文件前加上 file:/// 用于本地文件或 file:/// 用于远程文件。中止。如果你 正在从外部工具执行此操作,它需要设置 Config.setClientMode(true) 避免加载配置。在 org.apache.cassandra.config.YamlConfigurationLoader.getStorageConfigURL(YamlConfigurationLoader.java:73) ~[cassandra-all-2.1.9.jar:2.1.9] 在 org.apache.cassandra.config.YamlConfigurationLoader.loadConfig(YamlConfigurationLoader.java:84) ~[cassandra-all-2.1.9.jar:2.1.9] 在 org.apache.cassandra.config.DatabaseDescriptor.loadConfig(DatabaseDescriptor.java:161) ~[cassandra-all-2.1.9.jar:2.1.9] 在 org.apache.cassandra.config.DatabaseDescriptor.(DatabaseDescriptor.java:136) ~[cassandra-all-2.1.9.jar:2.1.9] 在 org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:164) [cassandra-all-2.1.9.jar:2.1.9] 在 org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:537) [cassandra-all-2.1.9.jar:2.1.9] 在 org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:626) [cassandra-all-2.1.9.jar:2.1.9] 在 com.thinkaurelius.titan.diskstorage.cassandra.utils.CassandraDaemonWrapper.start(CassandraDaemonWrapper.java:75) [titan-cassandra-1.0.0.jar:na] 在 com.thinkaurelius.titan.diskstorage.cassandra.embedded.CassandraEmbeddedStoreManager.(CassandraEmbeddedStoreManager.java:81) [titan-cassandra-1.0.0.jar:na] 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) [na:1.8.0_112] 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [na:1.8.0_112] 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [na:1.8.0_112] 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) [na:1.8.0_112] 在 com.thinkaurelius.titan.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:44) [titan-core-1.0.0.jar:na] 在 com.thinkaurelius.titan.diskstorage.Backend.getImplementationClass(Backend.java:473) [titan-core-1.0.0.jar:na] 在 com.thinkaurelius.titan.diskstorage.Backend.getStorageManager(Backend.java:407) [titan-core-1.0.0.jar:na] 在 com.thinkaurelius.titan.graphdb.configuration.GraphDatabaseConfiguration.(GraphDatabaseConfiguration.java:1320) [titan-core-1.0.0.jar:na] 在 com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:94) [titan-core-1.0.0.jar:na] 在 com.thinkaurelius.titan.core.TitanFactory.open(TitanFactory.java:84) [titan-core-1.0.0.jar:na] 在 com.thinkaurelius.titan.core.TitanFactory$Builder.open(TitanFactory.java:139) [titan-core-1.0.0.jar:na] 在 main.java.com.bag.server.database.TitanDatabaseAccess.start(TitanDatabaseAccess.java:68) [main/:na] 在 main.java.com.bag.server.TestServer.(TestServer.java:105) [main/:na] 在 main.java.com.bag.server.TestServer.main(TestServer.java:428) [main/:na] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法)~[na:1.8.0_112] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_112] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_112] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_112] 在 com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) [idea_rt.jar:na]

【问题讨论】:

    标签: java linux cassandra titan


    【解决方案1】:

    嵌入式 Cassandra 要求您指定它可以在哪里找到其配置文件 (cassandra.yaml)。来自documentation

    在嵌入式模式下运行 Titan 时,Cassandra yaml 文件为 使用附加配置选项进行配置 storage.conf-file,将 yaml 文件指定为完整的 url,例如 storage.conf-file = file:///home/cassandra.yaml.

    根据您要实现的目标以及无论如何您没有完全在内存中运行 (Elasticsearch),您可能会考虑使用 berkeleyje 作为您的存储后端。 Berkeley DB for Titan 本质上是零配置。您需要做的就是指定存储目录。例如。

    storage.backend=berkeleyje
    storage.directory=${java.io.tmpdir}/${storage.dir}
    

    当然你可以随意将存储目录放在任何你喜欢的地方。

    index backend 独立于持久性后端,需要自己的配置,具体取决于您选择的后端。同样,根据您要达到的目标,您可以开始没有。相等比较的索引是 Titan 的 natively supported,您不需要外部搜索索引。 当心这个打开的Titan issue。不保证搜索索引始终与图表同步。

    【讨论】:

    • 因为我要在我的项目上运行一些基准测试。最快的存储后端是什么?
    • 这取决于您的使用模式。例如。 C* 针对写入繁重的工作负载进行了优化。同时,如果您定期删除大量数据,那也不是那么好。由于 Titan 从不更新边缘,而是删除并重新创建它们,这对于 C* 后端来说不是一个好的使用模式。我只是从最容易使用的后端开始。这将是 inmemoryberkeleyje 存储后端。
    • 我要读、写、删除很多节点和关系。大概读了很多。我必须使用 java 来访问它。
    • 正如我所说,我会从简单开始。您使用什么语言与选择存储后端无关。
    • 如果你需要 Elasticsearch,你当然需要配置它。我给了你 Berkeley DB 的相关配置。 search indexer 独立于您使用的存储后端,当然需要对其进行配置。此外,您需要将实现放在类路径中。
    猜你喜欢
    • 2014-04-19
    • 2017-02-27
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2013-04-09
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多