我们的apachespark数据库需要一个内存缓存来提高性能。我最近对apache ignite做了一些研究,我们决定使用ignite作为spark的外部数据源,下面是我现在发现和困惑的地方:
在深入挖掘代码之后,我发现spark sql将被转换为ignite sql,然后查询将被发送到每个ignite节点并由h2引擎在其上执行,这是否意味着所有数据都需要在ignite缓存中,hdfs中的数据将不会被命中?我们的数据太大,无法将它们全部加载到内存中,我们只能将其中的一部分加载到内存中,可能只加载一些小表,如果查询没有命中缓存,客户端将转向hdfs。我的问题是:作为spark的外部数据源,如何在一个sparksql中扫描来自ignite和hdfs的所有数据?例如:选择person.name作为person,age,city.name作为city,country from person join city on person.city\u id=city.id city:所有数据都在内存中person:只有部分数据在内存中,部分数据在hdfs中;甚至可能不存在于ignite中。
我们的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条答案
按热度按时间myss37ts1#
您可以使用sparksql跨ignite和hdfs集群运行联合查询。下面是一个例子。此外,您可以始终启用ignite本机持久性并使其增长到超出可用内存容量。
罚单已经上报给了ignite jira。投赞成票!