如何使用 Apache Ignite 作为 Apache Spark 的外部数据源

How to use Apache Ignite as an external data source of Apache Spark

我们的 Apache Spark 数据库需要一个内存缓存来提高性能。我最近对 ​​Apache Ignite 做了一些研究,我们决定使用 Ignite 作为 Spark 的外部数据源,以下是我现在发现和困惑的地方:

  1. 深入研究代码后,我发现Spark SQL将转换为Ignite SQL,然后查询将发送到每个Ignite节点并由H2引擎执行在它上面,这是否意味着所有数据都需要在 Ignite 缓存中,HDFS 中的数据不会被命中? 我们的数据太大,无法将它们全部加载到内存中,我们只能将它们中的一部分加载到内存中,也许只加载一些小表,如果查询没有命中缓存,客户端将转向 HDFS。 我的问题是:作为Spark的外部数据源,我们如何在一个Spark中扫描来自Ignite和HDFS的所有数据SQL? 如: SELECT person.name 作为人,年龄,city.name 作为城市,国家 FROM person JOIN city ON person.city_id = city.id city:所有数据都在内存中 person:只有一部分数据在内存,一部分在HDFS;甚至可能没有缓存在 Ignite 中。

  2. 我们的Spark版本是3.0,Ignite目前只支持2.4,不知道Apache Ignite支持Spark 3.0的计划是什么,你有什么建议我们的系统支持 Spark 3.0 吗? 重新实现为支持 2.4 所做的一切是否是个好主意? https://ignite.apache.org/docs/latest/extensions-and-integrations/ignite-for-spark/ignite-dataframe

感谢您的宝贵建议:)

  1. 您可以 运行 使用 Spark SQL 跨 Ignite 和 HDFS 集群联合查询。这是 an example. Also, you can always enable Ignite native persistence 并且超出可用内存容量。

  2. The ticket 已报告给 Ignite JIRA。投票!