首页 > 解决方案 > 在静态数据集的多用户环境中并行运行多个 Spark 查询

问题描述

有没有办法在静态数据集上处理不同的 sparkSQL 查询(使用不同的过滤器和 groupbys 读取查询),从前端并行接收,而不是以 FIFO 方式,这样用户就不必等待了一个队列?

一种方法是从线程池的不同线程提交查询,但是并发线程不会竞争相同的资源,即 RDD 吗? 资源

有没有更有效的方法可以使用 spark 或任何其他大数据框架来实现这一点?目前,我正在使用 sparkSQL,数据以 parquet 格式存储(200GB)

标签: javaapache-sparkparallel-processingbigdataparquet

解决方案


我假设您的意思是不同的用户提交他们自己的程序或 spark-shell 活动,而不是同一应用程序本身内的并行性。

既然如此,Fair Scheduler Pools 或 Spark Dynamic Resource Allocation 将是最好的选择。都可以在这里找到https://spark.apache.org/docs/latest/job-scheduling.html

这个领域有点难以理解,因为有以下概念:

...“请注意,目前没有一种模式提供跨应用程序的内存共享。如果您想以这种方式共享数据,我们建议运行一个服务器应用程序,该应用程序可以通过查询相同的 RDD 来服务多个请求。“。

关于这一点,人们可以在 Stack Overflow 上找到相反的陈述。Apache Ignite 就是这里的意思,它也可以为您服务。


推荐阅读