分享

spark有哪些概念

已有(3)人评论

跳转到指定楼层
Alkaloid0515 发表于 2015-7-8 23:50:34



Spark应用(Application)是用户提交的应用程序。执行模式又Local、Standalone、YARN、Mesos。根据Spark Application的Driver Program是否在集群中运行,Spark应用的运行方式又可以分为Cluster模式和Client模式。
下面是Spark应用涉及的一些基本概念:
  • Application:Spark 的应用程序,用户提交后,Spark为App分配资源,将程序转换并执行,其中Application包含一个Driver program和若干Executor
  • SparkContext:Spark 应用程序的入口,负责调度各个运算资源,协调各个 Worker
    Node 上的 Executor
  • Driver Program:运行Application的main()函数并且创建SparkContext
  • RDD Graph:RDD是Spark的核心结构, 可以通过一系列算子进行操作(主要有Transformation和Action操作)。当RDD遇到Action算子时,将之前的所有算子形成一个有向无环图(DAG)。再在Spark中转化为Job,提交到集群执行。一个App中可以包含多个Job
  • Executor:是为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上。每个Application都会申请各自的Executor来处理任务
  • Worker Node:集群中任何可以运行Application代码的节点,运行一个或多个Executor进程

下面介绍Spark Application运行过程中各个组件的概念:
  • Job:一个RDD Graph触发的作业,往往由Spark Action算子触发,在SparkContext中通过runJob方法向Spark提交Job
  • Stage:每个Job会根据RDD的宽依赖关系被切分很多Stage, 每个Stage中包含一组相同的Task, 这一组Task也叫TaskSet
  • Task:一个分区对应一个Task,Task执行RDD中对应Stage中包含的算子。Task被封装好后放入Executor的线程池中执行
  • DAGScheduler:根据Job构建基于Stage的DAG,并提交Stage给TaskScheduler
  • TaskScheduler:将Taskset提交给Worker node集群运行并返回结果

回复

使用道具 举报

NEOGX 发表于 2017-3-22 07:48:04
1,Application
application(应用)其实就是用spark-submit提交的程序。比方说spark examples中的计算pi的SparkPi。一个application通常包含三部分:从数据源(比方说HDFS)取数据形成RDD,通过RDD的transformation和action进行计算,将结果输出到console或者外部存储(比方说collect收集输出到console)。
2,Driver
Spark中的driver感觉其实和yarn中Application Master的功能相类似。主要完成任务的调度以及和executor和cluster manager进行协调。有client和cluster联众模式。client模式driver在任务提交的机器上运行,而cluster模式会随机选择机器中的一台机器启动driver。从spark官网截图的一张图可以大致了解driver的功能。
cluster-overview.png

3,Job
Spark中的Job和MR中Job不一样不一样。MR中Job主要是Map或者Reduce Job。而Spark的Job其实很好区别,一个action算子就算一个Job,比方说count,first等。
4, Task
Task是Spark中最新的执行单元。RDD一般是带有partitions的,每个partition的在一个executor上的执行可以任务是一个Task。
5, Stage
Stage概念是spark中独有的。一般而言一个Job会切换成一定数量的stage。各个stage之间按照顺序执行。至于stage是怎么切分的,首选得知道spark论文中提到的narrow dependency(窄依赖)和wide dependency( 宽依赖)的概念。其实很好区分,看一下父RDD中的数据是否进入不同的子RDD,如果只进入到一个子RDD则是窄依赖,否则就是宽依赖。宽依赖和窄依赖的边界就是stage的划分点。从spark的论文中的两张截图,可以清楚的理解宽窄依赖以及stage的划分。
942797-20160724175058435-1946046847.png 942797-20160724175115716-405249899.png
至于为什么这么划分,主要是宽窄依赖在容错恢复以及处理性能上的差异(宽依赖需要进行shuffer)导致的。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条