56:Spark中的Tungsten内存和CPU的优化使用
来源:互联网 发布:15个java小项目 文库 编辑:程序博客网 时间:2024/05/19 09:51
本期内容:
对过去的代码研究,我们会发现,抽象的提高,转过来会变成对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操作进一步优化。
- 56:Spark中的Tungsten内存和CPU的优化使用
- 第56课:Spark中的Tungsten内存和CPU的优化使用
- 55:Spark中的Tungsten内存分配和管理内幕
- Spark 中的Tungsten和Catalyst
- Spark性能优化第九季之Spark Tungsten内存使用彻底解密
- Spark性能优化第九季之Spark Tungsten内存使用彻底解密
- Spark 内存管理之Tungsten
- 大数据IMF传奇行动绝密课程第53课:Spark性能优化第九季 Spark Tungsten内存使用彻底解密
- Spark性能调优(九)之Spark Tungsten内存使用
- Spark Tungsten(钨丝计划)内存详解
- Spark 2.1.0新一代Tungsten 内存管理的模型及其实现类的解析
- Spark性能优化第七季之Spark Tungsten 钨丝计划
- Spark的下一代引擎-Project Tungsten启示录
- Spark Tungsten in-heap / off-heap 内存管理机制
- Spark On YARN内存和CPU分配
- Spark On YARN内存和CPU分配
- Spark On YARN内存和CPU分配
- Spark On YARN内存和CPU分配
- HDU 5805 NanoApe Loves Sequence
- Elasticsearch.Net使用(二)【MVC4 图书管理系统】
- 简易网页游戏——八数码问题游戏
- 55:Spark中的Tungsten内存分配和管理内幕
- 微软认知服务开发实践(5) - 视频检测
- 56:Spark中的Tungsten内存和CPU的优化使用
- JDK and Jre
- 六度空间 地下迷宫探索 哈利·波特的考试 旅游规划 畅通工程之最低成本建设问题
- 欢迎使用CSDN-markdown编辑器
- <Android Framework 之路>BootAnimation(1)
- Android学习之Activity与Service进行通信的三种方式
- android_蓝牙模块的开发
- 扩展欧几里得的学习(未完成
- java代码动态修改app图标