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 ...
随机推荐
- 小白日记37:kali渗透测试之Web渗透-手动漏洞挖掘(三)-目录遍历、文件包含
手动漏洞挖掘 漏洞类型 #Directory traversal 目录遍历[本台机器操作系统上文件进行读取] 使用者可以通过浏览器/URL地址或者参数变量内容,可以读取web根目录[默认为:/var/ ...
- Google Code Jam 2009, Round 1C C. Bribe the Prisoners (记忆化dp)
Problem In a kingdom there are prison cells (numbered 1 to P) built to form a straight line segment. ...
- 玩转Android之手摸手教你DIY一个抢红包神器!
AccessibilityService是Google专门为残障人士设计的一个服务,可以让他们更方便的来操作手机.AccessibilityService一个主要功能是通过监听窗口的变化来判断用户当前 ...
- Linux 通过 load average 判断服务器负载情况
Linux中load average判断服务器负载情况 转载文章 http://www.111cn.net/sys/linux/56003.htm 写的比较详细,推荐看看.
- CentOS(八)--crontab命令的使用方法
crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...
- javaweb学习总结十九(http协议概述以及http请求信息分析)
一:http协议概述 1:http协议定义 2:使用telnet程序连接web服务器,获取资源 3:http协议:超文本传输协议,它是基于tcp/ip协议,就是建立在tcp/ip之上工作的, http ...
- CF Drazil and Factorial (打表)
Drazil and Factorial time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- [改善Java代码]频繁插入和删除时使用LinkedList
一.分析 前面有文章分析了列表的表里方式,也就是“读”的操作.本文将介绍表的“写”操作:即插入.删除.修改动作. 二.场景 1.插入元素 列表中我们使用最多的是ArrayList,下面看看他的插入(a ...
- DisableExplicitGC和Direct ByteBuffer
直接堆外内存请参见:http://blog.csdn.net/lantian0802/article/details/39257087 JVM调优请参见:http://hllvm.group.itey ...
- poj 1364 差分约束
思路:设dis[i]为从0点到第i点的序列总和.那么对于A B gt k 来讲意思是dis[B+A]-dis[A]>k; 对于A B lt k来讲就是dis[B+A]-dis[A]<k; ...