Spark Streaming的流数据处理和分析 Spark读写Kafka
一、流是什么
-
数据流
- 数据的流入
- 数据的处理
- 数据的流出
-
随处可见的数据流
- 电商网站、日志服务器、社交网络和交通监控产生的大量实时数据
-
流处理
- 是一种允许用户在接收到的数据后的短时间内快速查询连续数据流和检测条件的技术
-
流的好处
- 它能够更快地提供洞察力,通常在毫秒到秒之间
- 大部分数据的产生过程都是一个永无止境的事件流
- 要进行批处理,需要存储它,在某个时间停止数据收集,并处理数据
- 流处理自然适合时间序列数据和检测模式随时间推移
-
流的应用环境
- 股市监控
- 交通监控
- 计算机系统与网络监控
- 监控生产线
- 供应链优化
- 入侵、监视和欺诈检测
- 大多数智能设备应用
- 上下文感知促销和广告
-
流处理框架
- Apache Spark Streaming ——二代
- Apache Flink ——三代
- Confluent
- Apache Storm ——一代
二、Spark Streaming
1、简介
- 是基于Spark Core API的扩展,用于流式数据处理
- 支持多种数据源和多种输出
- 高容错
- 可扩展
- 高流量
- 低延时(Spark 2.3.1 延时1ms,之前100ms)
2、流数据处理框架
- 典型架构
3、内部工作流程
- 微批处理:输入->分批处理->结果集
- 以离散流的形式传入数据(DStream:Discretized Streams)
- 流被分成微批次(1-10s),每一个微批都是一个RDD
三、StreamingContext Spark Streaming读kafa数据
1、创建
- Spark Streaming流处理的入口
- 2.2版本SparkSession未整合StreamingContext,所以仍需单独创建
import org.apache.spark._
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
val conf=new SparkConf().setMaster("local[2]").setAppName("kgc streaming demo")
val ssc=new StreamingContext(conf,Seconds(8))
//在spark-shell下,会出现如下错误提示:
//org.apache.spark.SparkException: Only one SparkContext may be running in this JVM
//解决:
//方法1、sc.stop //创建ssc前,停止spark-shell自行启动的SparkContext
//方法2、或者通过已有的sc创建ssc:val ssc=new StreamingContext(sc,Seconds(8))
1、一个JVM只能有一个StreamingContext启动
2、StreamingContext停止后不能再启动
2、入门 Spark Streaming读kafa数据示例
wordcount:
- 单词统计——基于TCPSocket接收文本数据
开启kafka服务:
kafka-server-start.sh /opt/soft/kafka211/config/server.properties
- pom:
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.3.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-sql -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.3.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.3.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming-kafka-0-10 --