zoukankan      html  css  js  c++  java
  • spark源码解析4-任务提交流程

    1. 在任务启动时,sparksubmit已经通过反射的方式调用了用户提交任务的主类中的main方法,所以,本节以wordcount为例讲解
    2. 在wordcount中主要由以下几步:
      1. 创建SparkConf,设置名字
      2. 创建SparkContent,书写程序
      3. 程序逻辑,启动任务
      4. 停止任务
    3. 所以最重要的源码分析应该在new SparkContent()这个步骤里
      1. 在281行定义了createSparkEnv()方法,用来创建sparkEnv,但是还没
      2. 在526行定义了createTaskScheduler()方法,创建了taskscheduler
        1. 匹配master的模式,SPARK_REGEX(sparkUrl)为standalone模式
        2. 创建TaskSchedulerImpl 
          1. 定义initialize()方法,接受参数为SchedulerBackend;逻辑中定义调度器类型(默认是FIFO),在创建rootPool等
          2. 定义start()方法,创建executor的通信actor
        3. 创建SparkDeploySchedulerBackend()
        4. 执行TaskSchedulerImpl 的initialize方法,将SparkDeploySchedulerBackend最为参数传入
        5. 返回SparkDeploySchedulerBackend和TaskSchedulerImpl 
      3. 在529行new DAGScheduler(this),创建了DAGScheduler
        1. new DAGSchedulerEventProcessLoop()
          1. 定义inRecive()方法,调用doOnRecive()方法
          2. 定义doOnRecive()方法中匹配任务方式
            1. 匹配JobSubmit,调用dagScheduler.handleJobSubmitted()
        2. new DAGScheduler()最后一行,1473行调用eventProcessLoop.start()
          1. 调用父类EventLoop的start()方法
            1. 在父类的start()方法中,调用onStart()方法
            2. 然后调用线程eventThread()的start()方法
            3. 启动线程的run()方法
              1. 从队列中获取事件
              2. 回调DAGSchedulerEventProcessLoop的onRecive()方法处理事件
      4. 调用TaskSchedulerImpl 的start()方法
      1. 调用子类SparkDeploySchedulerBackend的start方法,因为在init方法中已经传入了子类
      2. SparkDeploySchedulerBackend的start方法中:
        1. 调用父类CoarseGrainedSchedulerBackend的start方法
          1. 注册driverEndPoint
          2. new DriverEndPoint()
            1. 执行onstart()
              1. 定期接收任务,向自己发送ReviveOffers的case object
              2. 调用makeOffers()方法
              3. 在makeOffers()方法中,调用launchTask()
              4. 在launchTask()中,判断集群是否有资源,决定是否发送任务
              5. 发送任务到CoarseGrainedExecutorBackend
              6. 在 CoarseGrainedExecutorBackend中提交任务
      1. 创建AppClient()
        1. 创建ClientEndPoint,用于和master通信
      2. 调用AppClient的start()方法,创建AppClient的endpoint
  • 相关阅读:
    AD账号解锁
    Django中的DateTimeField格式
    接口调用,输出结果为Json格式(ConvertTo-Json),提交参数给URL(WebRequest)
    jQuery表格排序(tablesorter)
    Python脚本性能分析
    监控文件内容变化,即时写入到新文件(tail)
    导出目录权限
    多进程、多线程处理文件对比
    shell 实例收集
    DHCP : 网络世界身份的获取
  • 原文地址:https://www.cnblogs.com/haoyy/p/6201927.html
Copyright © 2011-2022 走看看