spark为什么这么快
作者:张科 网上答案都是千篇一律:数据都在内存所以快,是有误区的。 聊spark必须聊rdd, rdd 全英文 Resilient Distributed Datasets,搞懂这三个单词就完事了其实。 Resilient:能复原的,弹回的,有弹性的。谈谈spark的内存机制,spark的内存整体分外堆内内存和对外内存,而在内存的使用上又分为数据内存和运行内存,就是数据存储和程序运行。 堆内内存的管理并不完全依托与jvm,jvm对于所有的对象都要序列化为二进制字节流,本质上是就是将不连续的空间转换为连续的空间并且需要的空间也会小,相应的也就有反序列化。序列化的方式可以节省空间,但增加了读取时候计算的开销。spark的对象由于是字节流的形式,其占用的内存大小可直接计算,而对于非序列化的对象,其占用的内存是通过周期性地采样近似估算而得,即并不是每次新增的数据项都会计算一次占用的内存大小,这种方法降低了时间开销但是有可能误差较大。 因为堆内内存会有诸多限制,所以spark通过JDK Unsafe API实现堆外内存。Spark 可以直接操作系统堆外内存,减少了不必要的内存开销,以及频繁的 GC 扫描和回收,提升了处理性能。堆外内存可以被精确地申请和释放,而且序列化的数据占用的空间可以被精确计算,所以相比堆内内存来说降低了管理的难度,也降低了误差。 再说说数据内存和运行内存