将卡夫卡主题中的数据保存到Cassandra

将卡夫卡主题中的数据保存到Cassandra,cassandra,apache-kafka,spark-streaming,spark-cassandra-connector,Cassandra,Apache Kafka,Spark Streaming,Spark Cassandra Connector,我正在学习Spark streaming,并尝试使用Spark streaming和Cassandra Spark connector将从Kafka topic接收到的样本股票数据(如“MSFT:28.29”)保存到Cassandra 不用保存到Cassandra,我的代码就可以正常工作(从Kafka获取数据并进行一些琐碎的统计计算)。配置了Cassandra,并建立了连接 但如果我试图添加以下行以在处理之前将原始数据保存到Cassandra表中: stockParsed.saveToCass

我正在学习Spark streaming,并尝试使用Spark streaming和Cassandra Spark connector将从Kafka topic接收到的样本股票数据(如“MSFT:28.29”)保存到Cassandra

不用保存到Cassandra,我的代码就可以正常工作(从Kafka获取数据并进行一些琐碎的统计计算)。配置了Cassandra,并建立了连接

但如果我试图添加以下行以在处理之前将原始数据保存到Cassandra表中:

 stockParsed.saveToCassandra("dashboard","raw_tick")
在Spark streaming UI中,我看到1个批次处于“处理”状态,其余的处于“排队”状态,Cassandra中没有任何数据

在Spark console中,我只看到如下行:

16/02/16 10:18:40 INFO JobScheduler: Added jobs for time 1455635920000 ms
16/02/16 10:18:50 INFO JobScheduler: Added jobs for time 1455635930000 ms
16/02/16 10:19:00 INFO JobScheduler: Added jobs for time 1455635940000 ms
这是我的密码:

case class Stock(ticker: String, price: Double)
// ....

val conf = new SparkConf().setAppName("KafkaStream").setMaster("local[*]")
  .set("spark.cassandra.connection.host", "localhost")
  .set("spark.cassandra.auth.username", "cassandra")
  .set("spark.cassandra.auth.password", "cassandra")
  .set("spark.cassandra.connection.keep_alive_ms","60000")
  .set("spark.cassandra.input.split.size_in_mb","1")

val ssc = new StreamingContext(conf, Seconds(10))

val topicMap = Map("test" -> 1)

val lines = KafkaUtils.createStream(ssc, "localhost:2181", "test-group", topicMap).map(_._2)

val stockParsed = lines.map(line => line.split(':')).map(s => Stock(s(0).toString, s(1).toDouble))

//Problem here
stockParsed.saveToCassandra("dashboard","raw_tick",SomeColumns("ticker", "price"))

//Some processing below
My build.sbt:

import sbt.Keys._

name := "KafkaStreamSbt"

version := "1.0"

scalaVersion := "2.10.6"

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.0"  % "provided"
libraryDependencies += "org.apache.spark" %% "spark-streaming-kafka-assembly" % "1.6.0"
libraryDependencies += "com.datastax.spark" %% "spark-cassandra-connector-java" % "1.5.0-RC1"
libraryDependencies += "org.slf4j" % "slf4j-api" % "1.7.16"

有没有办法解决这个问题?

问题解决了:我在Cassandra键空间配置中出错了。使用此脚本重新创建键空间后:

CREATE KEYSPACE tutorial WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};

代码工作正常。

您是否至少分配了2个核心?2个核心用于什么?我使用“local[*]”选项在本地启动Spark,该选项应将机器上的所有磁芯设置为可用。您需要至少一个executor core来运行接收器(如果您在接收器模式下运行),如果只有一个core可用,您只能运行接收器,而不能实际处理数据。如何配置它?我在这个虚拟机上有4个内核,那么*应该设置为4。您也可以显式地执行local[4]。如果这不能解决问题,我会检查你的遗嘱执行人日志