java - 在静态数据集的多用户环境中并行运行多个 Spark 查询
问题描述
有没有办法在静态数据集上处理不同的 sparkSQL 查询(使用不同的过滤器和 groupbys 读取查询),从前端并行接收,而不是以 FIFO 方式,这样用户就不必等待了一个队列?
一种方法是从线程池的不同线程提交查询,但是并发线程不会竞争相同的资源,即 RDD 吗? 资源
有没有更有效的方法可以使用 spark 或任何其他大数据框架来实现这一点?目前,我正在使用 sparkSQL,数据以 parquet 格式存储(200GB)
解决方案
我假设您的意思是不同的用户提交他们自己的程序或 spark-shell 活动,而不是同一应用程序本身内的并行性。
既然如此,Fair Scheduler Pools 或 Spark Dynamic Resource Allocation 将是最好的选择。都可以在这里找到https://spark.apache.org/docs/latest/job-scheduling.html
这个领域有点难以理解,因为有以下概念:
...“请注意,目前没有一种模式提供跨应用程序的内存共享。如果您想以这种方式共享数据,我们建议运行一个服务器应用程序,该应用程序可以通过查询相同的 RDD 来服务多个请求。“。
关于这一点,人们可以在 Stack Overflow 上找到相反的陈述。Apache Ignite 就是这里的意思,它也可以为您服务。
推荐阅读
- go - 在 Gin 框架中开发的 REST API 的文件夹结构和包命名约定
- python - 无法访问 ko foreach 内容中的元素
- python - 这个语法是什么意思?words = [stemmer.stem(w.lower()) for w in words if w != "?"]
- android - 键入时间选择器不会触发 onTimeSet
- rest - Rest Easy Swagger api 文档
- reactjs - React 获取代码镜像值 onClick
- ios - How to decide what to use [Sqlite, Realm, CoreData, User-default, JSON file] to store data iOS?
- tensorflow - tape.gradient() 不能运行两次?
- r - 用R中的字符串替换作为整数向量列表(不仅仅是单个整数)的数据框列中的整数
- c++ - 获得基于 BSD 套接字的程序在 Emscripten 下进行 LAN 联网需要什么?