spark基于standalone模式提交任务和基于yarn模式提交任务的比较,spark的宽窄依赖,spark的计算模式等(图解+文字说明)
1.Spark基于Standalone提交任务
1).client
命令:
./spark-submit --master spark://node1:7077 --class ... jar ... 参数
./spark-submit --master spark://node1:7077 --deploy-mode client --class .. jar .. 参数
过程:
a).在客户端提交Spark应用程序,会在客户端启动Driver。
b).客户端向Master申请资源,Master找到资源返回。
c).Driver发送task。
注意:
client方式提交任务,在客户端提交多个application,客户端会为每个application都启动一个Driver,Driver与集群Worker节点有大量通信,这样会造成客户端网卡流量激增。client方式提交任务适用于程序测试,不适用于真实生产环境。在客户端可以看到task执行情况和计算结果。
2).cluster
命令:
./spark-submit --master spark://node1:7077 --deploy-mode cluster --class ... jar ... 参数
过程:
a).客户端提交application,客户端首先向Master申请启动Driver
b).Master收到请求之后,随机在一台Worker节点上启动Driver
c).Driver启动之后,向Master申请资源,Master返回资源。
d).Driver发送task.
注意:
cluster方式提交任务,Driver在集群中的随机一台Worker节点上启动,分散了client方式的网卡流量激增问题。
cluster方式适用于真实生产环境,在客户端看不到task执行情况和执行结果,要去WEBUI中去查看。
2.Spark基于Yarn提交任务
1).client
命令:
./spark-submit --master yarn --class ... jar ... ....
./spark-submit --master yarn-client --class ...jar ....
./spark-submit --master yarn --deploy-mode client --class ..jar ...
过程:
a).客户端提交application,Driver会在客户端启动
b).客户端向ResourceManager申请启动ApplicationMaster
c).ResourceManager收到请求之后,随机在一台NodeManager中启动ApplicationMaster
d).ApplicationMaster启动之后,向ResourceManager申请资源,用于启动Executor
e).ResourceManager收到请求之后,找到资源返回给ApplicationMaster
f).ApplicationMaster连接NodeManager启动Executor
g).Executor启动之后会反向注册给Driver
h).Driver发送task到Executor执行
注意:
client方式提交任务,在客户端提交多个application,客户端会为每个application都启动一个Driver,Driver与集群Worker节点有大量通信,这样会造成客户端网卡流量激增。client方式提交任务适用于程序测试,不适用于真实生产环境。在客户端可以看到task执行情况和计算结果。
总结:
Driver功能:
i).发送task
ii).监控task,回收结果
iii).申请资源
2).cluster
命令:
./spark-submit --master yarn-cluster --class ...jar .... ..
./spark-submit --master yarn --deploy-mode cluster --class ..jar ... ..
过程:
a).客户端提交Application,首先客户端向ResourceManager申请启动ApplicationMaster
b).ResourceManager收到请求之后,随机在一台NodeManager中启动ApplicationMaster,这里ApplicationMaster就相当于是Driver
c).ApplicationMaster启动之后,向ResourceManager申请资源,用于启动Executor
d).ResourceManager收到请求之后,找到资源返回给ApplicationMaster
e).ApplicationMaster连接NodeManager启动Executor
f).Executor启动之后会反向注册给ApplicationMaster(Driver)
g).Driver发送task到Executor执行
注意:
cluster方式提交任务,Driver在集群中的随机一台Worker节点上启动,分散了client方式的网卡流量激增问题。
cluster方式适用于真实生产环境,在客户端看不到task执行情况和执行结果,要去WEBUI中去查看。
总结:
ApplicationMaster的作用:
i).申请资源
ii).启动Executor
iii).任务调度
4.RDD宽窄依赖
宽依赖(shuffle):
父RDD与子RDD partition之间的关系是一对多
窄依赖:
父RDD与子RDD partition之间的关系是一对一
父RDD与子RDD partition之间的关系是多对一
如果您觉得此博客有用,那就鼓励一下我呗。
5.Stage
1).Stage是由一组并行的task组成的。RDD之间依赖关系形成一个DAG有向无环图,DAG有向无环图按照RDD之间的宽窄依赖划分stage。
2).spark计算模式:
pipeline管道计算模式,相当于高阶函数展开方式计算
思想,1+1+1=3
MR:1+1=2 2+1=3
3).在管道中的数据什么时候落地?
a).shuffle write
b).对RDD持久化
4).Stage的并行度?由stage中的finalRDD中partition个数决定的。
5).如何提高stage的并行度?
reduceByKey(xx,numpartitions),groupByKey(xx,numpartitions),join(xx,numpartition)