Подтвердить что ты не робот

Как подключить Cassandra с использованием класса Java

Я делаю это для подключения cassandra. Но мой код возвращает ошибку. Вот мой код

public class CassandraConnection {

public static void main(String[] args) {
    String serverIp = "166.78.10.41";
    String keyspace = "gamma";
    CassandraConnection connection;

    Cluster cluster = Cluster.builder()
            .addContactPoints(serverIp)
            .build();

    Session session = cluster.connect(keyspace);


    String cqlStatement = "SELECT * FROM TestCF";
    for (Row row : session.execute(cqlStatement)) {
        System.out.println(row.toString());
    }

}
}

это журнал ошибок.

Не удалось выполнить цель в проекте CassandraConnection: не удалось разрешить зависимости для проекта com.mycompany: CassandraConnection: jar: 1.0-SNAPSHOT: Следующие артефакты не могут быть разрешены: org.specs2: scalaz-effect_2.11.0-SNAPSHOT: jar: 7.0.1-SNAPSHOT, org.scalaz: scalaz-effect_2.9.3: jar: 7.1.0-SNAPSHOT: Не удалось найти артефакт org.specs2: scalaz-effect_2.11.0-SNAPSHOT: jar: 7.0.1-SNAPSHOT → [Помощь 1]

Чтобы увидеть полную ошибку стека ошибок, повторно запустите Maven с ключом -e. Повторно запустите Maven, используя переключатель -X, чтобы включить полное ведение журнала отладки.

Дополнительные сведения об ошибках и возможных решениях см. в следующих статьях: [Помощь 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

4b9b3361

Ответ 1

Вы проводили какие-либо исследования по этому вопросу?

Выбор водителя

Вам нужен способ общения с Кассандрой, лучший вариант - использовать API высокого уровня. У вас есть широкий выбор вариантов, но когда мы смотрим на это с точки зрения высокого уровня, на самом деле есть два варианта.

  1. Драйверы на основе CQL - абстракция высшего уровня того, что делает Thrift. Также более новый инструмент, компании, предоставляющие поддержку/документацию для Cassandra, рекомендуют, чтобы новые приложения Cassandra основывались на CQL.
  2. Экономичные накопители - имеют доступ к низкоуровневым хранилищам, поэтому проще ошибиться.

Я буду использовать драйвер datastax CQL.

Загрузите и соберите драйвер из datastax github repo ИЛИ используйте maven и добавьте следующие зависимости:

<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-core</artifactId>
  <version>2.1.3</version>
</dependency>

<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-mapping</artifactId>
  <version>2.1.2</version>
</dependency>

Выбор maven - хорошая идея, так как он будет управлять всеми вашими зависимостями за вас, но если вы не используете maven, по крайней мере вы научитесь управлять jar файлами и чтением трассировок стека.


Код

Документация водителя идет хорошо. Если вы застряли, прочитав его, документация содержит множество примеров.

Я буду использовать следующие две переменные в примерах.

String serverIP = "127.0.0.1";
String keyspace = "system";

Cluster cluster = Cluster.builder()
  .addContactPoints(serverIP)
  .build();

Session session = cluster.connect(keyspace);

// you are now connected to the cluster, congrats!

Читать

String cqlStatement = "SELECT * FROM local";
for (Row row : session.execute(cqlStatement)) {
  System.out.println(row.toString());
}

Создание/обновление/удаление

// for all three it works the same way (as a note the 'system' keyspace cant 
// be modified by users so below im using a keyspace name 'exampkeyspace' and
// a table (or columnfamily) called users

String cqlStatementC = "INSERT INTO exampkeyspace.users (username, password) " + 
                      "VALUES ('Serenity', 'fa3dfQefx')";

String cqlStatementU = "UPDATE exampkeyspace.users " +
                      "SET password = 'zzaEcvAf32hla'," +
                      "WHERE username = 'Serenity';";

String cqlStatementD = "DELETE FROM exampkeyspace.users " + 
                      "WHERE username = 'Serenity';";

session.execute(cqlStatementC); // interchangeable, put any of the statements u wish.


Другой полезный код

Создание Keyspace

String cqlStatement = "CREATE KEYSPACE exampkeyspace WITH " + 
  "replication = {'class':'SimpleStrategy','replication_factor':1}";

session.execute(cqlStatement);

Создание ColumnFamily (она же таблица)

// based on the above keyspace, we would change the cluster and session as follows:
Cluster cluster = Cluster.builder()
  .addContactPoints(serverIP)
  .build();
Session session = cluster.connect("exampkeyspace");

String cqlStatement = "CREATE TABLE users (" + 
                      " username varchar PRIMARY KEY," + 
                      " password varchar " + 
                      ");";

session.execute(cqlStatement);

Ответ 2

Чтобы соединиться с Кассандрой из Java-программы, вам нужно добавить в программу некоторые базовые зависимости. Добавьте следующие зависимости в программу. Список зависимостей Maven:

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.6.0</version>
</dependency>

<dependency>
  <groupId>com.datastax.cassandra</groupId>
  <artifactId>cassandra-driver-mapping</artifactId>
  <version>3.6.0</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.25</version>
    <scope>test</scope>
</dependency>

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>21.0</version>
</dependency>

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.20.Final</version>
</dependency>

<dependency>
    <groupId>com.codahale.metrics</groupId>
    <artifactId>metrics-core</artifactId>
    <version>3.0.2</version>
</dependency>

Простая Java-программа для связи с Кассандрой в пространстве ключей и для извлечения значений из таблицы

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;

public class Test {

    public static void main(String[] args) {
        String serverIp = "127.0.0.1";
        String keyspace = "test";

        Cluster cluster = Cluster.builder()
                .addContactPoints(serverIp)
                .build();

        Session session = cluster.connect(keyspace);


        String cqlStatement = "SELECT * FROM emp";
        for (Row row : session.execute(cqlStatement)) {
            System.out.println(row.toString());
        }

        session.close();
    }
}

Git Hub Repo для программы как проект maven: GitURL