簡體   English   中英

如何連接火花流與卡桑德拉?

[英]how to connect spark streaming with cassandra?

我正在使用

Cassandra v2.1.12
Spark v1.4.1
Scala 2.10

而卡桑德拉正在傾聽

rpc_address:127.0.1.1
rpc_port:9160

例如,要連接kafka和spark-streaming,每隔4秒聽一次kafka,我就有以下的spark工作

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“流式傳輸”數據的正確方法是什么?


目前,從C *流式傳輸數據的“正確方法”不是來自C *的流數據。相反,將消息隊列(如Kafka)放在C *和Stream之前通常更有意義。 C *不容易支持增量表讀取,但如果聚類鍵基於插入時間,則可以執行此操作。

如果您有興趣使用C *作為流媒體源,請務必查看並評論https://issues.apache.org/jira/browse/CASSANDRA-8844更改數據捕獲

哪個最有可能是你要找的。

如果你實際上只是想定期閱讀整個表並做一些事情,你可能最好只用一個cron作業啟動一個批處理操作,因為你真的無法恢復狀態。

目前Cassandra在Spark 1.6中不作為流媒體源本身支持,您必須為自己的情況實現自定義接收器( listen to cassandra and output the contents of the specified table every say 4 seconds. )。

請參閱實施指南:

Spark Streaming自定義接收器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM