赞
踩
Spark集群启动之后,首先调用$SPARK_HOME/sbin/start-all.sh,start-all.sh脚本中调用了“start-master.sh”脚本和“start-slaves.sh”脚本,在start-master.sh脚本中可以看到启动Master角色的主类:“org.apache.spark.deploy.master.Master”。在对应的start-slaves.sh脚本中又调用了start-slave.sh脚本,在star-slave.sh脚本中可以看到启动Worker角色的主类:“org.apache.spark.deploy.worker.Worker”。
Spark框架的设计思想是每台节点上都会启动对应的Netty通信环境,叫做RpcEnv通信环境。每个角色启动之前首先向NettyRpcEnv环境中注册对应的Endpoint,然后启动。角色包括:Master,Worker,Driver,Executor等。下图是启动start-all集群后,Master角色启动过程,Master角色的启动会调用“org.apache.spark.deploy.master.Master”主类,执行流程如下:
Spark submit提交任务时,调用$SPARK_HOME/bin/spark-submit spark-submit脚本中调用了“org.apache.spark.deploy.SparkSubmit”类。执行此类时,首先运行main方法进行参数设置,然后向Master申请启动Driver。代码流程如下图示:
当提交任务之后,客户端向Master申请启动Driver,这里首先会启动一个DriverWrapper类来对用户提交的application进行包装运行,DriverWrapper类的启动过程如下:
当执行用户的代码时,在new SparkContext时,会注册真正的Driver 角色,这个角色名称为“CoarseGrainedScheduler”,Driver角色注册之后,注册“AppClient”角色,由当前这个角色向Master注册Application。代码流程如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。