Spark Streaming 火花流是spark API的扩展,它支持可伸缩、高吞吐量、容错的实时数据流处理。
数据可以从多种来源(如Kafka、Flume、Kinesis或tcp套接字)中摄取,并且可以使用用高级函数表示的复杂算法进行处理,例如map, reduce, join和window…最后,可以将处理过的数据推送到文件系统、数据库和活动仪表板。事实上,你可以申请星火机器学习和图形处理数据流算法。
在内部,它的工作方式如下。火花流接收实时输入数据流,并将数据分成几个批次,然后由火花引擎进行处理,生成最终的结果流。
火花流提供了一个名为离散流或DStream表示连续的数据流。DStreams可以从Kafka、Flume和Kinesis等源的输入数据流中创建,也可以通过对其他DStreams应用高级操作来创建。在内部,dStream表示为RDD
也就是SparkStreaming是用DStream来操作的与Spark Core里RDD操作一样
下面来是第一个程序wordcount
maven配置pom.xml
<!--SparkStreaming-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.1.1</version>
</dependency>
package date_10_16_SparkStreaming
import org.apache.spark.{SparkConf, streaming}
import org.apache.spark.streaming.{Seconds, StreamingContext}
object wordCount {
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setMaster("local[*]").setAppName("wordcount")
val streamingContext = new StreamingContext(conf,Seconds(3))
val socketLineDstream = streamingContext.socketTextStream("chun1",9999)
val wordToSumDstream = socketLineDstream.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
wordToSumDstream.print()
streamingContext.start()
streamingContext.awaitTermination()
}
}
打开虚拟机安装netcat,这里用netcat来写数据
yum install -y nc
安装完成后输入nc -lk 9999
运行上面程序
在netcat输入数据,这里设定的每三秒为一个采集周期
看到的结果如下所示