簡體   English   中英

如何使用java Class在Cassandra中創建KEYSPACE

[英]How to create KEYSPACE in Cassandra using java Class

我是Cassandra的新手我想在Cassandra做一個CRUD操作。我可以從java類連接Cassandra。 但現在當我做CRUD它不工作。這是我的代碼..

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

}

連接已正確建立。但createSchema()方法無法正常工作。這是我的錯誤日志。

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

為什么你的主機是“/127.0.0.1”而不只是“127.0.0.1”?

線程“main”com.datastax.driver.core.exceptions中的異常。 NoHostAvailableException

該錯誤告訴您連接未正確建立,因為驅動程序無法連接到您提供的任何提供的節點(String節點)。

為了讓它變得非常簡單 ...嘗試:

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

問題是由: Caused by: com.datastax.driver.core.exceptions.NoHostAvailableException

@Lyuben Todorov,問題不是由/127.0.0.1的前導斜杠/127.0.0.1 根據這個問題 ,在IP之前存在前導/之前的原因是記錄器隱式調用InetAddress toString

我認為原因可能是Cassandra遠程設置或Cassandra設置的防火牆設置。

  1. 對於Cassandra設置:更改/etc/cassandra/cassandra.yaml並重新啟動Cassandra:

    rpc_address: 0.0.0.0 broadcast_rpc_address: {YOUR_SERVER_ID_HERE}

  2. 對於防火牆設置:

    ufw allow 9042 ufw status

有關詳細信息,請參閱此問題

我和OP遇到了同樣的問題。 這會發生什么,如果我從命令行運行cassandra-stress,我得到輸出為Datatacenter:datacenter1; 主持人:localhost / 127.0.0.1; 機架:rack1即您可以看到主機是localhost或127.0.0.1。 當我使用Eclipse運行測試時,我看到正斜杠出現了。 所以現在,讀取節點參數並截斷正斜杠可能是個更好的主意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM