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 ...
随机推荐
- 使用GPS经纬度定位附近地点(某一点范围内查询)
需要手机查找附近N米以内的商户,致想法是已知一个中心点,一个半径,求圆包含于圆抛物线里所有的点,经纬度是一个点,半径是一个距离,不能直接加减,下面提供C#的解决方法 数据库中记录了商家在百度标注的经纬 ...
- cocos2d-x中使用sqlite
在单机游戏中有几十个场景道具,每一个都有各自的状态(获得.未获得.获得个数)等等,如果在游戏中平凡涉及到这些道具的实时存储,那么使用文本就会稍慢.可以使用sqlite数据库来完成. 下载地址:http ...
- Android(java)学习笔记87:File类使用
package cn.itcast_01; import java.io.File; /* * 我们要想实现IO的操作,就必须知道硬盘上文件的表现形式. * 而Java就提供了一个类File供我们使用 ...
- CEF js调用C#封装类含注释
/* * CEF JS调用C#组装类 * * 使用方法(CefGlue为例): * public class BrowserRenderProcessHandler : CefRenderProces ...
- 怎么删除远程登录连接的ip
通过远程桌面可以登录到远程电脑上进行相应的操作,在登录过后会在本地电脑上留下登录过的IP以及登录用户名相关信息,可能会给远程的电脑带来安全隐患,下面介绍一下清除远程桌面历史记录的方法. 1.删除我的文 ...
- python django第二弹
每天晚上应该就这样坐着,然后把每天的东西做个总结,或大或小,有的人可能愿意把自己的东西保留在草稿箱,想想我还是把他写出来吧,前几次我发现又遇到了之前遇到的简单的问题,翻看自己之前写的几篇小日记,可以很 ...
- hdu 4421 2-SAT问题
思路:我们需要判断是否有满足的a[n],其实也就是对每一个二进制位进行判断,看是否有满足的.那么我们每次取出一个二进制位,这样每一位只有0,1两种状态,就成了比较典型的2-SAT问题了. #inclu ...
- js中定义对象的方式有哪些?
1.对象直接量 2.构造函数 3.原型方法 4.动态原型方法
- jQuery选择器解释和说明
jQuery选择器的意义在于快速的找出特定的DOM元素,然后添加相应的行为. 基本选择器 //选择 id为 one 的元素 $('#btn1').click(function(){ $('#one') ...
- Java Concurrency - Condition
Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待池(wa ...