請教一下,Spark Streaming怎麼實時讀取Redis的數據?
數據存在Redis裡面的,現在想用SparkStreaming實時去處理這個數據。問題
1:用SparkStreaming實時讀取Redis的數據可不可以,難度大不大。
2:如果方法一不行,還有沒有其他的方法。
最好提供點資料,謝謝!
===========================
在github上找到了一個項目(RedisLabs/spark-redis),支持Spark_Streaming讀取redis的數據,不過讀取list的時候採用的事blpop.
可以,難度不大。
你把數據從redis讀出來放到kafka里唄,然後用spark-streaming去讀kafka的數據,或者寫個程序從redis把數據讀出來用socket或文件的形式傳給spark-streaming,spark-streaming支持很多種源的方式
把客戶端帶上就正常用啊
著作權歸作者所有。
商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
作者:Yanjun
鏈接:Kafka+Spark Streaming+Redis實時計算整合實踐
來源:簡單之美 | 簡單之美,難得簡單,享受簡單的唯美。
Kafka+Spark Streaming+Redis實時計算整合實踐
基於Spark通用計算平台,可以很好地擴展各種計算類型的應用,尤其是Spark提供了內建的計算庫支持,像Spark Streaming、Spark SQL、MLlib、GraphX,這些內建庫都提供了高級抽象,可以用非常簡潔的代碼實現複雜的計算邏輯、這也得益於Scala編程語言的簡潔性。這裡,我們基於1.3.0版本的Spark搭建了計算平台,實現基於Spark Streaming的實時計算。我們的應用場景是分析用戶使用手機App的行為。
手機客戶端會收集用戶的行為事件(我們以點擊事件為例),將數據發送到數據伺服器,我們假設這裡直接進入到Kafka消息隊列後端的實時服務會從Kafka消費數據,將數據讀出來並進行實時分析,這裡選擇Spark Streaming,因為Spark Streaming提供了與Kafka整合的內置支持經過Spark Streaming實時計算程序分析,將結果寫入Redis,可以實時獲取用戶的行為數據,並可以導出進行離線綜合統計分析Spark Streaming提供了一個叫做DStream(Discretized Stream)的高級抽象,DStream表示一個持續不斷輸入的數據流,可以基於Kafka、TCP Socket、Flume等輸入數據流創建。在內部,一個DStream實際上是由一個RDD序列組成的。Sparking Streaming是基於Spark平台的,也就繼承了Spark平台的各種特性,如容錯(Fault-tolerant)、可擴展(Scalable)、高吞吐(High-throughput)等。
在Spark Streaming中,每個DStream包含了一個時間間隔之內的數據項的集合,我們可以理解為指定時間間隔之內的一個batch,每一個batch就構成一個RDD數據集,所以DStream就是一個個batch的有序序列,時間是連續的,按照時間間隔將數據流分割成一個個離散的RDD數據集。我們都知道,Spark支持兩種類型操作:Transformations和Actions。Transformation從一個已知的RDD數據集經過轉換得到一個新的RDD數據集,這些Transformation操作包括map、filter、flatMap、union、join等,而且Transformation具有lazy的特性,調用這些操作並沒有立刻執行對已知RDD數據集的計算操作,而是在調用了另一類型的Action操作才會真正地執行。Action執行,會真正地對RDD數據集進行操作,返回一個計算結果給Driver程序,或者沒有返回結果,如將計算結果數據進行持久化,Action操作包括reduceByKey、count、foreach、collect等。關於Transformations和Actions更詳細內容,可以查看官網文檔。同樣、Spark Streaming提供了類似Spark的兩種操作類型,分別為Transformations和Output操作,它們的操作對象是DStream,作用也和Spark類似:Transformation從一個已知的DStream經過轉換得到一個新的DStream,而且Spark Streaming還額外增加了一類針對Window的操作,當然它也是Transformation,但是可以更靈活地控制DStream的大小(時間間隔大小、數據元素個數),例如window(windowLength, slideInterval)、countByWindow(windowLength, slideInterval)、reduceByWindow(func, windowLength, slideInterval)等。Spark Streaming的Output操作允許我們將DStream數據輸出到一個外部的存儲系統,如資料庫或文件系統等,執行Output操作類似執行Spark的Action操作,使得該操作之前lazy的Transformation操作序列真正地執行。
推薦閱讀:
※spark連接hive
※SparkR專欄[5]—機器學習
※python操作hive實戰
※Spark SQL vs Impala, 同樣作為大數據SQL查詢引擎框架有什麼不同之處?