美文网首页
Spark 中的Tungsten

Spark 中的Tungsten

作者: 丹之 | 来源:发表于2018-12-05 15:46 被阅读25次

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:根据地址找到索引。

Tungsten的第二方面:CPU的优化

Tungsten有翻译方法的功能而且是面向Stage的翻译, Stage里面有很多的方法,如果Stage里面有5000个方法,并不会有5000次的方法调用,因为是函数式编程,会合并成为一个普通的代码块,如for循环。
寄存器:把数据放在寄存器里面会比放在内存里面读取更快,因为寄存器离CPU更近。

相关文章

网友评论

      本文标题:Spark 中的Tungsten

      本文链接:https://www.haomeiwen.com/subject/cdkwcqtx.html