Spark Tungsten揭秘 Day4 内存和CPU优化使用
2016-08-04 21:59
204 查看
Spark Tungsten揭秘 Day4
内存和CPU优化使用
今天聚焦于内存和CPU的优化使用,这是Spark2.0提供的关于执行时的非常大的优化部分。对过去的代码研究,我们会发现,抽象的提高,转过来会变成对CPU和内存的使用。也就是说,抽象提升,会对内存对Cpu会有很多不必要的使用,执行很多无谓的没有实际作用的操作。比如面向接口调用,就是使用了指针的指针,接口这层并没有实际的作用,可以直接跳过。
whole-stage code
Spark2.x的Tungsten中做了个非常重要的改进,也就是whole-stage code,把抽象的使用直接合并到具体的函数上。具体来说,Tungsten引擎会看哪些部分运行比较慢,会把这些比较慢的功能,代码单独放在一个函数中,消除虚函数调用,同时,将数据放在寄存器中,这样就减少CPU无谓的消耗,访问速度更快。
比如对RDD执行next方法,RDD是一个抽象类,存在虚函数寻址的过程,会消耗CPU,另外一方面作为next访问每条记录都会调用一次方法,开销还是比较大的。
Spark2.x的作用就是按照自己的逻辑翻译成数据集合的for/while循环,把多次函数调用变成了一个代码块,极大的提升效率。
一方面,没有接口和虚函数的调用。面向对象极大的方便编写工程,但是造成了很大的浪费。CPU也有执行优化的方式,如果是while或者if判断的话,CPU对这种代码的执行比其他代码要快。
另外,CPU操作数据的时候,操作内存比操作磁盘更快,操作寄存器比操作内存更快。
vectorization
刚才说的是循环来源问题,还有一种情况的问题。当数据来源或者数据结构比较复杂,比如采用parquet数据,有个编解码的过程,会有非常大的开销。
这个时候会采用向量化的方式vectorization,类似于构成了一个矩阵,假设处理很复杂的话,这时候可以一批一批进行处理,类似于用mapPartitions替代map。以对parquet进行批量解码为例,性能可以提升5-10倍。
但是要做到优化,Spark首先要对代码进行分析,所以所有的子框架都使用到了Tungsten。目前已经完成了on-heap/off-heap、Register/Memory、Cpu的优化,官方主要下一步会对IO操作进一步优化。
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580相关文章推荐
- Spark Tungsten揭秘 Day4 内存和CPU优化使用
- 第56课:Spark中的Tungsten内存和CPU的优化使用
- 56:Spark中的Tungsten内存和CPU的优化使用
- 第53课:Spark性能优化第九季之Spark Tungsten内存使用彻底解密
- Spark性能优化第九季之Spark Tungsten内存使用彻底解密
- Spark性能优化第九季之Spark Tungsten内存使用彻底解密
- 大数据IMF传奇行动绝密课程第53课:Spark性能优化第九季 Spark Tungsten内存使用彻底解密
- Spark Tungsten揭秘 Day1 jvm下的性能优化
- Spark性能调优(九)之Spark Tungsten内存使用
- 使用pandas优化Spark内存消耗(节省90%)
- Spark Tungsten揭秘 Day3 内存分配和管理内幕
- 如何使用JVisualVM远程监控和优化Tomcat和Java程序的内存和CPU
- Spark Tungsten揭秘 Day3 内存分配和管理内幕
- shell脚本监控系统负载、CPU和内存使用情况
- Linux查看CPU和内存使用情况
- Linux查看CPU和内存使用情况
- java 代码优化 优化内存使用 防止内存泄露 优化代码规范 提高效率
- Spark 内存溢出 处理 及 优化
- spark中使用的内存文件系统-Tachyon FS 简介
- Linux上MySQL优化三板斧——CPU、内存、文件系统