Spark binary Map
spark 1.4开始,spark使用了一个Spark binary Map替代了传统的Hash Map,绕过了JVM,直接操作内存,这样一方面避免了多余的内存使用,一方面避免了过多的GC。
经过测试,其性能是传统的Hash Map的两倍以上,且不会随着内存使用的增大而下降。
在Spark 1.4中,这个hashmap已经在DataFrames和SQL中使用。
Cache-aware Computation
Spark是一个内存计算的引擎,但是当要计算的数据量超过内存大小时,会将数据溢写到磁盘上,并进行类似sorting和hashing等复杂耗时的计算。
Cache-aware computation更多的使用了CPU的L1/L2/L3级别的缓存,他们的速度比主存还要快。
在分析了Spark应用程序后,我们发现CPU会有大量的时间等待从内存中读出数据。
Code Generation
Spark引入了用于SQL和DataFrame中表达式求值的code generation技术。在运行时,Spark动态生成字节码来计算这些表达式,而不是为每一行逐步执行一个较慢的解释器。与解释相比,code generation减少了原始数据类型的装箱,更重要的是避免了昂贵的多态函数分派(polymorphic function dispatches)。
网友评论