第一章Spark Streaming 概述
1.1Spark Streaming 是什么?
(1)用于流式数据的处理。
(2)支持的数据输入源很多 kafka、flume 、twitter 、zeroMQ 简单的Tcp套接字
(3)数据输入后可以用Spark的高度抽象原语:map reduce join window 进行运算
(4)多位置保存 HDFS、 数据库
(5)高融合性:MLlib机器学习、Graphx都可以完美融合
(6)使用离散化流作为抽象表示,叫做DStream(随时间推移而收到数据的序列)
(7)内部,每个时间区间收到的数据都作为RDD存在,而DSrteam则是由这些RDD所组成的序列
(8)DStream多数据输入源创建,如:Flume、Kafka、或者HDFS。创建的DStream支持两种操作,一种是转化操作(生成新的DStream)另一种是输出操作,可以将数据写入外部系统中,DStream提供了许多与RDD所支持的操作相类似的操作支持,还增加了与时间相关的新操作,比如滑动窗口
1.2Spark Streaming 特点
(1)易用
(2)容错
(3)易整合到Spark体系
1.3SparkStraming架构
第二章Dsteam入门
2.1WordCount案例实操(idea)
1、需求
使用netcat工具向9999端口不断的发送数据,通过SparkStreaming读取端口数据并统计不同单词出现的次数
2、添加依赖(Pom.xml)
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.1.1</version>
</dependency>
3、编写代码
//首先需要连接Spark 和 初始化相关信息
//1.初始化Spark配置信息
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("StreamWordCount")
//2.初始化SparkStreamingContext
val ssc = new StreamingContext(sparkConf, Seconds(5))
//对数据进行处理
//3.通过监控端口创建DStream,读进来的数据为一行行
val lineStreams = ssc.socketTextStream("hadoop102", 9999)
//将每一行数据做切分,形成一个个单词
val wordStreams = lineStreams.flatMap(_.split(" "))
//将单词映射成元组(word,1)
val wordAndOneStreams = wordStreams.map((_, 1))
//将相同的单词次数做统计
val wordAndCountStreams = wordAndOneStreams.reduceByKey(_+_)
打印内容同时开启Stream接收数据
//打印
wordAndCountStreams.print()
//启动SparkStreamingContext
ssc.start()
ssc.awaitTermination()
4、在shell端通过NetCat发送数据
$ nc -lk 9999
hello BeiJing
未完待续…