如何在非实时的情况下使用sql在配置单元表上进行spark流处理?

m3eecexj  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(385)

我们有一些数据(数百万)在Hive表,每天来。第二天,一旦跨夜摄取完成,不同的应用程序将向我们查询数据(使用sql)
我们用这个sql调用spark

spark.sqlContext.sql(statement)  // hive-metastore integration is enabled

这会导致spark驱动程序占用太多内存,我们可以使用spark流(或结构化流)以管道方式流式传输结果,而不是收集驱动程序上的所有内容然后发送到客户端吗?
我们不希望数据一出现就发送出去(在典型的流应用程序中),而是希望在客户端请求(拉取)数据时将流数据发送给客户端。

5sxhfpxr

5sxhfpxr1#

iiuc。。
spark streaming主要是通过将流数据转换成毫秒到秒的批量来处理流数据。
你可以看看 streamingDF.writeStream.foreachBatch { (batchDF: DataFrame, batchId: Long) 为spark提供了一个非常好的功能,可以以微批量方式写入流式处理的输出接收器。
然而,spark结构化流并没有定义一个标准的jdbc源来读取。
如果每个客户端都需要相同/相似的数据或根据spark.sql的where条件进一步查询和传输所需的文件,则可以通过spark.sql进行选择,而不是通过spark.sql直接存储配置单元底层文件。
资料来源:
结构化流式处理查询使用微批处理引擎进行处理,该引擎将数据流作为一系列小批量作业进行处理,从而实现低至100毫秒的端到端延迟,并确保容错性。
前批次:
foreachbatch(…)允许您指定对流式查询的每个微批的输出数据执行的函数。自从spark 2.4以来,scala、java和python都支持这一点。它有两个参数:一个dataframe或dataset,其中包含微批的输出数据和微批的唯一id。

相关问题