Spark内核架构解密

Driver:运行程序时具有main方法并且创建SparkContext的环境对象
程序运行的核心
SparkContext,高层调度器DAGScheduler,底层调度器TaskScheduler,也有SchedulerBackEnd
负责向Master注册当前程序,Master给他分配资源,根据Action返回Job,Job里面有一系列的RDD,如果是宽依赖的话就划分成不同的Stage,Stage交给底层调度器TaskScheduler,TaskScheduler拿到任务后根据任务情况把任务给Executor去执行。
Executor如果出问题会向Driver进行汇报,运行完毕后SparkContext关闭
Application = Driver+ Executor
Driver部分的代码:SparkConf+SparkContext
Executor部分的代码:textFile, flatMap, map
Executor中有线程池,任务由线程池中的线程执行,执行后回收
Cluster Manager:获取资源的外部程序
Spark Application的运行不依赖于Cluster Manager
Worker上不运行程序代码,Worker管理资源使用情况,会接收Master分配资源的指令,并通过ExecutorRunner来启动新的进程来开启Executor,Worker不会发机器资源信息给Master,在Master分配资源之时已经知道了。
Job:包含一些列Task的并行计算
Action不会产生RDD
Spark快:调度、容错
窄依赖依赖固定个数的,不会变
Stage内部计算逻辑完全一样,只是计算的数据不同罢了
一个Application里面可以有多个jobs(不同的action),一般一个action对应一个job,checkpoint也会导致job
Spark程序运行的两种模式:Client Cluster,建议使用Client模式
driver频繁和executor通信,所以要在同一个网段中
不要用IDE作为Driver,Driver也可能有JavaEE
分配资源由以下内容决定:
1、spark-env.sh和spark-default.sh
2、spark-submit提交的参数
3、程序中spark-conf配置的参数
TaskRunner继承Runnable接口

|