spark进行实时数据流计算时有两个工具
Spark Streaming:编写rdd代码处理数据流,可以解决非结构化的流式数据
Structured Streaming:编写df代码处理数据流,可以解决结构化和半结构化的流式数据
实时计算
实时计算,通常也称为“实时流计算”、“流式计算”
流数据处理是指实时、连续地处理数据流。数据在被产生或接收后立即处理,并不需要等待所有数据到齐。数据的处理和传输是“逐条”进行的。
处理时间:由于数据被实时处理,系统响应时间非常短,通常在毫秒或秒级。
数据量:流数据通常是无限的,数据持续不断地被生成和处理,系统需要持续运行。
公司活动需要实时查看活动效果,适合短期时间的计算
离线计算
离线计算,通常也称为“批处理”,表示那些离线批量、延时较高的静态数据处理过程。
批数据处理是指在一个预定时间内收集一批数据,然后一次性对这批数据进行处理。数据是成批处理的,而不是逐条处理。
处理时间:批处理通常不是实时的,处理的延迟可能是分钟、小时甚至更长,T+1。
数据量:批处理通常在所有数据收集完毕后进行,这意味着处理的数据集是固定大小的(如每日、每小时的数据)。数据处理完成后自动结束
固定指标计算,需要每天查看的数据内容
有界和无界数据
-
有界数据
-
有起始位置,有结束位置
。比如文件数据 有起始行,有结束行 -
有明确的数据容量大小
。处理数据时就能知道处理的数据大小 -
在处理数据时,按批次处理。
-
数据处理完成程序就结束
-
离线计算时处理的都是有界数据
-
-
无界数据
-
有起始位置,没有结束位置
,知道数据的起始位置在哪里,但是数据到哪结束不知道(因为数据在不断产生,什么时候结束不知道) -
流式数据都是无界数据
-
无界数据的
总量是不确定
,数据是不断产生的 -
数据有时效性 (有效期)
-
处理无界数据时,
程序时持续运行的
-
实现
1)需要安装ncat服务
在线安装:yum install nc
离线安装:rpm -ivh ncat-7.93-1.x86_64.rpm
2)启动服务绑定端口号:9999(若这个端口号被占用,可以换没有占用的端口号)
Structured Streaming代码程序
-
使用的是sparkSQl,所以在进行代码编写使用sparksql的方法进行编写
-
使用sparksession
3)执行代码
# 读取socket产生的实时数据流
from pyspark.sql import SparkSessionss = SparkSession.builder.getOrCreate()
# 数据流读取使用readStream
option = {# 指定读取的socket服务的ip地址'host': '192.168.88.100',# 指定读取的端口'port': 9999
}
# 将读取的流式数据转为无界表保存在dataframe
df = ss.readStream.load(format='socket', **option)# df数据处理# 数据的输出展示
# format 指定输出的服务 console 输出终端界面 kafka csv json es
# outputMode 输出模式 append complete update
# awaitTermination 让程序阻塞等待,可以是实现程序持续运行获取实时数据
df.writeStream.start(format='console',outputMode='append').awaitTermination()
4)在终端输入数据
5)查看运行结果,满足条件输出,不满足条件为空