文档章节

深度思考Spark Runtime机制

牧师-Panda
 牧师-Panda
发布于 2017/10/06 18:23
字数 1688
阅读 876
收藏 45
点赞 2
评论 2

序言

在以往的博客一天一个函数系列中,我们集中精力攻克了一座又一座的spark中那些晦涩的语法,收获了不少知识。如果以战喻,那就是我们的游击战取得了局部的显著效果。但是要想撼动整个spark-streaming大厦,还需要对整个运行时的机制有一个深入性的了解,知道所谓的接口应用,调用都是一些工程性封装好的东西,这些只要经过熟练的训练即可,但是想要更好的运用,就必须从底层了解它的机制。

在深入理解运行时机制之前,我建议大家思考一下这个问题,为什么spark采用的计算模型是以宽依赖为分界线的DAG模式?在我看来有以下几个优势在里面,第一点是按照不同的stage划分,使得计算更加高效,窄依赖诸如x平方,可以直接以pipe的形式进行操作,而宽依赖诸如(x+y)的平方,它需要等父依赖就绪后才能计算,所以这样的划分能够使计算速率最大化。第二点是,由于分布式集群的不可控性,我们的数据可能要随时落盘,这样一来由于我们采用的是stage模式的处理,我们就可以将中间结果保存在磁盘上,而不会发生由于宕机使得数据全部丢失的情况。

基于以上概念,我们来谈谈一些专业术语以及spark运行时的架构。

Terminologies

SparkContext

SparkContext是整个Spark Application的核心部分。它建立了与Spark Execution environment的连接,同时它还用来创建Spark RDDs,accumulators,以及broadcast variables,此外它还承担着获取spark服务以及运行job的责任。SparkContext is a client of Spark execution environment and acts as the master of Spark application.上面这句话道出了sparkcontext的精髓,下面我再列举一下Spark Context的主要作用:

  • Getting the current status of spark application
  • Canceling the job
  • Canceling the Stage
  • Running job synchronously
  • Running job asynchronously
  • Accessing persistent RDD
  • Unpersisting RDD
  • Programmable dynamic allocation

如果想进一步了解sparkcontext,请阅读《深入理解spark context》

Spark Shell

很吃惊吧,spark shell也是一个用scala写成的spark application,它提供了一个命令行式的环境,能够帮助我们更好的了解spark的特征,同时也能帮助我们更好的构建我们自己的spark application程序。

Spark Application

spark application是一个完备的计算框架,它能够运行用户提交的程序。即使当它没有运行job的时候,也会运行自己的进程。

Task

task是被提交到executor上的work单元,每一个stage都有一些task,一个task对应一个partition

The Same task is done over different partitions of RDD。

Job

Job是由一系列tasks组成的并行计算任务,它是由action类型的函数激活的,换言之没有action,job不会被提交。

Stages

每一个job都被划分为几个小的set,这些set被称之为stages,它们之间是相互依赖的。关于stages是如何划分的,要参考spark中RDD的宽窄依赖理论,也就是文章一开头我提到的例子。最终的计算结果要等所有的stage都计算好了以后才能够出结果。

Architecture

spark使用的是主从结构(master-slave),即一个核心的coordinator和多个workers,亦被称为executors,每一个executor是一个单独的java进程换句话说一个spark application是一个driver和它所有executors的集合,通过cluster manager的帮助,能够将其运行在一系列集群上。Standalone Cluster Manager是spark默认的内置cluster manager。除此之外,Spark还可以运行在一些开源的cluster manager上面,譬如Yarn和Mesos等等。

The Apache Spark Driver

driver是整个spark中的核心协调者,当一个action方法被调用的时候,driver程序中的sparkcontext会创建一个job,然后将其提交到DAG Scheduler (DAG Scheduler创建operator graph并将Job提交到task Scheduler)。 Task Scheduler通过cluster manager启动task。这样,通过cluster manager的帮助,一个完整的spark程序就在集群中启动起来了。

从程序的角度上分析,main方法是运行在driver中的,driver运行用户提交的代码,生成RDD,执行transformation和action函数,同时创建SparkContext。这些都是一个driver所承担的责任。当一个driver停止工作的时候,整个application便结束它的生命周期。

driver的两个最重要的角色是:

  • Converting user program into the task.
  • Scheduling task on the executor.

从一个更高的层面来看spark,RDD从input数据源生成,通过一系列transformation函数获得新的RDD,然后执行action函数。在spark程序中,操作的DAG是被隐式创建的,当driver运行的时候,它将DAG转化为物理层面的执行程序。

Apache Spark Cluster Manager

在某些情况下,spark会依赖cluster manager来启动executors,甚至driver也是通过其启动的。它是spark中的一个插件。在cluster manager上,spark application中的jobs和action是由Spark Scheduler按照FIFO的顺序安排的,spark application占用的资源能够依据workload大小动态的调节,无论在哪种集群模式的情况下都适合。

Apache Spark Executors

The individual task in the given Spark job runs in the Spark executors. Executors are launched once in the beginning of Spark Application and then they run for the entire lifetime of an application. Even if the Spark executor fails, the Spark application can continue with ease. There are two main roles of the executors:

  • Runs the task that makes up the application and returns the result to the driver.
  • Provide in-memory storage for RDDs that are cached by the user.

How to launch a Program in Spark

不论我们使用哪种cluster manager,spark给我们提供了一个简单的脚本,叫做spark-submit,用以方便我们提交我们的程序。它在集群上启动application,同时能够连接到不同的cluster manager并且能够控制我们程序所需要的资源。

How to Run Apache Spark Application on a cluster

上文我们分条介绍了spark中各术语的概念,如果觉得很混乱,没关系,我们再从一个宏观的角度去梳理一下:

  • 用户使用spark-submit来提交程序 。
  • 在spark-submit中, 用户定义的main()方法被调用. 同时它也启动了driver程序。
  • driver程序会向cluster manager索取启动executors必备的资源。
  • cluster manager代表driver program启动executors。
  • driver process在user application的帮助下运行。 基于RDD的actions和transformation函数,driver以task的形式向executors发送work。
  • executors处理task,同时将计算结果通过cluster manager返回给driver。

© 著作权归作者所有

共有 人打赏支持
牧师-Panda
粉丝 27
博文 146
码字总数 180044
作品 0
浦东
加载中

评论(2)

逝水巟言
逝水巟言
支持
蓝水晶飞机
蓝水晶飞机
支持
教你如何成为Spark大数据高手

Spark目前被越来越多的企业使用,和Hadoop一样,Spark也是以作业的形式向集群提交任务,那么如何成为Spark大数据高手?下面就来个深度教程。 分享之前我还是要推荐下我自己创建的大数据学习交...

风火数据
05/20
0
0
Spark成为大数据高手进阶步骤

什么是Spark Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapRedu...

MoksMo
2015/11/05
0
1
Apache Flink和Apache Spark有什么异同?它们的发展前景分别怎样?

============================= object WordCount { def main(args: Array[String]) {val env = new SparkContext("local","wordCount")val data = List("hi","how are you","hi")val dataSe......

justlpf
05/12
0
0
【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第1节 ①

一、MapReduce已死,Spark称霸 由于Hadoop的MapReduce高延迟的死穴,导致Hadoop无力处理很多对时间有要求的场景,人们对其批评越来越多,Hadoop无力改变现在而导致正在死亡。正如任何领域一样...

Spark亚太研究院
2014/12/12
0
0
【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第1节②

三、你为什么需要Spark; 你需要Spark的十大理由: 1,Spark是可以革命Hadoop的目前唯一替代者,能够做Hadoop做的一切事情,同时速度比Hadoop快了100倍以上: Logistic regression in Hadoo...

Spark亚太研究院
2014/12/16
0
1
Spark 学习资源收集【Updating】

(一)spark 相关安装部署、开发环境 1、Spark 伪分布式 & 全分布式 安装指南 http://my.oschina.net/leejun2005/blog/394928 2、Apache Spark探秘:三种分布式部署方式比较 http://dongxic...

大数据之路
2014/09/08
0
1
容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析

摘要: 容器开启数据服务之旅系列(二):Kubernetes如何助力Spark大数据分析 (二):Kubernetes如何助力Spark大数据分析 概述 本文为大家介绍一种容器化的数据服务Spark + OSS on ACK,允许...

阿里云云栖社区
04/17
0
0
Spark cluster 部署

Spark 框架 Spark与Storm的对比 对于Storm来说: 1、建议在那种需要纯实时,不能忍受1秒以上延迟的场景下使用,比如实时金融系统,要求纯实时进行金融交易和分析 2、此外,如果对于实时计算的...

meteor_hy
06/27
0
0
年薪百万的大数据开发工程师的入门书单(收藏)

前言 你们是不是都听过一句话:谷歌比你自己更了解你 事实上,这句话并不是毫无根据,我们周边的一切无不体现数据的重要性,你想想,我们对自己的看法会受到多种主观和客观的因素影响,但谷歌...

风火大数据
昨天
0
0
在 Databricks 可获得 Spark 1.5 预览版

我们兴奋地宣布,从今天开始,Apache Spark1.5.0的预览数据砖是可用的。我们的用户现在可以选择提供集群与Spark 1.5或先前的火花版本准备好几个点击。 正式,Spark 1.5预计将在数周内公布,和社区...

stark_summer
2015/08/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式

1.装饰器模式 概念 实现 增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调...

EasyProgramming
6分钟前
0
0
用python2和opencv进行人脸识别

一、安装cv2 sudo apt-get install python-opencv opencv-data 二、 Haar特征分类器 Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。 ...

wangxuwei
6分钟前
0
0
python模板中循环字典

{% for k,v in user.items %} {{ k}} {{ v}} {% endfor %}

南桥北木
35分钟前
0
0
Java8系列之重新认识HashMap

简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类...

HOT_POT
38分钟前
0
0
获取调用方的className

/** * 获取调用方的class * @return */private static String getInvoke() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); S......

iborder
55分钟前
0
0
深入了解一下Redis的内存模型!

一前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符...

Java填坑之路
今天
1
0
从实践出发:微服务布道师告诉你Spring Cloud与Spring Boot他如何选择

背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加。在这个背景下,平台的技术架构也完成了从传统的单体应用到微...

老道士
今天
0
0
大数据学习的各个阶段

第一阶段:Linux课程讲解Linux基础操作,讲的是在命令行下进行文件系统的操作,这是Hadoop学习的基础,后面的所有视频都是基于linux操作的。鉴于很多学员没有linux基础,特增加该内容,保证零linux...

董黎明
今天
0
0
CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
今天
7
0
CISCO VPN Client Reason 442 WIN8/10错误解决方案

http://jdkleo.iteye.com/blog/2163493 引用 http://my.oschina.net/cloudcoder/blog/220391?p={{currentPage 1}} 在使用cisco VPN 客户端登录时,产生Reason 442:Failedto enable Virtual......

chenfj_fer
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部