大資料-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 VS Structed StreaminSparkStruct
- sparkStreaming 之 kafka源SparkKafka
- Flume + Kafka + SparkStreaming分析KafkaSpark
- 大資料個人筆記(一)大資料筆記
- 大資料分析處理框架——離線分析(hive,pig,spark)、近似實時分析(Impala)和實時分析(storm、sparkstreaming)大資料框架HiveSparkORM
- 大資料基本公式——一:基礎大資料公式
- 學習大資料,一定要了解大資料的這些用途大資料
- 《大資料》配套PPT之一:第1章 大資料概念與應用大資料
- 貴州大資料培訓 《一步一步教你分析消費者大資料》大資料
- 大資料計算生態之資料計算(一)大資料
- 大資料之JAVA基礎(一):資料和變數大資料Java變數
- 一款強大的資料庫提取資料工具資料庫
- 走進大資料,感受大資料大資料
- SparkStreaming 的使用與總結Spark
- Kafka結合SparkStreaming開發KafkaSpark
- 好程式設計師大資料培訓分享大資料面試寶典一程式設計師大資料面試
- 好程式設計師大資料培訓分享大資料的影響一程式設計師大資料
- 大資料是什麼?一文帶你瞭解大資料的概念!大資料
- 大資料架構和模式(一)——大資料分類和架構簡介大資料架構模式
- 大資料VS大擁堵:大資料治理交通大資料
- 一個大資料屌絲的一天大資料
- 大資料資料收集大資料
- 大資料面試題以及答案整理(一)大資料面試題
- 大資料基礎(一)——關係+文章大資料
- 大資料時代 一本好書大資料
- 大資料之路 ——(一)演算法建模中的資料清洗大資料演算法
- 玩轉大資料系列之一:資料採集與同步大資料
- 資料結構::一些經典的大資料題資料結構大資料
- 快資料:大資料發展的下一個起點大資料
- 大資料概念:史上最全大資料解析大資料
- 大資料大利潤–資料資訊圖大資料
- 大資料與資訊保安(六)天網系統與大資料 大資料大資料
- 大資料如何採集資料?大資料的資料從何而來?大資料
- 大資料行業年薪幾十萬,這些大資料崗位薪資瞭解一下大資料行業
- 大資料:大資料之基礎語法大資料
- 大資料治理——搭建大資料探索平臺大資料