我建议最好通过批量读取行并使用Spark Streaming处理它们来处理巨大的JDBC表。这种方法不需要将所有行读入内存。我想不监视表中的新行,而只需读取表一次。
我很惊讶,没有JDBC Spark Streaming接收器实现。实现Receiver看起来并不困难。
您能否描述为什么不存在这样的接收器(这种方法不好吗?)或提供实现的链接。
我找到了Stratio/datasource-receiver。但是它会在通过Spark Streaming处理之前读取DataFrame中的所有数据。
谢谢!
首先是实际的[[streaming源”将需要一种可靠的机制来监视更新,这根本不是JDBC接口的一部分,也不是主要RDBM的标准化(如果有的话)功能,更不用说其他平台了,可以通过JDBC访问。这意味着从这样的源流式传输通常需要使用日志复制或类似的工具,并且高度依赖于资源。
与您所描述的相同建议最好通过批量读取行并使用Spark Streaming处理它们来处理巨大的JDBC表。这种方法不需要将所有行读入内存。我想不监视表中的新行,而只需读取表一次
确实不是流的用例。流处理无限的数据流,而您只是想作为partitioning的场景,而这种功能已经是标准JDBC连接器的一部分(无论是范围还是谓词)。
另外,基于接收器的解决方案无法很好地扩展,无法有效地对顺序过程进行建模。结果,它们的应用程序相当有限,并且如果数据有界,它的吸引力也不会降低(如果您要在单个节点上顺序读取有限的数据,则将Spark添加到等式中没有任何价值)。 >