实验准备
- 实验目的
- 掌握使用 Socket编程
- 掌握Spark Streaming的基本操作
- 掌握Spark Streaming updateStateByKey的使用
- 实验内容
- 使用Spark Streaming构建实时数据计算系统,通过使用socket编程模拟用户浏览商品信息时产生的数据,使用Spark Streaming应用实现基本功能,使用updateStateByKey进行结果累加计算,将结果保存在HDFS上,在Spark平台上运行。
- 扩展功能:在实际项目中通常是使用kafka来进行消息的传输。这里没有使用kafka了,使用了Socket来模拟数据传输,可以尝试使用socket+kafka方式来作为数据传输。
实验知识点
- Scoket编程的基本原理
- Spark Streaming应用的基本实现
- DStream的基本操作
- updateStateByKey的使用
- 实验时长
- 4学时
- 实验环境
- 开发环境、工具:
- CentOS 7
- IntelliJ IDEA
环境准备
- 1、启动集群环境
- 2、使用IDEA新建一个python项目
数据准备
- 在项目中,新建一个socket生成器,该类的作用是:生成模拟数据。通过使用python socket编程模拟用户浏览商品信息时产生的数据,以及线程来控制它发送消息的频率。示例代码如下:
- pyhton的socket生成器,#/usr/local/spark/mycode/streaming/socket/DataSourceSocket.py
import socket
# 生成socket对象
server = socket.socket()
# 绑定ip和端口
server.bind(('localhost', 9999))
# 监听绑定的端口
server.listen(1)
while 1:
# 为了方便识别,打印一个“我在等待”
print("I'm waiting the connect...")
# 这里用两个值接受,因为连接上之后使用的是客户端发来请求的这个实例
# 所以下面的传输要使用conn实例操作
conn,addr = server.accept()
# 打印连接成功
print("Connect success! Connection is from %s " % addr[0])
# 打印正在发送数据
print('Sending data...')
conn.send('I love hadoop I love spark hadoop is good spark is fast'.encode())
conn.close()
print('Connection is broken.')
3、实时计算商品关注度
- 在项目的中新建py文件,该文件功能是:实时计算商品关注度。使用Spark Streaming应用实现基本功能,将结果保存在HDFS上。简单的实现了通过Streaming程序接收socket数据,并对数据进行拆分和计算。
- 数据处理:商品关注度怎么计算呢,这个可能需要一个约定,就是说浏览次数和浏览时间以及购买力度和是否收藏该商品都有一个权重,可能不同的公司觉得不同的选项权重不一样,可能你觉得浏览时间更重要,另一人觉得浏览次数更重要,所以我们事先约定好这个计算公式。我们约定浏览次数的权重为0.8,浏览时间权重为0.6,是否收藏和购买力度都为1。
- 更新关注度值:由于是流式数据,数据每分每秒都在产生,那么计算的关注值也在变化,那么就需要更新这个状态值。结果输出,并将里面的商品进行关注度排序,降序排序,只显示关注度最高的十个商品。