即使采用pipeline的方式,函数f对依赖的RDD中的数据集合的操作也会有两种方式:

1.f(record),f作用于集合的每一条记录,每次只作用于一条记录

2.f(records),f一次性作用于集合的全部数据;

Spark采用的是第一种方式,因为:

1.无需等待,可以最大化的使用集群的计算资源

2.减少OOM的产生

3.最大化的有利于并发

4.可以精准的控制每一个Partition本身(Dependency)及其内部的计算(compute)

5.基于lineage的算子流动式函数式计算,可以节省中间结果的产生,可以最快的恢复

不会产生网络流量,因为用的是pipeline。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

物理执行过程

Spark Application里面可以产生1个或者多个job,例如spark-shell默认启动时,内部就没有job,只是作为资源的分配程序,可以在里面写代码产生多个Job,普通程序一般而言,可以有不用的Action,每一个Action一般也会触发一个Job。

Spark是MapReduce思想的一种更加精致和高效的实现,MapReduce有很多不同的具体实现,例如Hadoop的MapReduce基本的计算流程,如下:首先是并发,以JVM为对象的并发Mapper,Mapper中的map的执行会产生输出数据,输出的数据会经由Partitioner指定的规则,放到localFileSystem中,然后再经由Shuffle、Sort、Aggregate变成reducer中的Reduce的输入,执行reduce产生最终的执行结果。hadoop MapReduce执行的流程虽然简单,但是过于死板,尤其是构造复杂算法(迭代)时候,非常不利于算法的实现,且执行效率极为低下。

Spark执行时,物理算法构造和物理执行时,最基本的核心:最大化pipeline

基于pipeline的思想,数据被使用的时候才开始计算,从数据流动的视角来说,是数据流动到计算的位置。实质上,从逻辑的角度来看,是算子在数据上流动。

从算法构建的角度而言,是算子作用于数据,所以是算子在数据上流动。方便算法的构建。

从物理执行的角度而言,是数据流动到计算的位置。方便系统更加高效的运行。

对于pipeline而言,数据计算的位置就是每个Stage中最后的RDD,每个Stage中除了最后一个RDD算子是真实的意外,前面的算子都是假的。

由于计算的Lazy特性,导致计算从后往前回溯,形成Computing Chain,导致的结果就是需要首先计算出具体一个Stage内部左侧的RDD中本次计算依赖的Partition。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

窄依赖的物理执行

一个Stage内部的RDD都是窄依赖,窄依赖计算本身是逻辑上看从stage内部的最左侧的RDD开始计算的,根据Computing Chain,数据(Record)从一个计算步骤流动到下一个计算步骤,以此类推,直到计算到Stage内部的最后一个RDD产生计算结果。

Computing Chain的构建是从后往前回溯构建而成的,而实际的物理计算则是让数据从前往后在算子上流动,直到流动到不能再流动为止,才开始计算下一个Record。这就导致后面的RDD对前面的RDD的依赖,虽然是Partition级别的数据集合的依赖,但是并不需要父RDD把Partition中的所有的Record计算完毕,才整体完后流动数据进行计算。这极大地提高了计算速率。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

宽依赖的物理执行

必须等到依赖的父Stage中的最后一个RDD把全部数据彻底计算完毕,才能够经过shuffle来计算当前的Stage。

Spark Job具体的物理执行的更多相关文章

  1. 从物理执行的角度透视spark Job

    本博文主要内容: 1.再次思考pipeline 2.窄依赖物理执行内幕 3.宽依赖物理执行内幕 4.Job提交流程 一:再次思考pipeline 即使采用pipeline的方式,函数f对依赖的RDD中 ...

  2. Spark 概念学习系列之从物理执行的角度透视spark Job(十七)

    本博文主要内容:  1.再次思考pipeline 2.窄依赖物理执行内幕 3.宽依赖物理执行内幕 4.Job提交流程 一:再次思考pipeline 即使采用pipeline的方式,函数f对依赖的RDD ...

  3. 一个 Spark 应用程序的完整执行流程

    一个 Spark 应用程序的完整执行流程 1.编写 Spark Application 应用程序 2.打 jar 包,通过 spark-submit 提交执行 3.SparkSubmit 提交执行 4 ...

  4. Spark(五)Spark任务提交方式和执行流程

    一.Spark中的基本概念 (1)Application:表示你的应用程序 (2)Driver:表示main()函数,创建SparkContext.由SparkContext负责与ClusterMan ...

  5. Spark的任务提交和执行流程概述

    1.概述 为了更好地理解调度,我们先看一下集群模式的Spark程序运行架构图,如上所示: 2.Spark中的基本概念 1.Application:表示你的程序 2.Driver:表示main函数,创建 ...

  6. Spark(五) -- Spark Streaming介绍与基本执行过程

    Spark Streaming作为Spark上的四大子框架之一,肩负着实时流计算的重大责任 而相对于另外一个当下十分流行的实时流计算处理框架Storm,Spark Streaming有何优点?又有何不 ...

  7. spark通过合理设置spark.default.parallelism参数提高执行效率

    spark中有partition的概念(和slice是同一个概念,在spark1.2中官网已经做出了说明),一般每个partition对应一个task.在我的测试过程中,如果没有设置spark.def ...

  8. spark编译与onyarn的执行

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/24640715 Spark on yarn执行 ...

  9. Spark集群和任务执行

    [前言:承接<Spark通识>篇] Spark集群组件 Spark是典型的Master/Slave架构,集群主要包括以下4个组件: Driver:Spark框架中的驱动器,运行用户编写Ap ...

随机推荐

  1. hdu 6155 - Subsequence Count

    话说这题比赛时候过的好少,连题都没读TOT 先考虑dp求01串的不同子序列的个数. dp[i][j]表示用前i个字符组成的以j为结尾的01串个数. 如果第i个字符为0,则dp[i][0] = dp[i ...

  2. MySQL审计工具Audit Plugin安装使用

    本实验的审计插件均是安装在 mysql-community-server-5.7.9 的服务器上. 插件安装(社区版) 插件下载地址: https://bintray.com/mcafee/mysql ...

  3. 6.Python初窥门径(小数据池,集合,深浅拷贝)

    Python(小数据池,集合,深浅拷贝) 一.小数据池 什么是小数据池 小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址 小数据池 is和==的区别 == 判断等号俩边的 ...

  4. 道阻且长 莫失本心(我的OI之旅

    道阻且长 莫失本心      今天午睡醒来,发现自己发烧了.尽管穿的很厚,尽管今天的阳光如此明媚.身体还是由内而外地散发着冷意. 期末考已经结束了,接下来又是艰难而难忘的奥赛训练.(要到春节才能放假了 ...

  5. 笔记-JavaWeb学习之旅18

    AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...

  6. HDU-1179-Ollivanders(二分图最大匹配)

    链接:https://vjudge.net/problem/HDU-1179 题意: 有n个法师和m个魔棒,每个法师喜欢多种魔棒,但每个法师只能在喜欢的魔棒中选一个. 求最多有几个法师能选到魔棒. 思 ...

  7. Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) C

    It's that time of the year, Felicity is around the corner and you can see people celebrating all aro ...

  8. net core 2.0 web api + Identity Server 4 + angular 5

    net core 2.0 web api + Identity Server 4 + angular 5前台使用angular 5, 后台是asp.net core 2.0 web api + ide ...

  9. zabbix agent 配置

    http://blog.csdn.net/z644041867/article/details/76618644 https://www.cnblogs.com/miclesvic/p/6144924 ...

  10. Joda-Time 的 DateTimeFormat 问题

    在开发过程中遇到的问题是,当我使用,如下的代码时,会报异常 :"Exception in thread "main" org.joda.time.IllegalField ...