最近使用Spark将处理数据存储到cassandra遇到些问题,于是乎大体看了下spark-cassandra-connector的源码
这是该项目的主页:https://github.com/datastax/spark-cassandra-connector ,上面的document有一些例子的用法。
使用时加入依赖
<dependency>
<groupId>com.datastax.spark</groupId>
<artifactId>spark-cassandra-connector_2.10</artifactId>
<version>1.4.0-M3</version>
</dependency>
和引入
import com.datastax.spark.connector._
在 1.4.0-M3这个版本spark与cassandra连接使用的是连接池,避免每次写入数据频繁连接,一下是阅读代码的一些主要流程,粗略阅读,可能会存在一些问题,欢迎指正!
实际上流程不复杂,这里主要罗列了连接池的一些步骤,数据写入和rdd任务调度等没有做详细分析。
值得注意的是:
1.sessionCache(连接池)存储的是K,V对,通过_config(即spark_conf)作为key来查询session的。
2.session有超时时间,可适当调整延长等待时长,来保证连接能被复用。一下两种方式修改:
a. 在提交时通过 --driver-java-options "-Dspark.cassandra.connection.keep_alive_ms=2000" //毫秒级,此处为2s
b. 修改spark-defaults.conf 加入spark.cassandra.connection.keep_alive_ms 2000