【发布时间】: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
【问题讨论】: