我认为通过项目Tungesten的集成,spark会自动使用堆内存.
什么是spark.memory.offheap.size和spark.memory.offheap.enabled?我是否需要手动指定Tungsten的关闭堆内存量?
apache-spark apache-spark-sql spark-dataframe apache-spark-2.0 off-heap
我在一个线程中有一个直接的ByteBuffer(off-heap),并使用JMM给我的一种机制安全地将它发布到另一个线程.之前发生的关系是否扩展到ByteBuffer包装的本机(堆外)内存?如果不是,我怎样才能安全地将直接ByteBuffer的内容从一个线程发布到另一个线程?
编辑
这不是重复的多个线程可以在Java中看到直接映射的ByteBuffer上的写入吗?因为
编辑2
这不是使Java的ByteBuffer线程安全的选项的重复我不是试图从两个不同的线程同时修改ByteBuffer.我试图从一个线程转到另一个线程并且在由直接ByteBuffer支持的本机内存区域上的语义之前发生.一旦交接,第一个线程将不再修改或读取ByteBuffer.
我是编年史的新手.我正在尝试使用chronicle-map对离堆映射进行建模,其中键是原始short,值是原始长数组.对于给定的映射,长数组值的最大大小是已知的.但是我将有多个这种类型的映射,每个映射对于长数组值可能具有不同的最大大小.我的问题涉及密钥和值的序列化/反序列化.
从阅读文档我明白,对于密钥,我可以使用值类型ShortValue并重用该接口的实现实例.关于值,我找到了关于DataAccess和SizedReader的页面,它给出了byte []的一个例子,但我不确定如何将它改编为long [].我有一个额外的要求是我需要在长数组中的任意索引处获取和设置值,而无需每次都支付整个值的完整序列化/反序列化的成本.
所以我的问题是:如何构建地图时我如何建模值类型?如果每个地图知道最大尺寸并且我需要能够随机读写,那么我需要为long []数组设置什么序列化/反序列化代码每次没有序列化/反序列化整个值有效负载的索引?理想情况下,long []将直接编译/解码到堆外,而不会在堆上中间转换为byte [],并且chronicle-map代码也不会在运行时分配.谢谢.