Spark Streaming揭秘 Day35 Spark core思考
Spark Streaming揭秘 Day35
Spark core思考
Spark上的子框架,都是后来加上去的。都是在Spark core上完成的,所有框架一切的实现最终还是由Spark core来做的。抛开任何具体的东西,现在考虑下Spark core是个什么东西。
解析rdd
程序就是数据+代码。所以首先,我们需要考虑spark core由什么数据结构构成,一共就三种:rdd,broadcast,accumulator,最重要、最核心的是rdd。
rdd可以简单的认为是一个数组,只不过是一个分布式的数组。具备弹性、分布式的特性。我们一般传统的数据结构list、set等都是在一台机器,而spark的内核提供的最基础、最核心、最重要的数据结构是rdd,rdd是平铺在分布式的机器。
我们看这里发生了什么变化。实质上我们想,数据平铺在不同的机器,也就是数据的不同部分分布在不同的机器上,为了获得不同部分的数据,也要获得指针(地址)。执政会包含具体在什么机器上,范围是什么,和数据的下标相比只不过是加上了一个机器的维度。这个和在一台机器有没有本质的区别。因为都是地址的定位,只不过rdd有一套自己的定位机制。所以我们不应该认为rdd学习比数组学习更复杂。
rdd的调度
基于rdd的编程和调度,我们也同样拿数组的编程调度来类比。数组操作是在一个进程中,而rdd中,需要在不同的机器上操作,就构成了数据不同代码动的理念。如果要操作数据,比如map,要找到数据所在的机器上,这个是rdd的perferedLocation来告诉你的。原先单机计算的时候,也需要知道数据在哪里,现在知道数据在哪里后,需要把代码传到那里(通过Http等方式),但是也只是把代码传过去而已。所以说分布式计算和单机计算也没有本质区别。
由于要跑到其他机器上,就有了管理的过程,怎么进行管理,就是driver负责的事情。数组的操作不需要怎么管理,因为没有到那么多机器上去。
管理主要是管理计算,这里延伸出了一些东西:
第一个层面就是要知道怎么确定到不同的机器上,这个就是任务调度。
第二个层面,由于你是在不同的机器上,计算的时候出现了容错的方式,怎么进行容错。
容错
对数组操作出错,如果业务很复杂,也肯定会有容错的方式,至于rdd的操作也会更加慎重的考虑容错,因为分布式一旦出错的话,位于不同的机器上,代价比一台机器上更大。
业界容错的经典方式进行加检查点(加快照)并放在其他机器上,这种方式比较消耗时间,因为有网络通信等操作。
rdd的方式是每次操作都会产生新的rdd,它记住的是算子之间的依赖关系,而不是从数据角度考虑容错,算子之间的关系进行记录是从数据产生的角度考虑容错。算子只是表达数据怎么产生这件事,rdd强大之处在于,既能够表达算子之间的依赖关系,还包涵了数据在哪里。
从容错角度看,由于rdd包涵了数据在哪里,在容错时再次获得数据的时候,它包含了数据本身和计算过程,所以可以部分的恢复数据,而不是全部的。依旧,无论是数据还是计算关系都是在rdd中,这是个非常轻量级的过程,可以避免直接说数据本身。这是一个非常强悍的地方。
shuffle
在分布式计算的时候会有一些自己规则,比较典型的就是机器间要传数据的时候,搞了一个shuffle。
因为分布式的时候进行计算,计算时候有个很大的问题,就是不同的机器之间,需要通过数据级别的通讯。比如数组的计算,可能有全局级别的计算,比如各个item出现的次数。从分布式角度,group、reduce这种就是全局级别。
考虑全局级别就是整个分布式的关键之所在,这个时候就像我们对一个数组进行整体的操作,对rdd全局级别的操作,由于数据分布在不同的机器上,这个时候全局级别的操作,要加上ip、端口和具体数据存在什么地方,而且要在机器之间传数据。
机器之间传数据,代价比较大,所以当发生时,spark会把计算结果先保存在本地磁盘上,免得进行全局级别操作出现故障时,重新计算代码太大,这是一种用空间换时间的方式。计算成果放在本地磁盘上,整个驱动的调动程序会知道,方便告诉后面的计算数据到底在哪里。在在一个阶段计算时,会问driver数据在哪里,driver告诉之后,就会去上个阶段保存的地方去拿自己想要而数据,由于是分布式的,有自己的一套规则,对数据进行分门别类。
shuffle的过程就是对全局数据进行分类整理的过程,因为任何一台机器都有可能包含想要的数据,所以会依赖所有的数据来源。整理抓到我们想要的数据之后,就继续进行计算,而由于进行网络的传输,都会有一些调用逻辑,从spark角度讲就变成了stage。
小结
rdd就是个大大的分布式数组,计算时有时是自己单纯的计算,有时是全局的计算,和对数组操作没有任何区别。
不同语言都有一套语法规则,但是核心是思考如何处理数据。spark是运行在jvm上的,jvm并不知道spark这个东西,所以一个事实是,jvm只有一些基本的数据结构和语法的支持,spark只不过是在jvm基础上,构造了rdd这个数据结构而已。所以精通spark和精通其他java程序没有区别。因为jvm本身就屏蔽掉了不同机器之间的区别,只需要进行地址定位就可以,这就是jvm的伟大之处,分布式和单机处理没有本质区别。
忘掉分布式,会接触更加本质的东西。
欲知后事如何,且听下回分解!
DT大数据每天晚上20:00YY频道现场授课频道68917580
Spark Streaming揭秘 Day35 Spark core思考的更多相关文章
- Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考
Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考 Job是SparkStreaming的重要基础,今天让我们深入,进行一些思考. Job是什么? 首先, ...
- Spark Streaming揭秘 Day15 No Receivers方式思考
Spark Streaming揭秘 Day15 No Receivers方式思考 在前面也有比较多的篇幅介绍了Receiver在SparkStreaming中的应用,但是我们也会发现,传统的Recei ...
- Spark Streaming揭秘 Day17 资源动态分配
Spark Streaming揭秘 Day17 资源动态分配 今天,让我们研究一下一个在Spark中非常重要的特性:资源动态分配. 为什么要动态分配?于Spark不断运行,对资源也有不小的消耗,在默认 ...
- Spark Streaming揭秘 Day16 数据清理机制
Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...
- Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展
Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...
- Spark Streaming揭秘 Day8 RDD生命周期研究
Spark Streaming揭秘 Day8 RDD生命周期研究 今天让我们进一步深入SparkStreaming中RDD的运行机制.从完整的生命周期角度来说,有三个问题是需要解决的: RDD到底是怎 ...
- Spark Streaming揭秘 Day5 初步贯通源码
Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...
- Spark Streaming揭秘 Day4-事务一致性(Exactly one)
Spark Streaming揭秘 Day4 事务一致性Exactly one 引子 对于业务处理系统,事务的一致性非常的关键,事务一致性(Exactly one),简单来说,就是输入数据一定会被处理 ...
- Spark Streaming揭秘 Day3-运行基石(JobScheduler)大揭秘
Spark Streaming揭秘 Day3 运行基石(JobScheduler)大揭秘 引子 作为一个非常强大框架,Spark Streaming兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...
随机推荐
- IOS网络请求框架AFNetworking和ASIHttpRequest对比
ASI基于CFNetwork框架开发,而AFN基于NSURL. ASI更底层,请求使用创建CFHTTPMessageRef进行,使用NSOperationQueue进行管理,ASIHTTPReques ...
- android 编写动画
1.在编写动画的时候需要新建一个xml 新建的步骤是选中res单击右键选择Android resource file 然后弹出一个框 ,然后再Resource Type 里面选择Animation 然 ...
- Python文件IO
Python文件IO 有如下文本内容,文件路径为D:\temp,文件名称为lyric.txt, line1 Look ! line2 If U had one shot line3 One oppor ...
- Sqlite和CoreData的区别
使用方便性.实际上,一个成熟的工程中一定是对数据持久化进行了封装的,因此底层使用的到底是core data还是sqlite,不应该被业务逻辑开发者关心.因此,即使习惯写SQL查询的人,也应该避免在业务 ...
- Xcode 只有iOS device一个选项的解决办法
下载了一个demo准备研究发现只有iOS device,没有其他的机型可选,解决方法比较简单,调下iOS SDK就行了
- ubuntu下安装Sublime Text并支持中文输入
Sublime Text还是文本编辑器中比较不错的,就是他的文件对比有些差劲吧,还有中文输入需要打补丁,不知道开发者是怎么想的... 当然,这个软件是收费的,但是不买也能一直的使用,在我天朝就这点好处 ...
- Oracle创建表空间、新建用户和授权
通过pl/sql以sys用户登录到Oracle数据库上,然后执行菜单:文件/新建/命令窗口 ,打开一个命令窗口然后在该命令窗口中执行脚本创建和删除表空间 . 1.创建表空间 格式: create t ...
- pdf文件流生成pdf文件
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { Code.Login Starr_mode ...
- PHP获取本周第一天和最后一天
//本周的第一天和最后一天 代码如下 复制代码 $date=new DateTime();$date->modify('this week');$first_day_of_week=$date ...
- Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器
最近,SDK支付等接入差不多了,就从Unity3D生成IPA (企业版License), 然,需要手动执行的PostEvents竟然多大10项+, 这些我默默的承受了1周时间,每次约浪费20分钟-额外 ...