apache-spark - Spark Structured Streaming - 流数据与静态数据相结合,每 5 分钟刷新一次
问题描述
对于 spark 结构化流作业,一个输入来自 kafka 主题,而第二个输入是一个文件(将由 python API 每 5 分钟刷新一次)。我需要加入这两个输入并写入 kafka 主题。
我面临的问题是当第二个输入文件被刷新并且火花流作业正在读取文件的同时我得到以下错误:
文件文件:/home/hduser/code/new/collect_ip1/part-00163-55e17a3c-f524-4dac-89a4-b9e12f1a79df-c000.csv 不存在 可能基础文件已更新。您可以通过重新创建相关的 Dataset/DataFrame 来显式地使 Spark 中的缓存无效。
任何帮助将不胜感激。
解决方案
使用 HBase 作为静态存储。这肯定是更多的工作,但允许并发更新。
在我工作的地方,所有 Spark Streaming 都使用 HBase 来查找数据。快得多。如果您有 100M 的客户来处理 10k 条记录的微批次怎么办?我知道最初的工作量很大。
见https://medium.com/@anchitsharma1994/hbase-lookup-in-spark-streaming-acafe28cb0dc
如果你有一个小的静态引用表,那么静态连接很好,但你也有更新,导致问题。
推荐阅读
- javascript - 如何将 SORT 和 Match google sheet 公式翻译成应用脚本/javascript?
- memory-management - Rust 分配内存布局与大小不一致
- c++ - 链接期间交叉编译提升失败(为树莓派编译的 Ubuntu)
- ios - viewDidLoad() 和 viewDidAppear() 只调用一次?
- javascript - Ajax 在第一次调用时很好地加载库,但在第二次调用时不加载库
- xpath - 如何使用 XPath 查找一组元素中选择组的属性的最小值/最大值?
- linkedin - LinkedIn 共享帖子 URL 与参数
- arrays - 如何在以下 json 数组中获取 f1 的值为 1 - '[1,2,3,{"f1":1,"f2":[5,6]},4]' 使用内置函数
- drag-and-drop - 从一个地方拖放到另一个地方的多个地方
- mysql - 我们如何防止 MySQL 的 SQL 注入?