天天看點

Spark入門:Spark Streaming 概覽

<a href="http://s1.51cto.com/wyfs02/M02/9E/6E/wKiom1mRDpnjonstAAS9PfMCTqo980.jpg-wh_651x-s_1178740078.jpg" target="_blank"></a>

概覽

Spark Streaming是Spark API的一個可橫向擴容,高吞吐量,容錯的實時資料流處理引擎,Spark能夠從Kafka、Flume、Kinesis或者TCP等等輸入擷取資料,然後能夠使用複雜的計算表達式如map,reduce,join和window對資料進行計算。計算完後的資料能夠被推送到檔案系統,資料庫,和實時的儀表盤。另外,你也可以使用Spark ML和圖計算處理實時資料流。

<a href="http://s3.51cto.com/wyfs02/M02/9E/5C/wKioL1mRDqyAFPQEAADMV58sDAg529.jpg" target="_blank"></a>

Spark Streaming接受到了實時資料後,把它們分批進行切割,然後再交給Spark進行資料的批量處理。

<a href="http://s3.51cto.com/wyfs02/M00/9E/5C/wKioL1mRDrngZnmiAACHVzeOqdQ405.jpg" target="_blank"></a>

Spark Streaming對離散化的資料流提供了進階别的抽象DStream,所有進入的資料流都會被處理為DStreams,在内部,DStream是一個順序排列的RDD。

快速起步

第一個執行個體是如何從TCP輸入中計算單詞出現的次數

首先,我們建立一個JavaStreamingContext對象,它是所有Streaming函數的主入口,再建立一個帶有2個線程的StreamingContext對象,每1秒進行一次批處理。

import org.apache.spark.*; 

import org.apache.spark.api.java.function.*; 

import org.apache.spark.streaming.*; 

import org.apache.spark.streaming.api.java.*; 

import scala.Tuple2; 

SparkConf conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount"); 

JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(1)); 

建立一個偵聽本地9999的TCP資料源

JavaReceiverInputDStream&lt;String&gt; lines = jssc.socketTextStream("localhost", 9999); 

我們把接受到的資料按照空格進行切割

JavaDStream&lt;String&gt; words = lines.flatMap(x -&gt; Arrays.asList(x.split(" ")).iterator()); 

對單詞進行統計

JavaPairDStream&lt;String, Integer&gt; pairs = words.mapToPair(s -&gt; new Tuple2&lt;&gt;(s, 1)); 

JavaPairDStream&lt;String, Integer&gt; wordCounts = pairs.reduceByKey((i1, i2) -&gt; i1 + i2);  

wordCounts.print(); 

把字元串拍扁-&gt;映射-&gt;進行去重統計,最後調用print函數把資料列印到控制台中

jssc.start();              // Start the computation 

jssc.awaitTermination();   // Wait for the computation to terminate 

最後,啟動整個計算過程

為了完成這次實驗,還需要使用nc作為Server進行配合

nc -lk 9999 

Spark提供了示例,可以使用 ./bin/run-example streaming.JavaNetworkWordCount localhost 9999 來體驗WordCount 

本文作者:小埋醬

來源:51CTO

繼續閱讀