spark+cassandra实时数据分析方案

前言


在本教程中,您将学习如何设置用于读取和写入数据至Cassandra的一个非常简单的spark应用程序。在开始前,你需要拥有spark和cassandra的基本知识,详情请参阅spark和cassandra官网。


创建cassandra架构示例

1.创建以下简单的keyspace和table,并在cqlsh执行:

CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1 };
CREATE TABLE test.kv(key text PRIMARY KEY, value int);

2.插入测试数据:

INSERT INTO test.kv(key, value) VALUES ('key1', 1);
INSERT INTO test.kv(key, value) VALUES ('key2', 2);

现在,你可以编写使用Cassandra的第一个spark项目。


设置 SparkContext

创建SparkContext之前,将spark.cassandra.connection.host属性设置为Cassandra的节点之一的地址:

#scala
val conf = new SparkConf(true)
   .set("spark.cassandra.connection.host", "127.0.0.1")

创建SparkContext。替换127.0.0.1你的Spark-master的实际地址(或使用“local”,以本地模式运行):

val sc = new SparkContext("spark://127.0.0.1:7077", "test", conf)

导入针对SparkContext 和 RDD的 Cassandra专用功能:

import com.datastax.spark.connector._

从cassandra读取数据并分析

使用sc.cassandraTable方法来查看该表并返回Spark-RDD:

val rdd = sc.cassandraTable("test", "kv")
println(rdd.count)
println(rdd.first)
println(rdd.map(_.getInt("value")).sum)  

**输出结果**
scala> import com.datastax.spark.connector._
import com.datastax.spark.connector._

scala> val rdd = sc.cassandraTable("test", "kv")
rdd: com.datastax.spark.connector.rdd.CassandraTableScanRDD[com.datastax.spark.connector.CassandraRow] = CassandraTableScanRDD[0] at RDD at CassandraRDD.scala:15

scala> println(rdd.count)
2

scala> println(rdd.first)
CassandraRow{key: key1, value: 1}

scala> println(rdd.map(_.getInt("value")).sum)  
3.0

使用RDD保存数据至cassandra

为表添加两行数据:

val collection = sc.parallelize(Seq(("key3", 3), ("key4", 4)))
collection.saveToCassandra("test", "kv", SomeColumns("key", "value")) 
**查看结果**
scala> rdd.collect()
res8: Array[com.datastax.spark.connector.CassandraRow] = Array(CassandraRow{key: key1, value: 1}, CassandraRow{key: key4, value: 4}, CassandraRow{key: key3, value: 3}, CassandraRow{key: key2, value: 2})

连接cassandra

本节介绍如何星火连接到cassandra以及如何从spark应用执行CQL语句。


配置 SparkContext连接cassandra工作

为了你的spark应用程序可以连接到cassandra,请在SparkConf对象配置连接选项。这些以spark为前缀的选项,以便它们可以从spark-shell被识别和$ SPARK_HOME/ CONF /sparkdefault.conf内设定。
详细配置官方解释请查看本博客文章《spark连接cassandra配置说明》
示例:

val conf = new SparkConf(true)
        .set("spark.cassandra.connection.host", "192.168.123.10")
        .set("spark.cassandra.auth.username", "cassandra")            
        .set("spark.cassandra.auth.password", "cassandra")

val sc = new SparkContext("spark://192.168.123.10:7077", "test", conf)

导入spark-connetct-cassandra驱动:

import com.datastax.spark.connector._                                    

你可能感兴趣的:(cassandra,spark)