2013-06-05 5 views
6

私はCassandraでCRUD操作を行いたいと思います。私はCassandraをJavaクラスから接続することができます。私はCRUDを行っているときしかし、今、そのことworking.Thisが正しくメソッドcreateSchemaをestablished.butされ、接続は()properly.thisを動作していないJavaクラスを使用してCassandraでKEYSPACEを作成する方法

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(); 
} 

} 

..私のエラーログ私のコードです。

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

あなたは 'String node'パラメータとして何を供給していますか? –

+0

public static void main(String [] args){ AnotherClientクライアント=新しいAnotherClient(); client.connect( "127.0.0.1"); client.createSchema(); client.close(); }私はホストアドレス – Mandrek

答えて

2

「127.0.0.1」だけでなく、ホストが「/127.0.0.1」の理由は何ですか?

スレッド "main" com.datastax.driver.core.exceptionsの例外。 NoHostAvailableException

エラーがドライバを使用して、パラメータ(文字列ノード)として供給する供給ノード、のいずれかへの接続に失敗したため、接続が正常に確立されていないことを通知されます。それは本当に簡単なようにするに

...試してみてください。

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

を提供しています。私は "/127.0.0.1"を私のホストアドレスとして使用する場所を見ることができません。私は "127.0.0.1"を使用しており、メインからそれを渡します – Mandrek

+0

@Mandrekあなたのローカルのcassandraサーバーは起動していません。タスクマネージャー/アクティビティーモニターを起動して、cassandraが実行中かどうかを確認します(Javaプロセスになります)。あなたがそれを見つけることができないなら、それはちょうど起こっていることを見ることができるように、フォアグラウンドでそれを行う) –

0

を私はOPと同じ問題に遭遇しました。何が起きるかは、コマンドラインからcassandra-stressを実行すると、出力は Datatacenter:datacenter1;となります。ホスト:localhost/127.0.0.1;ラック:ラック1 、つまり、ホストがlocalhostまたは127.0.0.1として指定されていることがわかります。 Eclipseを使用してテストを実行すると、スラッシュが表示されます。 今のところ、ノードparamを読み、スラッシュを切り捨てる方が良いでしょう。

関連する問題