使用 Spark 3.2 将 IoT 数据持续摄取到 delta lake
Using Spark 3.2 to ingest IoT data into delta lake continuously
可以直接使用org.apache.spark.sql.delta.sources.DeltaDataSource
以附加模式连续摄取数据吗?
还有其他更合适的方法吗?我担心的是延迟和可扩展性,因为每个振动传感器的数据采集频率可以达到 30 KHz,并且有几个,我需要在 Delta Lake 中记录原始数据以进行 FFT 和 Wavelet 分析等。
在我的架构中,数据摄取是在 Spark 应用程序中连续完成的,而分析是在另一个具有按需查询的独立 Spark 应用程序中执行的。
如果没有适用于 Delta Lake 的解决方案,则适用于 Apache Parquet 的解决方案会起作用,因为可以根据存储在 Parquet 数据集中的数据在 Delta Lake 中创建数据集。
是的,这是可能的,而且效果很好。 Delta 的流式架构有几个优点:
- 您没有流式工作负载经常出现的“小文件问题”——您不需要列出所有数据文件来查找新文件(如 Parquet 或其他数据源的情况)——所有数据记录在事务日志中
- 您的消费者看不到部分写入,因为 Delta 提供了事务功能
- 流式处理工作负载为 natively supported by Delta
- 即使是流式工作负载,您也可以执行 DELETE/UPDATE/MERGE - Parquet 是不可能的
P.S。你可以只使用 .format("delta")
而不是完整的 class name
可以直接使用org.apache.spark.sql.delta.sources.DeltaDataSource
以附加模式连续摄取数据吗?
还有其他更合适的方法吗?我担心的是延迟和可扩展性,因为每个振动传感器的数据采集频率可以达到 30 KHz,并且有几个,我需要在 Delta Lake 中记录原始数据以进行 FFT 和 Wavelet 分析等。
在我的架构中,数据摄取是在 Spark 应用程序中连续完成的,而分析是在另一个具有按需查询的独立 Spark 应用程序中执行的。
如果没有适用于 Delta Lake 的解决方案,则适用于 Apache Parquet 的解决方案会起作用,因为可以根据存储在 Parquet 数据集中的数据在 Delta Lake 中创建数据集。
是的,这是可能的,而且效果很好。 Delta 的流式架构有几个优点:
- 您没有流式工作负载经常出现的“小文件问题”——您不需要列出所有数据文件来查找新文件(如 Parquet 或其他数据源的情况)——所有数据记录在事务日志中
- 您的消费者看不到部分写入,因为 Delta 提供了事务功能
- 流式处理工作负载为 natively supported by Delta
- 即使是流式工作负载,您也可以执行 DELETE/UPDATE/MERGE - Parquet 是不可能的
P.S。你可以只使用 .format("delta")
而不是完整的 class name