Spark Streaming保存计算状态
⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3829字,阅读大概需要10分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
⏰个人网站:https://jerry-jy.co/❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我
一、实验目的
掌握 DStream数据累加函数updateStateByKey。
掌握 DStream数据累加函数mapWithState。
二、实验内容
1、每5秒钟计算一次每个单词出现的累加数量。(使用Socket数据源)
三、实验原理
在DStream中支持跨批次数据执行计算时保持任意状态。在Spark第一代流处理(Spark Streaming)中,这需要手工实现。
四、实验环境
硬件:x86_64 ubuntu 16.04服务器
软件:JDK 1.8,Spark-2.3.2,Hadoop-2.7.3
五、实验步骤
5.1 启动Spark集群
1、在终端窗口下,输入如下命令,启动Spark集群:
1. $ start-dfs.sh
2. $ cd /opt/spark
3. $ ./sbin/start-all.sh
2、启动spark-shell。在终端窗口下,输入如下命令(注意:以下命令中的localhost,请换成你自己虚拟机实际的机器名):
1. $ spark-shell --master spark://localhost:7077
3、另打开一个终端窗口,键入以下命令,启动Socket服务器:
1. $ nc -lp 9999
5.2 使用updateStateByKey函数,每5秒钟计算一次每个单词出现的累加数量
1、updateStateByKey 解释:
以DStream中的数据进行按key做reduce操作,然后对各个批次的数据进行累加。在有新的数据信息进入或更新时。能够让用户保持想要的不论什么状。使用这个函数需要两步:
1) 定义状态:可以是随意数据类型;
2) 定义状态更新函数:用一个函数指定怎样使用先前的状态。从输入流中的新值更新状态。
下面的实验代码使用updateStateByKey(newUpdateFunc)函数计算每5秒钟单词出现的累加数量。
请在spark-shell的paste模式下,输入以下代码:</