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兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...
随机推荐
- 杂乱无章之javascript(二)
1.浏览器与事件事件通常是由浏览器所产生,不同的浏览器会产生的事件也有所不同,即使同一浏览器不同版本所产生的事件也有不同.以下为HTML4.01中的事件 2.error事件:它可以调用一个错误处理函数 ...
- SQLServer-镜像配置
实验环境:三台服务器分别为主服务器,镜像服务器,见证服务器,都加入域sql.com 1. 分别在三台服务器上安装SQL 2008 R2,安装数据库引擎和管理工具两个组件即可. 2. 镜像前准备工作. ...
- 最简单的Linux-ACL操作
添加ACL setfacl -m u:'username':rw 'dir or file' "-R可以迭代式的给目录下所有文件都添加相同的ACL" 查看ACL规则 getfa ...
- 【数论-数位统计】UVa 11076 - Add Again
Add AgainInput: Standard Input Output: Standard Output Summation of sequence of integers is always a ...
- 在windows2003系统上安装两个版本的oracle
想试试oracle11g都有什么变化,于是在机器上又安装了oracle11.1.7版本的.安装很简单,只是安装后如何让两个数据库同时跑起来,需要稍微设置下.1.将11goracle的监听换一个端口,比 ...
- PHP中的Trait
Trait 自 PHP 5.4.0 起,PHP 实现了一种代码复用的方法,称为 trait. Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制.Trait 为了减少单继承语言的限制, ...
- Java对Excel表格的操作
import java.io.File;//引入类import java.io.IOException;import java.util.Scanner;import jxl.Cell;import ...
- Lombok(1.14.8) - @SneakyThrows
@SneakyThrows @SneakyThrows,声明异常. package com.huey.lombok; import java.io.UnsupportedEncodingExcepti ...
- Linux 命令 - ftp: 网络文件传输工具
命令格式 ftp [-pinegvd] [host] 命令参数 -A 传输文件模式为主动模式. -p 传输文件模式为被动模式. -i 关闭交互模式. -n 关闭自动登录功能. -e 不记录历史命令. ...
- Git CMD - diff: Show changes between commits, commit and working tree, etc
命令格式 git diff [options] [<commit>] [--] [<path>…] git diff [options] --cached [<comm ...