1、SparkStreaming概述
- 数据处理类型分类
- 静态数据
- 数据源是不变的、有限的、显式离散的
- 多适用于批量计算、离线计算
- 流数据
- 数据是变动的、无限的、连续的
- 多适用于实时计算,能在秒级、秒内处理完成
- sparkstreaming是什么
- 一句话总结:微批处理的流式(数据)实时计算框架。
- 原理:是把输入数据以某一时间间隔批量的处理,当批处理间隔缩短到秒级时,即可用于处理实时数据流。
- 优点
- 可以和spark core、sparksql等无缝集成
- 支持从多种数据源获取数据,包括Kafka、Flume、Twitter、ZeroMQ、Kinesis以及TCP sockets,然后可以使用诸如map、reduce、join等高级函数进行复杂算法的处理,最后可以将处理结果存储到HDFS文件系统,数据库等。
- 重要概念说明
- StreamingContext
- 类比于SparkContext,SparkSqlContext
- 流计算框架中的中枢类,负责各种环境信息、分发调度等任务。
- 数据源
- 简称:Source,意为DataSource的缩写
- 指流数据的来源是哪里,如文件,Socket输入、Kafka等。
- 离散流
- 英文称Discretized Stream,简称DStream,即为sparkstreaming微批处理当中的数据抽象单位。
- 是继spark core的RDD、spark sql的Dataframe和DataSet后又一基础的数据类型,是spark streaming特有的数据类型。
- 输入离散流
- 英文简称:Input DStream
- 将Spark Streaming连接到一个外部Source数据源来读取数据的统称
- 批数据
- 英文称Batch Data
- 连续数据离散化的步骤:将流式实时连续的数据整体转化成以时间片为单位进行分批,即将流式数据转化成时间片为单位数据进行批数据处理,随着时间推移,这些处理结果即形成结果数据流,即流处理引擎形成。
- 时间片或批处理时间间隔
- 英文称 batch interval
- 人为对流数据进行定量的标准,以时间片作为拆分流数据的依据。
- 一个时间片的数据对应一个RDD实例。
- 窗口长度
- 英文称window length
- 一个窗口覆盖的流数据的时间长度,必须是批处理时间间隔的倍数。
- 窗口分类
- 滑动窗口时间间隔
- 滑动窗口:简称Sliding window
- 前一个窗口到后一个窗口所经过的时间长度间隔。必须是批处理时间间隔的倍数
- 处理流程图示说明
Spark Streaming接收实时输入数据流并将数据分成批处理,然后由SparkCore引擎处理,以批量生成最终结果流。
2、scala快速构建SparkStreaming应用
- scala构建SparkStreaming应用步骤
- sbt构建空eclipse项目(done)
- build.sbt中添加spark-streaming依赖
- 以StreamingContext为起点,而向Dstream编程
- 测试运行、效果查看
- 步骤实现
- build.sbt中添加spark-streaming依赖
-
org.apache.spark
spark-streaming_${scala.compat.version}
2.3.2
provided
代码实现
-
def main(args: Array[String]): Unit = {
//创建配置文件
val conf=new SparkConf()
.setAppName("stream")
.setMaster("local[*]")
.set("spark.testing.memory","512000000")
//创建streamingContext,指定间隔时间
val streamingContext=new StreamingContext(conf,Seconds(5))
//连接到数据源
val lines=streamingContext.socketTextStream("192.168.1.114",9999)
//后续编写spark处理world count
val wordKV=lines.flatMap(_.split("t")).map(word=>(word,1))
val wc=wordKV.reduceByKey(_+_)
wc.print()
//开启streaming
streamingContext.start()
streamingContext.awaitTermination()
} - netcat介绍
- Linux版本
- 启动netcat命令
- nc -lk 9999 :意为开启本机的9999端口作为对外的TCP数据服务端口
- 开启本机的9999作为TCP服务端口
- 基本介绍