Unsafe Row
Tungsten自定义了紧凑的二进制格式:天然避免了Java对象序列化引入的计算开销,相比JVM对象存储效率高出了好几个数量级
对于DataFrame中的每一条数据,Spark SQL默认采用org.apache.spark.sql.Row对象来封装,而此Java对象会引入大量额外的开销。Tungsten实现了一种叫做Unsafe Row的二进制数据结构。Unsafe Row本质上是字节数组,它以极其紧凑的格式来存储每一条数据,大幅度减少存储开销**
Tungsten利用Java Unsafe API开辟堆外内存Off Heap Memory来管理对象:堆外内存1是内存占用的估算更精确,2是不需要像JVM Heap那样反复执行垃圾回收
WSCG
WSCG在运行时,把酸字之间的“链式调用”捏合为一份代码。比如:filter -> select -> scan,会被捏合为一个函数f
Tungsten用全阶段代码生成Whole stage code generation取代火山迭代模型:1.减少虚函数调用和降低内存访问频率,2.提升CPU cache命中率,大幅度压缩CPU idle时间,从而提升CPU利用率
怎么利用这些优势?用dataset dataframe!