我正在使用
Cassandra v2.1.12
Spark v1.4.1
Scala 2.10
和cassandra正在倾听
rpc_address:127.0.1.1
rpc_port:9160
例如,要连接kafka和spark-streaming,每隔4秒听一次kafka,我就有以下火花工作
sc = SparkContext(conf=conf)
stream=StreamingContext(sc,4)
map1={'topic_name':1}
kafkaStream = KafkaUtils.createStream(stream, 'localhost:2181', "name", map1)
Spark-streaming每隔4秒就会继续收听kafka经纪人并输出内容。
同样,我希望spark streaming能够收听cassandra并输出指定表格的内容,每次说4秒。
如何转换上面的流媒体代码,使其与cassandra而不是kafka一起使用?
我显然可以在无限循环中继续运行查询,但这不是正确的流式传输吗?
火花工作:from __future__ import print_function
import time
import sys
from random import random
from operator import add
from pyspark.streaming import StreamingContext
from pyspark import SparkContext,SparkConf
from pyspark.sql import SQLContext
from pyspark.streaming import *
sc = SparkContext(appName="sparkcassandra")
while(True):
time.sleep(5)
sqlContext = SQLContext(sc)
stream=StreamingContext(sc,4)
lines = stream.socketTextStream("127.0.1.1", 9160)
sqlContext.read.format("org.apache.spark.sql.cassandra")\
.options(table="users", keyspace="keyspace2")\
.load()\
.show()
像这样跑
sudo ./bin/spark-submit --packages \
datastax:spark-cassandra-connector:1.4.1-s_2.10 \
examples/src/main/python/sparkstreaming-cassandra2.py
我得到表值,其粗略看起来像
lastname|age|city|email|firstname
那么"流媒体"的正确方法是什么?来自cassandra的数据?
答案 0 :(得分:2)
目前从C *流式传输数据的“正确方法”不是来自C *的流数据:)相反,将消息队列(如Kafka)放在C *和Stream之前通常更有意义。那。 C *不容易支持增量表读取,但如果聚类键基于插入时间,则可以执行此操作。
如果您对使用C *作为流媒体资源感兴趣,请务必查看并发表评论 https://issues.apache.org/jira/browse/CASSANDRA-8844 更改数据捕获
您最有可能寻找的是什么。
如果你实际上只是想定期阅读整个表并做一些事情,你可能最好只用一个cron作业启动一个批处理操作,因为你真的无法恢复状态。
答案 1 :(得分:0)
目前Cassandra本身不支持Spark 1.6中的流媒体源,您必须为自己的案例(listen to cassandra and output the contents of the specified table every say 4 seconds.
)实现自定义接收器。
请参阅实施指南: