7.4 基本输入源

一、文件流

1.在spark-shell中创建文件流

进入spark-shell创建文件流。另外打开一个终端窗口,启动进入spark-shell 

上面在spark-shell中执行的程序,一旦你输入ssc.start()以后,程序就开始自动进入循环监听状态,屏幕上会显示一堆的信息,如下:

在“/usr/local/spark/mycode/streaming/logfile”目录下新建一个log.txt文件,就可以在监听窗口中显示词频统计结果

2.采用独立应用程序方式创建文件流

在当前streaming下创建三级子目录,因为只有把代码放到src/main/scala目录下,sbt打包编译工具才能够正确运行。

用vim编辑器新建一个TestStreaming.scala代码文件,请在里面输入以下代码:

在simple.sbt文件中输入以下代码: 

执行sbt打包编译的命令如下:

 打包成功以后,就可以输入以下命令启动这个程序:

  1. 执行上面命令后,就进入了监听状态(我们把运行这个监听程序的窗口称为监听窗口)
  2. 切换到另外一个Shell窗口,在"/usr/local/spark/mycode/streaming/logfile"目录下再新建一个log2.txt文件,文件里面随便输入一些单词,保存好文件退出vim编辑器
  3. 再次切换回“监听窗口”,等待20秒以后,按键盘Ctrl+C或者Ctrl+D停止监听程序,就可以看到监听窗口的屏幕上会打印出单词统计信息

二、套接字流

Spark Streaming可以通过Socket端口监听并接收数据,然后进行相应处理

1.Socket工作原理

2.使用套接字流作为数据源

 

(1)客户端

请在NetworkWordCount.scala文件中输入如下内容:(客户端向服务端发起连接,需要告诉它向哪个主机哪个端口发起连接)

在相同目录下再新建另外一个代码文件StreamingExamples.scala,文件内容如下:

编译打包

在simple.sbt文件中输入以下代码

对streaming整体进行sbt编译打包

打包成功以后,就可以输入以下命令启动这个程序

(2)服务端

新打开一个窗口作为nc窗口,启动nc程序:

可以在nc窗口中随意输入一些单词,监听窗口就会自动获得单词数据流信息,在监听窗口每隔1秒就会打印出词频统计信息,大概会在屏幕上出现类似如下的结果:

3.使用Socket编程实现自定义数据源

下面我们再前进一步,把数据源头的产生方式修改一下,不要使用nc程序,而是采用自己编写的程序产生Socket数据源(服务端),源源不断的产生数据。

与词频统计客户端在同一个包

监听过程:

执行sbt打包编译: 

 

DataSourceSocket程序需要把一个文本文件作为输入参数,所以,在启动这个程序之前,需要首先创建一个文本文件word.txt并随便输入几行内容:/usr/local/spark/mycode/streaming/word.txt 

启动DataSourceSocket程序:

这个窗口会不断打印出一些随机读取到的文本信息,这些信息也是Socket数据源,会被监听程序捕捉到

在另外一个窗口启动监听程序(客户端,向服务端发送请求):

启动成功后,你就会看到,屏幕上不断打印出词频统计信息

三、RDD队列流

在调试Spark Streaming应用程序的时候,我们可以使用streamingContext.queueStream(queueOfRDD)创建基于RDD队列的DStream。

新建一个TestRDDQueueStream.scala代码文件,功能是:每隔1秒创建一个RDD,Streaming每隔2秒就对数据进行处理。

 

 

sbt打包成功后,执行下面命令运行程序

 执行上面命令以后,程序就开始运行,就可以看到类似下面的结果:

 

 

 

 

 

参考文献:

【1】https://www.icourse163.org/learn/XMU-1205811805?tid=1206617233&from=study#/learn/content?type=detail&id=1211383870&cid=1214032055&replay=true

posted @   nxf_rabbit75  阅读(546)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
历史上的今天:
2018-12-11 pandas取dataframe特定行/列
一、文件流1.在spark-shell中创建文件流2.采用独立应用程序方式创建文件流二、套接字流1.Socket工作原理2.使用套接字流作为数据源3.使用Socket编程实现自定义数据源三、RDD队列流
点击右上角即可分享
微信分享提示