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思考的更多相关文章

  1. Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考

    Spark Streaming揭秘 Day6 关于SparkStreaming Job的一些思考 Job是SparkStreaming的重要基础,今天让我们深入,进行一些思考. Job是什么? 首先, ...

  2. Spark Streaming揭秘 Day15 No Receivers方式思考

    Spark Streaming揭秘 Day15 No Receivers方式思考 在前面也有比较多的篇幅介绍了Receiver在SparkStreaming中的应用,但是我们也会发现,传统的Recei ...

  3. Spark Streaming揭秘 Day17 资源动态分配

    Spark Streaming揭秘 Day17 资源动态分配 今天,让我们研究一下一个在Spark中非常重要的特性:资源动态分配. 为什么要动态分配?于Spark不断运行,对资源也有不小的消耗,在默认 ...

  4. Spark Streaming揭秘 Day16 数据清理机制

    Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...

  5. Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展

    Spark Streaming揭秘 Day9 从Receiver的设计到Spark框架的扩展 Receiver是SparkStreaming的输入数据来源,从对Receiver整个生命周期的设计,我们 ...

  6. Spark Streaming揭秘 Day8 RDD生命周期研究

    Spark Streaming揭秘 Day8 RDD生命周期研究 今天让我们进一步深入SparkStreaming中RDD的运行机制.从完整的生命周期角度来说,有三个问题是需要解决的: RDD到底是怎 ...

  7. Spark Streaming揭秘 Day5 初步贯通源码

    Spark Streaming揭秘 Day5 初步贯通源码 引子 今天,让我们从Spark Streaming最重要的三个环节出发,让我们通过走读,逐步贯通源码,还记得Day1提到的三个谜团么,让我们 ...

  8. Spark Streaming揭秘 Day4-事务一致性(Exactly one)

    Spark Streaming揭秘 Day4 事务一致性Exactly one 引子 对于业务处理系统,事务的一致性非常的关键,事务一致性(Exactly one),简单来说,就是输入数据一定会被处理 ...

  9. Spark Streaming揭秘 Day3-运行基石(JobScheduler)大揭秘

    Spark Streaming揭秘 Day3 运行基石(JobScheduler)大揭秘 引子 作为一个非常强大框架,Spark Streaming兼具了流处理和批处理的特点.还记得第一天的谜团么,众 ...

随机推荐

  1. VBoxGuestAdditions下载地址

    http://dlc.sun.com.edgesuite.net/virtualbox/

  2. DataBase 之 常用操作

    (1) try catch 配合 Transactions 使用 --打开try catch功能 set xact_abort on begin try begin tran ) commit tra ...

  3. MPMoviePlayerController过期导致视频播放时间条颠倒及AVPlayerViewController的用法

    MPMoviePlayerController虽然好用 但是过期了 所以可能会导致一些莫名的问题  ,比如说下面时间条的问题 但我们可以使用AVPlayerViewController来实现相应的想过 ...

  4. 笔记——ES5 Array

    ES5里引入了一些新的数组方法.这些方法可以分为两组: 迭代方法和项的定位. 兼容性:chrome,firefox,safari3,及ie8以上都支持 1. every 查询数组中的每一项是否匹配某个 ...

  5. VMware系统运维(一)安装Esxi

    1.下载ISO文件,开始安装,如图1,直接按回车进行安装. 图1 2.按回车键继续安装,如图2所示 图2 3.选择要安装系统的磁盘,按回车继续,如图3所示 图3 4.选择对应的键盘语言,按回车继续,如 ...

  6. const 指针与指向const的指针

    最近在复习C++,指针这块真的是重难点,很久了也没有去理会,今晚好好总结一下const指针,好久没有写过博客了,记录一下~ const指针的定义: const指针是指针变量的值一经初始化,就不可以改变 ...

  7. sharepoint 中用自带的download.aspx实现文件的下载,中文文件名编码的问题

    ]中的路径绑定的是下载路径,用到了sharepoint中自带的download.aspx下载页面,只要将文件的URL赋值给sourceurl即可,但是我前台用的是<a>标签的href来导向 ...

  8. 初探html5---Video + DOM(视频播放)

    1:HTML5 开发环境下  lang="en" 2: <video width="320" height="240" control ...

  9. android使用Intent操作拨打号码发送短信

    Activity程序Activity.java package com.example.intentcaseproject; import android.net.Uri; import androi ...

  10. php5.4window下连接mssql

    第一步 下载 http://www.microsoft.com/en-us/download/details.aspx?id=20098 [PHP_PDO_SQLSRV] extension=php_ ...