2013-06-05 10 views
6

Jestem nowy w Cassanderze, chcę wykonać operację CRUD w Cassandrze. Mogę połączyć Cassandrę z klasy Java. Ale teraz, kiedy robi CRUD jej nie working.This jest mój kod ..Jak utworzyć KEYSPACE w Cassandrze przy użyciu klasy java

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

public class AnotherClient { 

private Session session; 

private Cluster cluster; 

public void connect(String node) { 
    cluster = Cluster.builder().addContactPoint(node).build(); 
    Metadata metadata = cluster.getMetadata(); 
    System.out.println("Cassandra connection established"); 
    System.out.printf("Connected to cluster: %s\n", 
      metadata.getClusterName()); 
    for (Host host : metadata.getAllHosts()) { 
     System.out.printf("Datatacenter: %s; Host: %s; Rack: %s \n", 
       host.getDatacenter(), host.getAddress(), host.getRack()); 
     session = cluster.connect(); 

    } 
} 

public void createSchema() { 
    session.execute("CREATE KEYSPACE simplex WITH replication " 
      + "= {'class':'SimpleStrategy', 'replication_factor':3};"); 

    session.execute("CREATE TABLE simplex.songs (" + "id uuid PRIMARY KEY," 
      + "title text," + "album text," + "artist text," 
      + "tags set<text>," + "data blob" + ");"); 
    session.execute("CREATE TABLE simplex.playlists (" + "id uuid," 
      + "title text," + "album text, " + "artist text," 
      + "song_id uuid," + "PRIMARY KEY (id, title, album, artist)" 
      + ");"); 

} 

public void loadData() { 
    session.execute("INSERT INTO simplex.songs (id, title, album, artist, tags) " 
      + "VALUES (" 
      + "756716f7-2e54-4715-9f00-91dcbea6cf50," 
      + "'La Petite Tonkinoise'," 
      + "'Bye Bye Blackbird'," 
      + "'Joséphine Baker'," + "{'jazz', '2013'})" + ";"); 
    session.execute("INSERT INTO simplex.playlists (id, song_id, title, album, artist) " 
      + "VALUES (" 
      + "2cc9ccb7-6221-4ccb-8387-f22b6a1b354d," 
      + "756716f7-2e54-4715-9f00-91dcbea6cf50," 
      + "'La Petite Tonkinoise'," 
      + "'Bye Bye Blackbird'," 
      + "'Joséphine Baker'" + ");"); 
} 

public void close() { 
    cluster.shutdown(); 
} 

public static void main(String[] args) { 
    AnotherClient client = new AnotherClient(); 
    client.connect("127.0.0.1"); 

    client.createSchema(); 
    client.close(); 
} 

} 

Połączenie jest prawidłowo established.but metoda createSchema() properly.this nie działa jest mój dziennik błędów.

Cassandra connection established 
Connected to cluster: Test Cluster 
Datatacenter: datacenter1; Host: /127.0.0.1; Rack: rack1 
Exception in thread "main" com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: []) 
    at com.datastax.driver.core.exceptions.NoHostAvailableException.copy(NoHostAvailableException.java:61) 
    at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:234) 
    at com.datastax.driver.core.ResultSetFuture.getUninterruptibly(ResultSetFuture.java:165) 
    at com.datastax.driver.core.Session.execute(Session.java:106) 
    at com.datastax.driver.core.Session.execute(Session.java:75) 
    at com.example.cassandra.AnotherClient.createSchema(AnotherClient.java:30) 
    at com.example.cassandra.AnotherClient.main(AnotherClient.java:81) 
Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: []) 
    at com.datastax.driver.core.RequestHandler.sendRequest(RequestHandler.java:93) 
    at com.datastax.driver.core.Session$Manager.execute(Session.java:393) 
    at com.datastax.driver.core.Session$Manager.executeQuery(Session.java:429) 
    at com.datastax.driver.core.Session.executeAsync(Session.java:146) 
    ... 4 more 
+0

Co podajesz jako parametr 'String node'? –

+0

public static void main (String [] args) { AnotherClient client = new AnotherClient(); client.connect ("127.0.0.1"); client.createSchema(); client.close(); } Dostarczam adres hosta – Mandrek

Odpowiedz

2

Dlaczego Twój host "/127.0.0.1", a nie tylko "127.0.0.1"?

Wyjątek w wątku "główny" com.datastax.driver.core.exceptions. NoHostAvailableException

Błąd jest informacją, że połączenie nie jest prawidłowo założona, ponieważ kierowca nie łączyć jednego z dostarczonych węzłów, które zaopatrują jako parametr (węzeł łańcuchach).

Żeby było naprawdę proste ... try:

cluster = Cluster.builder().addContactPoint("127.0.0.1").build(); 
+0

i nie widzę gdzie używam "/127.0.0.1" jako mojego adresu hosta. używam "127.0.0.1" i przekazywanie go z głównego – Mandrek

+0

@Mandrek Następnie twój lokalny serwer Kasandra nie jest uruchomiony. Uruchom menedżer zadań/monitor aktywności i sprawdź, czy działa Kasandra (będzie to proces java). Jeśli nie możesz go znaleźć, spróbuj uruchomić serwer Kasandra (zrób to na pierwszym planie, żebyś mógł zobaczyć, co się dzieje) –

0

wpadłem na tym samym numerze jak OP. Co się stanie, jeśli uruchomię naprężenie kassandra z linii poleceń, otrzymam dane wyjściowe jako Datatacenter: datacenter1; Host: localhost/127.0.0.1; Rack: rack1 , czyli możesz zobaczyć Hosta jako localhost lub 127.0.0.1. Po uruchomieniu testów za pomocą środowiska Eclipse pojawia się przedni ukośnik. Na razie lepszym pomysłem byłoby odczytanie parametru węzła i obcięcie przedniego ukośnika.

Powiązane problemy