spark的主要组件和进程
driver (进程):
我们编写的spark程序就在driver上,由driver进程执行
master(进程):
主要负责资源的调度和分配,还有集群的监控
worker(进程):
主要负责
1.用自己的内存 存储RDD的某个或某些partition;
2.启动其它进程和线程,对RDD上的partition进行版型的处理和计算
executor(进程):
负责对RDD的partition进行并行计算,也就是执行我们对RDD栋定义,比如map/flatmap/reduce等算子操作
task(线程):
对RDD的partition数据执行指定的算子操作
spark架构原理大致步骤:
-
driver进程启动之后,会做初始化的操作,在这个过程中会发送请求到Master上,进行spark应用程序的注册,其实就是让master知道,有一个新的spark应用程序要运行
-
master在接收到spark应用程序的注册申请之后,会发送请求给worker,进行资源的调度和分配;其实就是资源的分配就是对executor的分配
-
worker接收到master的请求后会为spark应用启动executor
-
executor启动之后,会向driver进行反注册,这样driver就知道哪些executor是为它进行服务的
-
driver注册了一些executor之后,就可以开始正式执行我们的spark应用程序了,首先第一步就是创建初始RDD,读取数据源
-
HDFS文件内容被读取到多个worker节点上,形成内存中的分布式数据集,也就是初始RDD
-
然后worker进程上就会出现一些RDD的partition
-
driver会根据我们对RDD定义的操作,提交一大堆task去executor
-
executor接收到task后,会启动多个线程来执行task
-
task就会对RDD的partition数据执行指定的算子操作,然后形成新的RDD的partition
此时一个循环就结束了,接下来会对新的RDD partition 那么driver又会提交新的task去操作直到这个spark应用执行完毕