Spark启动过程(针对standalone)-spark-1.6.0

来源:互联网 发布:ai汉化包for mac 编辑:程序博客网 时间:2024/06/16 17:46
Spark启动过程
正常启动Spark集群时往往使用start-all.sh ,此脚本中通过调用start-master.sh和start-slaves.sh启动mater及workers节点。
1、启动Master
(1)注册SignalLogger日志记录器
(2)创建名称为master的Actor 并启动,在启动master之前会:
     a). 加载Spark环境变量
     b). 创建workers、apps、drivers等例表,用于记录相关信息
     c). 创建WebUi
     d). 创建及启动MetricsSystem用于监控系统状态
     e). 定期检查Worker状态,维护可用Worker列表


2、启动Slave(Worker)
(1)注册SignalLogger日志记录器
(2)创建名称为worker的Actor 并启动,在启动worker之前会:
    a).创建executors、drivers、finishedApps等列表,用于记录相关信息
    b).创建及启动MetricsSystem用于监控worker状态
    c).生成workerID,以时间串+host+port组成,其不可能重复。
    d).创建worker工作目录
    e).向master注册worker
    f).定期检查Worker状态,维护可用Worker列表
注意:主要调用了org.apache.spark.deploy.worker.Worker类

2
3
4
5
6
7
def main(argStrings: Array[String]) {
SignalLogger.register(log)
val conf = new SparkConf
val args = new MasterArguments(argStrings, conf)
val (actorSystem, _, _, _) = startSystemAndActor(args.host, args.port,args.webUiPort, conf)
actorSystem.awaitTermination()
}



3、Worker 向Master注册过程
(1)将worker被启动时,向master发送消息:master!RegisterWorker(workerId, host, port, cores, memory, webUi.boundPort, publicAddress)。
(2)当master收到worker发磅的RegisterWorker消息后,先检测workerId是否已注册,
    a). 若已注册,向worker发送sender ! RegisterWorkerFailed("Duplicate worker ID")消息
    b).若未注册,则注册worker,将其信息记录worker相关的列表,如idToWorker、workers等中,并将其添加到persistenceEngine中,通知sender ! RegisteredWorker(masterUrl, masterWebUiUrl)
    c).执行schedule()
(3)当worker收到master的反馈消息时:
    a).当消息内容为RegisteredWoker时,worker开启定期向master报活。开始报活后,若Master联系4个报活周期未收到worker心跳,
      则master认为worker已经不可用,从其维护的worker列表中移除连续未报活worker信息。若向master报活的worker并未在master维护的worker列表中,则master通知该worker重新进行注册。
    b).若消息内容为RegisterWorkerFailed,则表示注册败,重试或退出。



注意:他们之间的通信使用的是封装了scala actor 的akka。










原创粉丝点击