2023_Spark_实验二十:SparkStreaming累加计算单词频率

一、需求分析

在服务器端不断产生数据的时候,sparkstreaming客户端需要不断统计服务器端产生的相同数据出现的总数,即累计服务器端产生的相同数据的出现的次数。

二、实验环境

centos7 + nc + spark2.1.1 + windows + idea

三、思路分析

流程分析

思路分析

每次客户端程序处理服务器端数据后,将其结果缓存在检查点中,下一次客户端读入数据并处理数据时会去检查点根据key查询和进行更新,并重新将结果更新到检查点中。

检查点:本质上就是对应于HDFS上的一个目录,将数据写入到该目录下以文件的形式将结果保存下来。故,需要先在hdfs上创建检查点对应的目录。

四、编程实现

实验步骤:

  • 编写客户端处理程序,程序如下
Scala 复制代码
import org.apache.spark.SparkConf

import org.apache.spark.storage.StorageLevel

import org.apache.spark.streaming.{Seconds, StreamingContext}



object MyTotalNetworkWordCount {

def main(args: Array[String]): Unit = {

//创建一个Context对象: StreamingContext (SparkContext, SQLContext)

//指定批处理的时间间隔

val conf = newSparkConf().setAppName("MyNetworkWordCount").setMaster("local[2]")

val ssc = new StreamingContext(conf,Seconds(5))

//设置检查点

ssc.checkpoint("file:///d:/temp/checkpoint")



//创建一个DStream,处理数据,hadoop001为虚拟机的主机名,端口号为netcat服务的端口号

val lines = ssc.socketTextStream("192.168.245.110",1234,StorageLevel.MEMORY_AND_DISK_SER)



//执行wordcount

val words = lines.flatMap(_.split(" "))



//定义函数用于累计每个单词的总频率

val addFunc = (currValues: Seq[Int], prevValueState: Option[Int]) => {

//通过Spark内部的reduceByKey按key规约,然后这里传入某key当前批次的Seq/List,再计算当前批次的总和

val currentCount = currValues.sum

// 已累加的值

val previousCount = prevValueState.getOrElse(0)

// 返回累加后的结果,是一个Option[Int]类型

Some(currentCount + previousCount)

}



val pairs = words.map(word => (word, 1))



val totalWordCounts = pairs.updateStateByKey[Int](addFunc)

totalWordCounts.print()



ssc.start()

ssc.awaitTermination()

}

}
  • 运行程序

  • 在Linux中启动nc: nc -l 1234

  • 输入测试数据,每输入一次数据执行一次回车:

查看下检查点是否有数据:

相关推荐
诸神缄默不语9 小时前
备战 AI 出海 DAY 0:海外数据采集
大数据·人工智能
洋洋不叫杨杨11 小时前
揭秘当下知名的SEO优化渠道,你知道几个?
大数据·python
大大大大晴天11 小时前
用 Helm、CRD 与 Operator 管大数据:声明式运维如何替代脚本化部署
大数据
外域速览13 小时前
2026世界动力电池大会今日宜宾启幕:固态电池从实验室走向量产,IEC 国际标准终结概念乱象
大数据·人工智能·microsoft
小五传输13 小时前
FTP替代怎么做?医院文件安全传输选型与迁移指南
大数据·运维·安全
小刘快学习14 小时前
一把钥匙开所有门:企业AI网关的统一身份与权限治理
大数据·人工智能
大模型码小白15 小时前
AI大模型接入SDK:人工智能核心概念与发展史
大数据·运维·人工智能·安全·prompt
电商API_1800790524715 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
金立基胶粘16 小时前
如何利用替塑油推动环保发展?
大数据·安全
用户36105886261216 小时前
SparkStreaming 之 Kafka 与 SparkStreaming 参数配置详解
大数据·spark