Cassandra Java连接错误

时间:2016-06-11 18:16:12

标签: java cassandra datastax

我正在尝试通过Java与我的Cassandra实例建立一个简单的连接。我为cqlsh创建了一个'demo'键空间,并在java程序中创建了一个表。代码如下:

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import java.lang.*;
import java.io.*;

public class GettingStarted {
    public static void main(String args[])
    {
        Cluster clusters;
        Session sessions;

        clusters =Cluster.builder().addContactPoint("127.0.0.1").build();
        sessions =clusters.connect("demo");

        String query ="CREATE TABLE emp(emp_id int PRIMARY KEY, emp_name text, emp_city text, emp_sal int, emp_phone varint);";

        sessions.execute(query);

        System.out.println("table created");
    }
}

我收到以下错误:

 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
    at com.datastax.driver.core.Cluster.<clinit>(Cluster.java:63)
    at GettingStarted.main(GettingStarted.java:12)
Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 2 more

我缺少什么?代码中没有可见的错误。

添加SLF4J jar文件后的错误:

 SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/FutureCallback
    at com.datastax.driver.core.Cluster.<init>(Cluster.java:89)
    at com.datastax.driver.core.Cluster.buildFrom(Cluster.java:145)
    at com.datastax.driver.core.Cluster$Builder.build(Cluster.java:981)
    at GettingStarted.main(GettingStarted.java:12)
Caused by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.FutureCallback
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 4 more

2 个答案:

答案 0 :(得分:2)

我认为,你有依赖冲突。我在项目中遇到了类似的问题,我使用的是Hadoop,HBase和Cassandra。 就我而言,版本与Guave冲突导致了问题。我发现,Guave版本16.0.1具有Cassandra 3驱动程序所需的所有功能,并且仍可与HBase(版本1.1.3)配合使用。

这些是我与Cassandra相关的Maven依赖项:

<!-- Cassandra Dependencies -->
<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-core</artifactId>
  <version>3.0.0</version>
</dependency>

<!-- Guave (required by Cassandra) -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>16.0.1</version>
</dependency>

在我删除了所有Hadoop和HBase依赖项后,下面是我的依赖树。

[INFO] mygroup:myartifact:jar:1.0-SNAPSHOT
[INFO] +- com.datastax.cassandra:cassandra-driver-core:jar:3.0.0:compile
[INFO] |  +- io.netty:netty-handler:jar:4.0.33.Final:compile
[INFO] |  |  +- io.netty:netty-buffer:jar:4.0.33.Final:compile
[INFO] |  |  |  \- io.netty:netty-common:jar:4.0.33.Final:compile
[INFO] |  |  +- io.netty:netty-transport:jar:4.0.33.Final:compile
[INFO] |  |  \- io.netty:netty-codec:jar:4.0.33.Final:compile
[INFO] |  \- io.dropwizard.metrics:metrics-core:jar:3.1.2:compile
[INFO] |     \- org.slf4j:slf4j-api:jar:1.7.7:compile
[INFO] +- com.google.guava:guava:jar:16.0.1:compile
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO] +- commons-configuration:commons-configuration:jar:1.6:compile
[INFO] |  +- commons-collections:commons-collections:jar:3.2.1:compile
[INFO] |  +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] |  +- commons-digester:commons-digester:jar:1.8:compile
[INFO] |  |  \- commons-beanutils:commons-beanutils:jar:1.7.0:compile
[INFO] |  \- commons-beanutils:commons-beanutils-core:jar:1.8.0:compile
[INFO] \- junit:junit:jar:4.12:test
[INFO]    \- org.hamcrest:hamcrest-core:jar:1.3:test

您可以使用以下命令打印Maven依赖关系树:

mvn dependency:tree

如果您没有使用Maven或任何其他依赖管理器,那么您必须手动下载并添加 com.datastax.cassandra:cassandra-driver-core:jar 下面列出的所有依赖项到您的CLASSPATH

答案 1 :(得分:0)

当我尝试这种演示程序时,我添加了Maven依赖项,引用了以下github存储库。

向下this page查看maven依赖项并将其添加到类路径中。