Spark中RDD模式下Driver和Excutor架构原理

打印 上一主题 下一主题

主题 1003|帖子 1003|积分 3009

1. 焦点组件职责

Driver节点(相当于司机大脑引擎)



  • 焦点功能

    • 剖析用户代码天生DAG
    • 将逻辑实验计划转换为物理实验计划
    • 和谐任务调度与资源分配
    • 维护Executor的生命周期

  • 关键进程
    1. <img alt="" height="218" src="https://i-blog.csdnimg.cn/direct/75e89f50175545f9ab53b0d1ccc99fcb.png" width="1214" />
    复制代码
Executor(相当于工人肌肉)节点



  • 焦点功能

    • 实验具体的Task(数据盘算)
    • 管理BlockManager(数据缓存)
    • 通过心跳机制与Driver保持通信

  • 资源分配
    1. # 典型配置(每个Executor)
    2. --executor-memory 16g   # 堆内存
    3. --executor-cores 4      # 并发任务数
    4. --memoryOverhead 2g     # 堆外内存
    复制代码

2. 任务调度全流程

从代码到物理实验

  1. <img alt="" height="949" src="https://i-blog.csdnimg.cn/direct/5bbb8ec7829a4f19b688e5c7cfba8d4b.png" width="1532" />
复制代码
关键阶段耗时分析

阶段典型耗时优化手段DAG天生10-100ms淘汰宽依靠数量资源申请2-30s利用动态资源分配Task序列化5-50ms减小闭包体积数据当地化等候0-60s合理设置spark.locality.wait
3. 调度器工作原理

DAGScheduler阶段划分

  1. // 示例:WordCount的Stage划分
  2. val file = sc.textFile("hdfs://data")  // Stage0
  3. val words = file.flatMap(_.split(" ")) // Stage0
  4. val pairs = words.map((_, 1))          // Stage0
  5. val counts = pairs.reduceByKey(_ + _)  // Stage1(Shuffle边界)
  6. counts.saveAsTextFile("hdfs://output") // Stage1
复制代码
Task调度策略



  • 调度类型

    • FIFO调度:默认策略,按提交顺序实验
    • FAIR调度:设置spark.scheduler.mode=FAIR

  • 当地性级别优先级

    • PROCESS_LOCAL(同进程)
    • NODE_LOCAL(同节点)
    • RACK_LOCAL(同机架)
    • ANY(任意节点)


4. 容错机制设计

Executor故障处理

  1. <img alt="" height="525" src="https://i-blog.csdnimg.cn/direct/ad988af2cd7c4c0283003e8227a84014.png" width="1252" />
复制代码
Driver故障恢复



  • Cluster模式:通过集群管理器重启Driver
  • Checkpoint机制
    1. ssc.checkpoint("hdfs://checkpoint") // 流处理检查点
    2. spark.sparkContext.setCheckpointDir("hdfs://dir") // RDD检查点
    复制代码

5. 企业级调优实践

资源分配公式

  1. # 计算最优Executor数量
  2. total_cores = 100                   # 集群总核心数
  3. executor_cores = 4                  # 每个Executor核心数
  4. executor_memory = 16                # 每个Executor内存(GB)
  5. num_executors = total_cores // executor_cores
  6. spark.executor.instances = num_executors - 1  # 保留1核心给Driver
复制代码
制止OOM的设置策略

  1. # 关键参数配置示例
  2. spark.executor.memoryOverhead=2048  # 堆外内存
  3. spark.memory.fraction=0.6           # 执行与存储内存比例
  4. spark.memory.storageFraction=0.5    # 存储内存占比
复制代码

6. 与Hadoop MapReduce对比

特性Spark Driver/ExecutorHadoop JobTracker/TaskTracker任务启动速率线程级(毫秒)进程级(秒级)数据共享内存共享通过HDFS中转容错粒度Task级别TaskAttempt级别资源利用率高(动态分配)低(静态分配)
7. 监控与诊断

关键监控指标

指标康健阈值异常处理Driver CPU利用率<70%检查DAG复杂度Executor心跳耽误<3s检查网络状况Task失败率<1%分析GC日志或数据倾斜数据当地化率>90%调解spark.locality.wait 诊断命令示例

  1. # 查看Executor列表
  2. curl http://driver-host:4040/api/v1/applications/<app-id>/allexecutors
  3. # 获取Stage详情
  4. spark-submit --conf spark.eventLog.enabled=true ...
复制代码

理解Driver/Executor架构的要点:

  • Driver是大脑:负责全局规划但非性能瓶颈
  • Executor是肌肉:实际实验单元需合理设置资源
  • 调度策略是神经:平衡数据当地性与资源利用率
  • 容错机制是免疫体系:保障作业稳定运行
这种架构设计使得Spark能够:


  • 实现亚秒级任务调度耽误(对比MapReduce的秒级耽误)
  • 通过内存盘算达到10-100倍性能提升
  • 支持复杂的DAG实验模式
  • 动态顺应集群资源变化

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表