大数据(Spark-核心原理及架构)

Spark RDD特性

RDD(Resilient Distributed Datasets),弹性分布式数据集,它是对分布式数据集的一种内存抽象,经过受限的共享内存方式来提供容错性,同时这种内存模型使得计算比传统的数据流模型要高效。RDD具备5个重要的特性,以下图所示:多线程

1.一组分区,数据集的基本组成单位。
2.计算每个数据分区的函数。
3.对parent RDD的依赖,这个依赖描述了RDD之间的lineage(血统)。
4.可选,对于键值对RDD,有一个Partitioner(一般是HashPartitioner,RangePartitioner)。
5.可选,一组Preferred location信息(例如,HDFS文件的Block所在location信息)。架构

Spark 运行模式分析-概述

用户在提交任务给Spark处理时,如下两个参数共同决定了Spark的运行方式。
· –master MASTER_URL :决定了Spark任务提交给哪一种集群处理。
· –deploy-mode DEPLOY_MODE:决定了Driver的运行方式,可选值为Client或者Cluster。

Spark 运行架构的特色
每一个Application获取专属的executor进程,该进程在Application期间一直驻留,并以多线程方式运行Tasks。这种Application隔离机制有其优点的,不管是从调度角度看(每一个Driver调度它本身的任务),仍是从运行角度看(来自不一样Application的Task运行在不一样的JVM中)。固然,这也意味着Spark Application不能跨应用程序共享数据,除非将数据写入到外部存储系统。并发

Spark与资源管理器无关,只要可以获取Executor进程,并可以保持相互通讯就能够了。框架

提交SparkContext的Client应该靠近Worker节点(运行Executor的节点),最好是在同一个机架里,由于Spark Application运行过程当中SparkContext和Executor之间有大量的信息交换;若是想在远程集群中运行,最好使用RPC将SparkContext提交给集群,不要远离Worker运行SparkContext。分布式

专属名称:
Application:每个Spark程序,称之为一个Application。
Driver:每一个Spark程序运行一个Driver进程,用来协调,统计任务进度。
Worker:每一个Spark程序运行多个Worker进程,能够运行在一个节点或多个节点上,包含多个Executor子进程。
Executor:每一个Spark程序运行多个Executor进程,具体承担计算任务。
 函数

Standalone 运行模式
Spark Standalone模式,即独立模式,自带完整的服务,可单独部署到一个集群中,无需依赖其余资源管理系统(资源管理+资源调度)。在该模式下,用户能够经过手动启动Master和Worker来启动一个独立的集群。其中,Master充当了资源管理的角色,Workder充当了计算节点的角色。在该模式下,Spark Driver程序在客户端Client运行,而Executor则在Worker节点上运行。工具

Standalone 组件分析 整个集群分为Master节点和Worker节点,其中Driver程序运行在客户端。
.Master节点负责为任务分配Worker节点上的计算资源,二者会经过相互通讯来同步资源状态,见途中红色双向箭头。
.客户端启动任务后会运行Driver程序,Driver程序中会完成SparkContext对象的初始化,并向Master进行注册。
.每一个Workder节点上会存在一个或者多个ExecutorBackend进程。每一个进程包含一个Executor对象,该对象持有一个线程池,每一个线程池能够执行一个任务task。ExecutorBackend进程还负责跟客户端节点上的Driver程序进行通讯,上报任务状态。学习

Spark Standalone任务运行过程测试

上面的过程反映了Spark在standalone模式下,总体上客户端、Master和Workder节点之间的交互。对于一个任务的具体运行过程须要更细致的分解,分解运行过程见图中的小字。spa

1.用户经过bin/spark-submit部署工具或者bin/spark-class启动应用程序的Driver进程,Driver进程会初始化SparkContext对象,并向Master节点进行注册。
2.Master节点接受Driver程序的注册,检查它所管理的Worker节点,为该Driver程序分配须要的计算资源Executor。Worker节点完成Executor的分配后,向Master报告Executor的状态。
3.Worker节点上的ExecutorBackend进程启动后,向Driver进程注册。
4.Driver进程内部经过DAG Schaduler,Stage Schaduler,Task Schaduler等过程完成任务的划分后,向Worker节点上的ExecutorBackend分配TASK。
5.ExecutorBackend进行TASK计算,并向Driver报告TASK状态,直至结束。
6.Driver进程在全部TASK都处理完成后,向Master注销。

Spark 运行模式分析- Standalone

Spark Standalone 模式总结
Spark可以以standalone模式运行,这是Spark自身提供的运行模式,用户能够经过手动启动master和worker进程来启动一个独立的集群,也能够在一台机器上运行这些守护进程进行测试。standalone模式能够用在生产环境,它有效的下降了用户学习、测试Spark框架的成本。

standalone模式目前只支持跨应用程序的简单FIFO调度。然而,为了容许多个并发用户,你能够控制每一个应用使用的资源的最大数。默认状况下,它会请求使用集群的所有CPU内核。

缺省状况下,standalone任务调度容许worker的失败(在这种状况下它能够将失败的任务转移给其余的worker)。可是,调度器使用master来作调度,这会产生一个单点问题:若是master崩溃,新的应用不会被建立。为了解决这个问题,能够zookeeper的选举机制在集群中启动多个master,也可使用本地文件实现单节点恢复。
 

Spark 运行模式分析-Cluster

Spark Cluster模式任务运行过程
1.用户经过bin/spark-submit部署工具或者bin/spark-class向Yarn集群提交应用程序。
2.Yarn集群的Resource Manager为提交的应用程序选择一个Node Manager节点并分配第一个container,并在该节点的container上启动SparkContext对象。
3.SparkContext对象向Yarn集群的Resource Manager申请资源以运行Executor。
.Yarn集群的Resource Manager分配container给SparkContext对象,SparkContext和相关的Node Manager通信,在得到的container上启动ExecutorBackend守护进程,ExecutorBackend启动后开始向SparkContext注册并申请Task。
5.SparkContext分配Task给ExecutorBackend执行。
6.ExecutorBackend开始执行Task,并及时向SparkContext汇报运行情况。
7.Task运行完毕,SparkContext归还资源给Node Manager,并注销退。


Spark Cluster 模式总结
Spark可以以集群的方式运行,这里的可选集群有Yarn和Mesos。在集群模式下,Spark的Driver程序可能被调度到任何一个节点,任务执行完成后,集群分配的资源将被回收。
 

相关文章
相关标签/搜索