Spark Tungsten揭秘 Day1 jvm下的性能优化
Spark Tungsten揭秘 Day1
jvm下的性能优化
今天开始谈下Tungsten,首先我们需要了解下其背后是符合了什么样的规律。
jvm对分布式天生支持
整个Spark分布式系统是建立在分布式jvm基础上的,jvm非常伟大的一点在于把不同机器的计算能力联合起来了,jvm也把不同机器的存储能力连接起来了。
jvm是怎么做到这一点的,jvm本身就是一个软件,有自己的通讯方式以及自己的一套协议,在进行java或者scala开发的时候,就支持了一个最重要的设计模式:代理模式,基于代理模式可以使用其他的进程,这些进程可以在同一个OS,或者不同的OS上,可以使用其他地方的进程,像使用本地进程一样。
jvm一个基本特征是,代理端和实现端看起来是完全一样的接口,因为我们编程时是面向接口的,所以代理模式是一个近乎完美的设计模式,既实现了面向接口编程,又能把不同的功能组合起来。
关于不同机器之间通讯的细节,这个是jvm帮我们处理掉了。所以jvm的口号是网络即OS。屏蔽掉了不同机器的区别。这个带来的影响非常的深远。jvm正在从技术的角度实现"共产主义"目标。
Scala的函数天然是可序列化与可反序列化的。这两者结合起来,导致数据和算法都可以在机器之间传输。这个就构建出了整个分布式。
一般大数据系统都是运行在jvm上的,完成不同机器之间沟通的代价最小。jvm有一个天然的特性,是数据序列化和反序列化的能力,这个就为不同机器传输数据打下了良好的基础,jvm的提供这种能力可以让我们根据接口进行数据的自定义,数据的自定义达到的好处是我们可以随意进行数据建模实现我们数据的业务逻辑,并这个建模在不同机器间进行传输。
GC是jvm头上的乌云
jvm是一个应用程序而已,运行在一个user space进程中,从OS角度讲,进程分为两种,一种是user space,一种是kernel space。从kernel space角度讲,并没有进程之间的差异,内核空间看用户空间的一切,只是一个又一个的句柄。用户空间进程只是注册下,需要进行内存映射。
内存映射是一种算法,用户空间的某个地址和内核空间会进行某种公式的缓存,因为内核空间不是那么大,但是用户空间越来越大,从内核空间讲,用户空间的jvm进程是计算资源的代表,例如对core和内存的使用。
jvm当初重要的目标是跨平台,是一种标准,提供统一的编程,底层来适配不同的硬件。jvm的推出,让我们可以仅关心对象的使用,让我们在对象的三阶段中解放操作,不用关心分配和销毁。学习者和开发者的角度讲简单了很多。从整个分布式角度考虑,jvm提供了很多的便利。类似吃自助餐,直接吃就可以,会有服务员补餐和收餐。
但是,这个是有代价的,jvm会有自己的一套机制来分配和清理,但是这里有个很大的问题,因为程序运行和gc是两套东西,有时候会有冲突,一般gc时都要停止工作,会影响程序的运行,对实时性要求特别高的程序就特别麻烦。这个就是jvm头上的那朵乌云。
Tungsten缘起
为了既享受jvm的好处,又摆脱弊端,就展开了Tungsten,Tungsten在最开始时候使用native级别的存储空间,从而不受jvm gc的影响,而只是被我们程序的逻辑所控制,分配和销毁全由程序说了算。
jvm管理的空间受gc影响和native空间完全是两码事。Tungsten第一阶段,就是这个思路,从jvm走向native。就是把一部分的空间转移到native级别。
第二阶段是程序有效运行的问题,java是后来出现的,是C和C++的一层封装,但这个封装是有代价的,弊端是从语言级别,效率更为低下,因为有一部分时间浪费在处理语言的流程和空间的使用。Tungsten做的是分析代码,看哪些是真正有效的计算,把CPU的有效使用效率最大化。
内存、CPU没问题了,下一步还有什么,是磁盘和内存的切换,所以第三阶段就是使用NIO的方式进行优化。
把这几点都完成后,就可以把机器运用到极致。
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580
Spark Tungsten揭秘 Day1 jvm下的性能优化的更多相关文章
- Spark Tungsten揭秘 Day3 内存分配和管理内幕
Spark Tungsten揭秘 Day3 内存分配和管理内幕 恭喜Spark2.0发布,今天会看一下2.0的源码. 今天会讲下Tungsten内存分配和管理的内幕.Tungsten想要工作,要有数据 ...
- Spark Tungsten揭秘 Day2 Tungsten-sort Based Shuffle
Spark Tungsten揭秘 Day2 Tungsten-sort Based Shuffle 今天在对钨丝计划思考的基础上,讲解下基于Tungsten的shuffle. 首先解释下概念,Tung ...
- Spark Tungsten揭秘 Day4 内存和CPU优化使用
Spark Tungsten揭秘 Day4 内存和CPU优化使用 今天聚焦于内存和CPU的优化使用,这是Spark2.0提供的关于执行时的非常大的优化部分. 对过去的代码研究,我们会发现,抽象的提高, ...
- Oracle在Linux下的性能优化
Oracle数据库内存参数的优化 Ø 与oracle相关的系统内核参数 Ø SGA.PGA参数设置 Oracle下磁盘存储性能优化 Ø 文件系统的选择(ext2 ...
- [转帖]etcd 在超大规模数据场景下的性能优化
etcd 在超大规模数据场景下的性能优化 阿里系统软件技术 2019-05-27 09:13:17 本文共5419个字,预计阅读需要14分钟. http://www.itpub.net/2019/ ...
- spark生成大宽表的parquet性能优化
1. 背景介绍 将一份数据量很大的用户属性文件解析成结构化的数据供查询框架查询剖析,其中用户属性包含用户标识,平台类型,性别,年龄,学历,兴趣爱好,购物倾向等等,大概共有七百个左右的标签属性.为了查 ...
- Linux 下网络性能优化方法简析
概述 对于网络的行为,可以简单划分为 3 条路径:1) 发送路径,2) 转发路径,3) 接收路径,而网络性能的优化则可基于这 3 条路径来考虑.由于数据包的转发一般是具备路由功能的设备所关注,在本文中 ...
- 《Java虚拟机JVM故障诊断与性能优化》读书笔记(未完待续)
前言: 对于JVM学习用处的理解:我们程序员写的代码,虽说是放在服务器(linux)系统上的.但是很多时候,受JVM的影响,其实程序并没有发挥出服务器的最大性能.这时候,JVM就成为了瓶颈了.有瓶颈就 ...
- etcd 在超大规模数据场景下的性能优化
作者 | 阿里云智能事业部高级开发工程师 陈星宇(宇慕) 概述 etcd是一个开源的分布式的kv存储系统, 最近刚被cncf列为沙箱孵化项目.etcd的应用场景很广,很多地方都用到了它,例如kuber ...
随机推荐
- HBase-分布式安装
HBase的安装很简单,也是分为单机伪分布式和分布式 先保证hadoop环境JDK环境,我的是2.2.0和1.6_45 1.确定hadoop正常 2.上传HBase并解压,我用的是和hadoop2.2 ...
- Asp.Net 之 服务器端控件与客户端控件的区别
服务器控件,即Asp.Net的控件,控制这些控件必须经过服务器处理,然后响应用户,代码在服务器端解释执行,生成根据用户的浏览器而定的html元素. 客户端控件,即普通Html控件,使用script控制 ...
- Hummer框架平台介绍
三年工作过程中经常会用到使用Java开源框架,但经常会遇到重新组合比较麻烦,本次采用目前主流开源框架及插件整理出一套融合开发.测试.部署整个流程的平台. 本平台采用Hummer代号,是悍马和蜂鸟分意思 ...
- ORACLE时间函数(SYSDATE)深入理解
ORACLE时间函数(SYSDATE)深入理解 加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add ...
- [转]HTML accesskey 属性
本文转自:http://www.dreamdu.com/xhtml/attribute_accesskey/ 17.2. HTML accesskey 属性 accesskey 属性 -- 代表链 ...
- poj 2186 强连通分支 和 spfa
思路: 建图时,分别建正向图edge和转置图T.用正向图edge来DFS,找出第一个被发现的强连通分支(如果该图存在题目要求的点,那么一定就是第一个被发现的).然后用spfa跑转置图T,判断被发现的点 ...
- Oracle创建表空间、新建用户和授权
通过pl/sql以sys用户登录到Oracle数据库上,然后执行菜单:文件/新建/命令窗口 ,打开一个命令窗口然后在该命令窗口中执行脚本创建和删除表空间 . 1.创建表空间 格式: create t ...
- 20个2014年最优秀的PHP框架
http://www.php100.com/html/it/mobile/2014/0813/7198.htmlhttp://medoo.in/api/select
- PhotoShop—剪贴蒙版
工作中发现剪贴蒙版方便好用,所以简单分享下~ 一.剪贴蒙版有什么作用 1.文字上色 2.裁剪图片 3.添加背景 等 二.剪贴蒙版怎么使用 1.新建层,打上字如图 2.文字上面再建层加上效果如渐变 3. ...
- show/hide
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...