大資料-SparkStreaming(一)
大資料-SparkStreaming(一)
SparkStreaming簡介
SparkStreaming是對於Spark核心API的擴充,從而支援對於實時資料流的可擴充,高吞吐量和容錯性流處理。資料可以由多個源取得,例如:Kafka,Flume,Twitter,ZeroMQ,Kinesis或者TCP介面,同時可以使用由如map,reduce,join和window這樣的高層介面描述的複雜演算法進行處理。最終,處理過的資料可以被推送到檔案系統,資料庫和HDFS。
Spark Streaming 是基於spark的流式批處理引擎,其基本原理是把輸入資料以某一時間間隔批量的處理,當批處理間隔縮短到秒級時,便可以用於處理實時資料流。
SparkStreaming架構流程
SparkStreaming程式入口
val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
val ssc = new StreamingContext(conf, Seconds(1))
//或者
val ssc = new StreamingContext(new SparkContext(conf), Seconds(1))
什麼是DStream
離散資料流或者DStream是SparkStreaming提供的基本抽象。其表現資料的連續流,這個輸入資料流可以來自於源,也可以來自於轉換輸入流產生的已處理資料流。內部而言,一個DStream以一系列連續的RDDs所展現,這些RDD是Spark對於不變的,分散式資料集的抽象。一個DStream中的每個RDD都包含來自一定間隔的資料,如下圖:
在DStream上使用的任何操作都會轉換為針對底層RDD的操作。例如:之前那個將行的流轉變為詞流的例子中,flatMap操作應用於行DStream的每個RDD上 從而產生words DStream的RDD。如下圖:
DStream運算元操作
Transformations
- 實現把一個DStream轉換生成一個新的DStream,延遲載入不會觸發任務的執行
Transformation | Meaning |
---|---|
map(func) | 對DStream中的各個元素進行func函式操作,然後返回一個新的DStream |
flatMap(func) | 與map方法類似,只不過各個輸入項可以被輸出為零個或多個輸出項 |
filter(func) | 過濾出所有函式func返回值為true的DStream元素並返回一個新的DStream |
repartition(numPartitions) | 增加或減少DStream中的分割槽數,從而改變DStream的並行度 |
union(otherStream) | 將源DStream和輸入引數為otherDStream的元素合併,並返回一個新的DStream. |
count() | 通過對DStream中的各個RDD中的元素進行計數,然後返回只有一個元素的RDD構成的DStream |
reduce(func) | 對源DStream中的各個RDD中的元素利用func進行聚合操作,然後返回只有一個元素的RDD構成的新的DStream. |
countByValue() | 對於元素型別為K的DStream,返回一個元素為(K,Long)鍵值對形式的新的DStream,Long對應的值為源DStream中各個RDD的key出現的次數 |
reduceByKey(func, [numTasks]) | 利用func函式對源DStream中的key進行聚合操作,然後返回新的(K,V)對構成的DStream |
join(otherStream, [numTasks]) | 輸入為(K,V)、(K,W)型別的DStream,返回一個新的(K,(V,W))型別的DStream |
cogroup(otherStream, [numTasks]) | 輸入為(K,V)、(K,W)型別的DStream,返回一個新的 (K, Seq[V], Seq[W]) 元組型別的DStream |
transform(func) | 通過RDD-to-RDD函式作用於DStream中的各個RDD,可以是任意的RDD操作,從而返回一個新的RDD |
updateStateByKey(func) | 根據key的之前狀態值和key的新值,對key進行更新,返回一個新狀態的DStream |
reduceByKeyAndWindow | 視窗函式操作,實現按照window視窗大小來進行計算 |
Output Operations
- 輸出運算元操作,觸發任務的真正執行
Output Operation | Meaning |
---|---|
print() | 列印到控制檯 |
saveAsTextFiles(prefix, [suffix]) | 儲存流的內容為文字檔案,檔名為"prefix-TIME_IN_MS[.suffix]". |
saveAsObjectFiles(prefix, [suffix]) | 儲存流的內容為SequenceFile,檔名為 "prefix-TIME_IN_MS[.suffix]". |
saveAsHadoopFiles(prefix, [suffix]) | 儲存流的內容為hadoop檔案,檔名為 "prefix-TIME_IN_MS[.suffix]". |
foreachRDD(func) | 對Dstream裡面的每個RDD執行func |
相關文章
- sparkStreaming 之 kafka源SparkKafka
- SparkStreaming VS Structed StreaminSparkStruct
- 【大資料】科普一下大資料的那些事兒大資料
- Kafka結合SparkStreaming開發KafkaSpark
- SparkStreaming 的使用與總結Spark
- 大資料基本公式——一:基礎大資料公式
- 學習大資料,一定要了解大資料的這些用途大資料
- 一款強大的資料庫提取資料工具資料庫
- 大資料計算生態之資料計算(一)大資料
- 大資料之JAVA基礎(一):資料和變數大資料Java變數
- 走進大資料,感受大資料大資料
- 好程式設計師大資料培訓分享大資料的影響一程式設計師大資料
- 大資料是什麼?一文帶你瞭解大資料的概念!大資料
- 一個大資料屌絲的一天大資料
- 大資料之路 ——(一)演算法建模中的資料清洗大資料演算法
- 玩轉大資料系列之一:資料採集與同步大資料
- 大資料hadoop資料大資料Hadoop
- 大資料基礎(一)——關係+文章大資料
- 大資料與資訊保安(六)天網系統與大資料 大資料大資料
- 好程式設計師大資料培訓分享大資料面試寶典一程式設計師大資料面試
- 大資料概念:史上最全大資料解析大資料
- SparkStreaming實時流處理學習Spark
- 大資料如何採集資料?大資料的資料從何而來?大資料
- 大資料行業年薪幾十萬,這些大資料崗位薪資瞭解一下大資料行業
- 記一次SparkStreaming不產生新的batchJob的問題排查SparkBAT
- 一篇文章詳解大資料技術和應用場景 大資料大資料
- 一起來學大資料——走進Linux之門,學習大資料的重中之重大資料Linux
- 大資料學習資料大資料
- 大資料:大資料之基礎語法大資料
- 大資料治理——搭建大資料探索平臺大資料
- 大資料筆記01--大資料概述大資料筆記
- 什麼叫大資料 大資料的概念大資料
- 蛙眼全網資訊大資料、文旅大資料、教育大資料、大資料
- 一文了解主流大資料ETL工具大資料
- 大資料面試題以及答案整理(一)大資料面試題
- 大快搜尋的大資料一體化開發框架下的大資料爬蟲安裝教程大資料框架爬蟲
- 加入大資料週刊,一大波福利來了!大資料
- 入門大資料---大資料調優彙總大資料