Spark-core 运行原理

来源:互联网 发布:阿里云跟阿里巴巴关系 编辑:程序博客网 时间:2024/06/15 08:27

架构图在此

这里写图片描述

Spark Core部件解析

  • 应用程序(Application): 基于Spark的用户程序,包含了一个Driver Program 和集群中多个的Executor;
  • 驱动程序(Driver Program): 运行Application的main()函数并且创建 SparkContext. 通常用SparkContext代表Driver Program
  • 执行单元 (Executor): 是为某Application运行在Worker Node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都有各自独立的Executors
  • 集群管理程序(Cluster Manager): 在集群上获取资源的外部服务(例如:Standalone、Mesos或Yarn);

Spark Core中操作RDD的命令分为Transformation和Action
Transformation都是采用的懒策略,如果只是将transformation提交是不会执行计算的,计算只有在action被提交的时候才被触发。
map 就是Transformation
collect(), take()等则是Action

运行原理

这里写图片描述
- SPARK CORE的驱动程序首先运行Application的main函数并创建建立Spark Application的运行环境即SparkContext,SparkContext被注册到某类资源管理器上:Standalone、Mesos或YARN并申请运行Executor资源;
- 资源管理器分配Executor资源并启动Executor后端服务并接受主节点命令以及进行状态汇报
- SparkContext构建成DAG图,将DAG图分解成Stage,并把Taskset发送给 Task Scheduler。Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行同时SparkContext将应用程序代码发放给Executor。
- Task在Executor上运行,运行完毕释放所有资源。

调度模式

这里写图片描述

Standalone模式 (Spark自带的模式)

  • spark-shell交互式工具提交Spark的Job时,Driver在Master节点上运行

  • spark-submit工具提交Job时Driver运行在本地Client端上

$ spark-shell --master spark://localhost:7077 --executor-memory 1g4 is the number of cores available on your machine

这里写图片描述

YARN模式

  • YARN (在HADOOP2.0中替代JOB TRACKER 资源分配工作做) 包括两大部件:

    • ResourceManager (由Application Manager 和Scheduler 组成)负责将集群的资源分配给各个应用使用,而资源分配和调度的基本单位是Container,其中封装了机器资源,如内存、CPU、磁盘和网络等,每个任务会被分配一个Container,该任务只能在该Container中执行,并使用该Container内的资源. ResourceManager同时在每个DataNode上产生ApplicationMaster以监控Container的运行

    • NodeManager是一个个的计算节点,主要负责启动和资源上监控Application所需的 Container, 包括监控例如内存、CPU、磁盘和网络等的使用情况并将之汇报给ResourceManager。ApplicationMaster与具体的Application相关,主要负责同ResourceManager协商以获取合适的Containers,并跟踪这些Containers的状态和监控其进度;
      这里写图片描述

YARN-Client模式

  • Yarn-Client模式中,Driver在客户端本地运行,这种模式可以使得Spark Application和客户端进行交互,因为Driver在客户端,所以可以通过webUI访问Driver的状态,默认是http://hadoop1:4040访问,而YARN通过http:// hadoop1:8088访问。Yarn-Client模式中Application Master仅仅向YARN请求Executor,Client会和请求的Container通信来调度他们工作,也就是说Client不能离开

输入如下命令即可使用YARN-Client模式

$./spark-shell --master YARN-client --num-executors 3 --executor-memory 1g

YARN-CLUSTER模式

  • 当用户向YARN中提交一个应用程序后,YARN将分两个阶段运行该应用程序
    1. 把Spark的Driver作为一个ApplicationMaster在YARN集群中先启动;
    2. 由ApplicationMaster创建应用程序,然后为它向ResourceManager申请资源,并启动Executor来运行Task,同时监控它的整个运行过程,直到运行完成.

Driver运行在AM(Application Master)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,因而YARN-Cluster模式不适合运行交互类型的作业.

spark-submit --master YARN-cluster
原创粉丝点击