spark内核的三大核心:基于RDD的调度系统、Tungsten和Catalyst解析优化引擎
Tungsten
Tungsten面对: Memory , CPU, Disk IO 和 NetWork IO
spark 1.6是第一阶段面对Memory, spark 2.0的时候面对的是CPU
磁盘IO和网络IO主要发生在Shuffle阶段,Shuffle有Hash, Sort, Tungsten。默认是Sort,Tungsten未完善,Hash在spark 2.0已经废弃不用了。Hash其实在数据量小且不需要排序时是比较快的。
Tungsten的第一方面:内存的优化
Tungsten是一个更底层的机制,可以认为它不存在,有点相当于JVM中的JIT功能。JVM的数据放在堆内或者堆外,把数据放在堆外的好处是
1:可以避免GC,
2:使用原生数据。磁盘上1G的数据,如果使用JVM加载进来的话要用比1G大的存储空间,可能是3G,总之会膨胀。
TaskMemoryManager基于Page的概念屏蔽掉了底层是On-heap或者是Off-heap的概念,使用逻辑地址做指针,通过逻辑地址来具体定位到我们的记录具体在Page中的位置, 逻辑地址的表示:long类型的64bit的一个数字来表示的。
On-heap和Off-heap寻址方式:
On-heap:先找到对象,然后再找索引。
Off-heap:根据地址找到索引。