我们希望在工作站的Apache Spark中使用ChronicleMap来在VM中存储共享缓存。目前,我们正在使用Hazelcast来共享缓存,但很明显,能够免费使用堆外内存并避免tcp-ip(甚至超过127.0.0.1)是我们喜欢ChronicleMap的原因,这就是为什么我们希望能够使用它。
这个想法是让所有落在同一物理机器中的执行者共享缓存,缓存将持久保存到tmpfs
,以便它保持有效直到VM本身存活(我们不需要值在实例生命周期中持久化)并且任何加入的工作者都可以开始使用它。理想情况下,我们需要对存储的密钥进行LRU驱逐,虽然ChronicleMap不支持它,但考虑到它使用了堆外内存,我想我们可以忍受这种限制,但更令人担忧的是它需要在访问期间从崩溃中恢复{{ 3}}这是我们设置中的一个问题。
例如,假设我们在共享缓存的同一个VM上运行5个执行程序,其中一个VM在访问损坏缓存期间崩溃。其他执行者无法知道这一点,只有其中一个人在等待时才能恢复。如果至少确保恢复期间或损坏的缓存上的并发恢复或访问会引发一些异常,那将有所帮助,因为那时,每个访问失败的人都可以尝试获取文件锁,然后开始恢复过程,其他任何人都可以访问在这段时间内可能会收到另一个异常,表明恢复正在进行,最后,缓存是固定的,事情已恢复正常,但是从文档来看,行为似乎是未定义的,这留下了太多的疑惑。
是否有可能让ChronicleMap在我们的设置中运行?鉴于这些要求,还有其他人成功地让它在Apache Spark中工作吗?任何建议都会有所帮助。