专栏首页数据科学与人工智能【Spark研究】Spark之工作原理

【Spark研究】Spark之工作原理

基本概念

理解Spark的运行模式涉及一系列概念:

(1)Cluster Manager:在集群上获取资源的外部服务。目前有三种类型:1. Standalone, Spark原生的资源管理;2. Apache Mesos, 和Hadoop Mapreduce兼容性良好的资源调度框架;3. Hadoop Yarn, 主要指YARN中的ResourceManager.

(2)Application: 用户编写的应用应用程序。

(3)Driver: Application中运行main函数并创建的SparkContext, 创建SparkContext的目的是和集群的ClusterManager通讯,进行资源的申请、任务的分配和监控等。所以,可以用SparkContext代表Driver。

(4)Worker:集群中可以运行Application代码的节点。

(5)Executor: 某个Application在Worker上面的一个进程,该进程负责执行某些Task,并负责把数据存在内存或者磁盘上。每个Application都各自有一批属于自己的Executor。

(6)Task:被送到Executor执行的工作单元,和Hadoop MapReduce中的MapTask和ReduceTask一样,是运行Application的基本单位。多个Task组成一个Stage,而Task的调度和管理由TaskScheduler负责。

(7)Job:包含多个Task组成的并行计算,往往由Spark Action触发产生。一个Application可以产生多个Job。

(8)Stage:每个Job的Task被拆分成很多组Task, 作为一个TaskSet,命名为Stage。Stage的调度和划分由DAGScheduler负责。Stage又分为Shuffle Map Stage和Result Stage两种。Stage的边界就在发生Shuffle的地方。

(9)RDD:Spark的基本数据操作抽象,可以通过一系列算子进行操作。RDD是Spark最核心的东西,可以被分区、被序列化、不可变、有容错机制,并且能并行操作的数据集合。存储级别可以是内存,也可以是磁盘。

(10)DAGScheduler:根据Job构建基于Stage的DAG(有向无环任务图),并提交Stage给TaskScheduler。

(11)TaskScheduler:将Stage提交给Worker(集群)运行,每个Executor运行什么在此分配。

(12)共享变量:Spark Application在整个运行过程中,可能需要一些变量在每个Task中都使用,共享变量用于实现该目的。Spark有两种共享变量:一种缓存到各个节点的广播变量;一种只支持加法操作,实现求和的累加变量

(13)宽依赖:或称为ShuffleDependency, 宽依赖需要计算好所有父RDD对应分区的数据,然后在节点之间进行Shuffle。

(14)窄依赖:或称为NarrowDependency,指某个RDD,其分区partition x最多被其子RDD的一个分区partion y依赖。窄依赖都是Map任务,不需要发生shuffle。因此,窄依赖的Task一般都会被合成在一起,构成一个Stage。

运行模式

Spark的运行模式多种多样,在单机上既可以以本地模式运行,也可以以伪分布式模式运行。而当以分布式的方式运行在Cluster集群中时,底层的资源调度可以使用Mesos 或者是Hadoop Yarn ,也可以使用Spark自带的Standalone Deploy模式。

基本上,Spark的运行模式取决于传递给SparkContext的MASTER环境变量的值,个别模式还需要辅助的程序接口来配合使用,目前支持的Master字符串及URL包括:

local 本地模式

./bin/spark-submit --master local       # 只以单进程(没有并行化)运行
./bin/spark-submit --master local[N]    # 以N(数字)个线程本地运行
./bin/spark-submit --master local[*]    # 以CPU个数个线程本地运行

spark://HOST:PORT Spark独立部署模式,需要部署Spark到相关节点,默认7077端口。

spark.master --master spark://xx:7077

mesos://HOST:PORT Mesos模式,需要部署Spark和Mesos到相关节点。

spark.master --master mesos://xx:5055

yarn-client SparkConext运行在本地,task运行在Yarn集群中,集群在HADOOP_CONF_DIR 中设置。

./bin/spark-submit --master yarn-client

yarn-cluster SparkContext和任务都运行在Yarn集群中,集群在HADOOP_CONF_DIR 中设置。

./bin/spark-submit --master yarn-cluster

常用的模式一般是local[*]和yarn-cluster,local[*]用于本地调试,而yarn-cluster用于在YARN集群上生产环境跑作业。

工作流程

无论运行在哪种模式下,Spark作业的执行流程都是相似的,主要有如下八步:

  1. 客户端启动,提交Spark Application, 一般通过spark-submit来完成。
  2. Driver程序创建SparkContext,将其作为调度的总入口。
  3. SparkContext在初始化过程中分别创建DAGScheduler(进行Stage调度)和TaskScheduler(进行Task调度)两个模块。
  4. DAGScheduler进行Job的Stage划分。
  5. DAGScheduler将Stage提交给TaskScheduler。
  6. TaskScheduler向Executor发送命令,执行Task。
  7. Driver管理Task状态。
  8. Task完成,Stage完成,作业完成。

本文分享自微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-12-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 3月20日数据动态早报 | 大健康,大数据

    数据动态早报,让您了解数据新变化、新创造和新价值。 ? ---- 一、通信行业数据动态 1 5G网络一旦正式商用,除了会使通信业进入新一轮发展期外,还将带动...

    陆勤_数据人网
  • 【机器学习】机器学习正在五个方面重塑我们的世界

    机器学习的技术越来越成熟,与大数据结合在一起为我们的世界带来了巨大的变化。对此,大数据专家Bernard Marr总结了机器学习在听、说、读、写、看五个方面如何...

    陆勤_数据人网
  • 数据科学家/数据工程师

    As the field of data science continues to grow and mature, it is nice to begin s...

    陆勤_数据人网
  • 让WordPress支持google AMP

    1.关于AMP 在移动互联网的时代,尽管网站响应式设计可以满足多屏(pc、手机、ipad等)浏览,但google在2015年10月推出了更快移动页面访问速度的技...

    Jianbo
  • MONGODB 那种设计更适合

    比如经常变动的需求,有些需求在开发告一段落后,预估还有变动看似不合理,其实在现实中处处可见,需求不完善,需求不明确,需求由于某些原因修改。

    AustinDatabases
  • 获取不同手机浏览器的实际可用高度代码分享

    但是不同手机浏览器有自己的地址栏、状态栏等,window.screen.availHeight 取到的屏幕高度也包括了这两者,导至本来希望满屏显示的内容出现滚动...

    德顺
  • Oracle初级性能优化总结

      关于对Oracle数据库查询性能优化的一个简要的总结。 从来数据库优化都是一项艰巨的任务。对于大数据量,访问频繁的系统,优化工作显得尤为重要。由于Oracl...

    aehyok
  • 马蜂窝ABTest多层分流系统的设计与实现

    产品的改变不是由我们随便「拍脑袋」得出,而是需要由实际的数据驱动,让用户的反馈来指导我们如何更好地改善服务。正如马蜂窝 CEO 陈罡在接受专访时所说:「有些东西...

    马蜂窝技术
  • 简单几步,轻松搞定智能合约快速开发

    对于一些人来说,可能从来没有开发过智能合约,也没有参与过开发,但大家听完本次演讲之后,倒腾两个小时基本上就可以开发自己的合约了,这是一个很有意思、让人兴奋的事情...

    区块链大本营
  • 【知识星球】Attention网络结构上新,聚焦才能赢

    继续咱们的“网络结构1000变”板块,最近上新的内容主要是Attention机制相关的网络结构,即网络如何选择真正感兴趣的区域进行处理,下面是一个代表,更多请移...

    用户1508658

扫码关注云+社区

领取腾讯云代金券