使用Java的火花结构化流


Spark提供流库来处理来自实时系统的连续数据流。

概念

星火流最初是用运行在星火RDD上的数据流应用编程接口实现的,在那里数据从流源被分成块,处理后发送到目的地。

从火花2开始,火花开发了一个新的模型,这是一个结构化的流,建立在火花SQL引擎的基础上,处理数据帧和数据集。

结构化流利用连续数据流作为一个无界表,当从流中处理事件时,该表会不断更新。

火花流应用程序可以使用对这种无界数据执行各种计算的SQL查询来实现。

结构化流处理一些挑战,如一次性流处理、增量更新等。

结构化流基于从源获取数据的触发间隔来轮询数据。将结果数据集写入接收器时需要输出模式。它支持追加模式(只有添加到结果表中的新数据元素才会被写入接收器)、更新模式(只有结果表中更新的数据元素才会被写入接收器)、完成模式(结果表中的所有项目都会被写入接收器)。


内置源和汇

结构化流支持以下内置数据源。

文件来源:允许读取放在特定目录的文件。支持的格式有文本、CSV、拼花、JSON

卡夫卡来源:流库提供卡夫卡消费者从卡夫卡经纪人读取数据。这在生产中被大量使用。

套接字源:可以使用UTF-8格式的套接字连接从套接字读取数据

支持的各种内置水槽如下

文件接收器:将输出存储到目录中

卡夫卡接收器:在卡夫卡中存储一个或多个主题的输出

控制台接收器:将输出打印到控制台,用于调试目的

内存接收器:输出作为内存表存储在内存中,用于调试目的

Foreach接收器:对输出中的记录运行临时计算

处理容错

结构化流通过使用检查点保存作业状态并从失败阶段重新启动作业来提供容错。这也适用于使用数据流的火花流。

此外,结构化流提供了以下基于条件的容错恢复机制。

  1. 源必须是可重放的,但尚未提交
  2. 流式接收器被设计为幂等的,用于处理再处理

示范

文件来源

在这个演示中,我们将看到火花流,使用文件源进行一些计算,并生成输出到控制台接收器。

此用例包含与员工相关的示例csv数据集,包含“empId,empName,department”字段。csv格式的数据将放在文件夹的特定位置。

火花流内置文件源监听目录更新事件通知,并将数据传递给计算层进行所需的分析。在本例中,输出被流式传输到控制台。

以下示例是火花结构化流程序,它根据文件流数据计算特定部门的员工人数

Java