【问题标题】:Cassandra Datastax and Java - best way to set up connectionCassandra Datastax 和 Java - 建立连接的最佳方式
【发布时间】:2017-08-15 10:11:51
【问题描述】:

我正在研究将我的 Java 连接到 Cassandra 的最佳方法,并找到了一些如何做到这一点的示例。我在我的本地主机上做某种聊天应用程序(将允许创建新消息、更新它们或删除),但我也想研究最佳实践。谁能帮我选择一个最好的解决方案?

第一个例子是 Spark 1.6:

public static JavaSparkContext getCassandraConnector(){
         SparkConf conf = new SparkConf();
         conf.setAppName("Chat");
         conf.set("spark.driver.allowMultipleContexts", "true");
         conf.set("spark.cassandra.connection.host", "127.0.0.1");
         conf.set("spark.rpc.netty.dispatcher.numThreads","2");
         conf.setMaster("local[2]");

         JavaSparkContext sc = new JavaSparkContext(conf);
         return sc;
    }

因此,我还获得了 Spark 2.x 的示例,其中构建器将自动重用现有的 SparkContext(如果存在)并创建 SparkContext(如果不存在)。在构建器中设置的配置选项会在 I/O 期间自动传播到 Spark 和 Hadoop。

public static SparkSession getSparkSession(){
    SparkSession sparkSession = SparkSession
        .builder()
        .appName("Chat")
        .config("spark.driver.allowMultipleContexts","true")
        .config("spark.sql.warehouse.dir", "/file:C:/temp")
        .config("spark.cassandra.connection.host", "127.0.0.1")
        .config("spark.cassandra.connection.port", "9042")
        .master("local[2]")
        .getOrCreate();
    return sparkSession;
}

我还研究了池选项,但找到了 Session 的示例,例如:

public static Session getPoolSession(){
    PoolingOptions poolingOptions = new PoolingOptions();
    poolingOptions
    .setCoreConnectionsPerHost(HostDistance.LOCAL,  4)
    .setMaxConnectionsPerHost( HostDistance.LOCAL, 10)
    .setMaxRequestsPerConnection(HostDistance.LOCAL, 32768)
    .setMaxRequestsPerConnection(HostDistance.REMOTE, 2000)
    .setHeartbeatIntervalSeconds(120);

    Cluster cluster = Cluster.builder()
        .addContactPoints("127.0.0.1")
        .withPoolingOptions(poolingOptions)
        .build();

    Session session = cluster.connect("chat");
    return session;
    }

所以我想知道,建立连接的最有效方法是什么(我将执行单个语句和 PreparedStatements)。我认为 Spark 1.6 的第一种方法不如 2.x,但是 2.x 的池选项示例呢(我不是 100% 确定这是否已经包含在 SparkSession 中)? 我找到了相关的问题,但没有足够的信息给我:https://stackoverflow.com/questions/42148056/cassandra-datastax-optimal-poolingoption

【问题讨论】:

    标签: java cassandra datastax


    【解决方案1】:

    您是尝试使用 spark 连接到 cassandra 还是仅使用 java 到 Cassandra 连接?

    Spark 大部分时间用于分析工作流,单个插入/更新语句不是它的用例。

    我建议使用常规的datastax java驱动:

    http://docs.datastax.com/en/developer/java-driver-dse/1.1/

    正如在池选项问题中回答的那样,您不需要触摸这些参数,默认值应该可以完成工作。以下是对其工作原理的解释:

    http://docs.datastax.com/en/drivers/java/2.2/com/datastax/driver/core/PoolingOptions.html

    【讨论】:

    • @nervsv 我有一个 REST 应用程序 Angular JS - Java - Cassandra DB。我只是在研究在 Java 和 Cassandra 之间建立连接的最佳方式(获取消息、发布消息等)
    猜你喜欢
    • 2016-02-28
    • 2016-02-04
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2013-06-01
    • 2017-02-13
    • 2015-05-21
    相关资源
    最近更新 更多