Spark各部分功能

转载地址 :http://blog.csdn.net/wyc09/article/details/16342809

Driver,Master,Worker,Executor

每个App通过Driver使用Cluster:首先向Master注册App,然后每个Worker为其创建一个Executor。

RDD,Partition,Task

每个RDD包含多个Partition,为了计算RDD,在Executor上为RDD的每个Partition创建一个Task负责计算相应的Partition,在一个Executor上可以创建多个Task。

BlockManager

每个Executor使用一个BlockManager。BlockManager通过MemoryStore维护加载到内存的Partition,MemoryStore的存储容量有上限。BlockManager通过DiskStore维护从内存交换到磁盘的Partition。RDD的StorageLevel在Driver端设置,在得到RDD的计算结果后,BlockManager根据RDD的StorageLevel将RDD的Partition加入MemoryStore或DiskStore。

Master的责任

* 接受Worker结点的注册请求。Worker结点在注册请求中指定自身ID、Actor套接字绑定的主机名、Actor套接字监听的端口、可用的CPU核数量、可用的内存容量、WebUI服务监听的端口、外部可用的地址(域名或主机名)。注册Worker后,如果有正在等待资源的App,将触发App调度。
* 接受App的注册请求。App在注册请求中指定App的名称、声明使用的CPU核数量、声明每个Slave(在Worker结点运行的Executor进程)使用的内存容量、用于启动Slave的命令、Spark在Worker结点的安装目径(该路径在所有Worker结点相同)、App的URL、运行App使用的用户名。注册App后,将触发App调度。
* 跟踪Worker结点的活动状态。长时间不向Master发送心跳消息的Worker结点将被Master从其内部数据结构中删除。
* 跟踪App的状态。App结束后,Master释放为App分配的资源(CPU、内存),并尝试调度正在等待的App。
* 登记Executor的状态变更。如果Executor异常终止,将触发对该Executor所属App的调度,使得App任务可以在新的Executor上执行。

Worker的责任

* 根据Master的指示,为App启动Executor进程,通过设置JVM参数限制Executor可以使用的内存量,另外向Executor进程传递一个表示可用CPU核数量的参数,Executor进程并不直接根据该参数限制自身使用的CPU核数量,而是将该参数报告给App,App将根据该参数限制向Executor请求的并发任务的数量。

Executor的责任

* 接受并执行由App请求执行的任务——将指定函数应用到指定数据集(RDD的一个Partition)的各个元素。数据集可能已经被计算,由本地BlockManager或远程Executor的BlockManager缓存在内存或磁盘;数据集也可能尚未被计算,这时就需要调用RDD的compute方法计算数据集,并将结果缓存在本地BlockManager的内存或磁盘。

App的责任

* 记录RDD的生成链和存储级别,并在触发对RDD的Action操作时向Executor请求执行并发任务以完成Action操作。

Task提交过程

所有的Action操作由Driver端的SparkContext.runJob方法触发,对该方法的调用导致向DAGScheduler的事件列队中添加一个JobSubmitted事件。DAGScheduler处理JobSubmitted事件,根据RDD创建TaskSet,将TaskSet传递到ClusterScheduler.submitTasks方法处理。ClusterScheduler.submitTasks接受传入的TaskSet,并为其创建一个TaskSetManager,然后将创建的 TaskSetManager添加进内部调度列表等待调度。对TaskSetManager或者TaskSet的调度可以被动地由StandaloneSchedulerBackend的定时任务触发,也可以在ClusterScheduler.submitTasks 将TaskSetManager添加进内部调度列表后通过调用StandaloneSchedulerBackend.reviveOffers方法主动触发。不管是哪种触发方式,都会导致StandaloneSchedulerBackend.makeOffers 方法被调用,该方法首先将App可用的Executor的资源信息告诉ClusterScheduler,请求将正在等待调度的TaskSet中的Task分配给Executor执行,ClusterScheduler 根据某种调度策略以及各个Executor的资源情况将正在等待调度的TaskSet中的Task分配给Executor,最后在各个Executor上启动为其分配的Task。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark 的组成部分主要包括: 1. Spark Core:Spark 的核心组件,提供了任务调度、内存管理、错误恢复、与存储系统交互等基础功能。 2. Spark SQL:提供了基于 SQL 的数据查询和处理功能,支持 SQL、HiveQL、DataFrame 和 Dataset 等多种数据处理接口。 3. Spark Streaming:提供了对实时数据流的处理支持,可以与 Spark Core 和 Spark SQL 集成使用。 4. MLlib:提供了机器学习的算法库,包括分类、回归、聚类、协同过滤、降维等多种算法。 5. GraphX:提供了图计算的功能,支持图的创建、变换和操作等。 Spark 的各部分含义如下: 1. 任务调度:Spark Core 负责将应用程序划分为任务并在集群中进行调度,以实现并行计算。 2. 内存管理:Spark 将数据存储在内存中,提高了数据处理的速度,同时也需要对内存进行管理以避免内存泄漏等问题。 3. 错误恢复:Spark Core 可以监控任务执行的状态,当任务失败时,可以自动恢复或重启任务,保证应用程序的稳定性。 4. 存储系统交互:Spark 可以与多种存储系统交互,如 Hadoop HDFS、Cassandra、HBase 等,支持数据的读取和写入。 5. SQL 接口:Spark SQL 提供了基于 SQL 的数据查询和处理功能,支持多种数据源和格式,如 JSON、Parquet、ORC 等。 6. 实时数据流处理:Spark Streaming 可以对实时数据流进行处理,支持多种数据源和格式,如 Kafka、Flume、Twitter 等。 7. 机器学习算法库:MLlib 提供了多种机器学习算法的实现,如分类、回归、聚类、协同过滤、降维等。 8. 图计算功能:GraphX 提供了对图数据的处理和操作,支持多种图算法和图操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值