Cassandra Datastax 和 Java - 建立连接的最佳方式

Cassandra Datastax and Java - best way to set up connection

我正在研究从我的 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;
}

我还研究了 Pooling Options,但找到了 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 的 Pooling Option 示例呢(我不能 100% 确定这是否已包含在 SparkSession 中)? 我找到了相关问题,但没有足够的信息给我:

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

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

我建议使用常规的 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