1.实验背景
Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。支持从多种数据源获取数据,包括Kafk、Flume、Twitter、ZeroMQ、Kinesis 以及TCP sockets,从数据源获取数据之后,可以使用诸如map、reduce、join和window等高级函数进行复杂算法的处理。最后还可以将处理结果存储到文件系统,数据库和现场仪表盘。
本次实验主要通过通过Socket端口监听并接收数据,然后时统计输入的单词数量。
实验流程大体如下:
2.数据集
2.1.数据集介绍
无
2.2.特征说明
无
3.实验目标
1)能够使用Socket端口监听并接收数据;
2)能够使用Spark Streaming处理计算接收的数据流。
4.任务环境
本任务在Linux操作系统下完成,需要涉及到以下软件(版本号仅供参考,可以使用不同版本):
1)JDK:1.8.0;
2)Scala:2.11.0;
3)Spark:2.1.0。
1.安装netcat
step1 进入系统桌面,右键,选择在此打开终端(1号)
step2 使用yum工具安装netcat
netcat(nc)可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接。在Linux终端窗口可以直接使用yum工具进行安装:
yum install nc
出现如图所示信息,则表示netcat安装成功:
2.编写词频统计程序
step1 进入系统桌面,右键,选择在此打开新的终端(2号)
step2 启动spark-shell
./spark-shell
出现如图所示信息,则表示spark-shell启动成功:
step3 编写词频统计程序
在spark-shell中输入如下代码:
import org.apache.spark.streaming._
import org.apache.spark.storage.StorageLevel
//初始化SparkStreaming,每1s计算一次
sc.setLogLevel("FATAL")
val ssc = new StreamingContext(sc, Seconds(1))
//监听socket端口数据,数据缓存在内存和本地val lines = ssc.socketTextStream("localhost", 9999, StorageLevel.MEMORY_AND_DISK_SER)
//数据按空格分割 val words = lines.flatMap(_.split(" ")) //统计出现相同的单词个数 val wordCounts = words.map(x => (x, 1)).reduceByKey(_ + _) wordCounts.print() ssc.start()
3.开启监听模式
step1 开启nc监听模式
在1号终端输入如下命令:
nc -lk 9999
注:nc -lk port 待连接port端口
step2 输入语句
在1号随意输入想要词语统计的句子,如:
i love spark,i love hadoop
此时2号终端会实时输出word计数信息。
(i,2)
(love,2)
(spark,1)
(hadoop,1)
(,,1)