1. 焦点组件职责
Driver节点(相当于司机大脑引擎)
- 焦点功能:
- 剖析用户代码天生DAG
- 将逻辑实验计划转换为物理实验计划
- 和谐任务调度与资源分配
- 维护Executor的生命周期
- 关键进程:
- <img alt="" height="218" src="https://i-blog.csdnimg.cn/direct/75e89f50175545f9ab53b0d1ccc99fcb.png" width="1214" />
复制代码 Executor(相当于工人肌肉)节点
- 焦点功能:
- 实验具体的Task(数据盘算)
- 管理BlockManager(数据缓存)
- 通过心跳机制与Driver保持通信
- 资源分配:
- # 典型配置(每个Executor)
- --executor-memory 16g # 堆内存
- --executor-cores 4 # 并发任务数
- --memoryOverhead 2g # 堆外内存
复制代码 2. 任务调度全流程
从代码到物理实验
- <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阶段划分
- // 示例:WordCount的Stage划分
- val file = sc.textFile("hdfs://data") // Stage0
- val words = file.flatMap(_.split(" ")) // Stage0
- val pairs = words.map((_, 1)) // Stage0
- val counts = pairs.reduceByKey(_ + _) // Stage1(Shuffle边界)
- counts.saveAsTextFile("hdfs://output") // Stage1
复制代码 Task调度策略
- 调度类型:
- FIFO调度:默认策略,按提交顺序实验
- FAIR调度:设置spark.scheduler.mode=FAIR
- 当地性级别优先级:
- PROCESS_LOCAL(同进程)
- NODE_LOCAL(同节点)
- RACK_LOCAL(同机架)
- ANY(任意节点)
4. 容错机制设计
Executor故障处理
- <img alt="" height="525" src="https://i-blog.csdnimg.cn/direct/ad988af2cd7c4c0283003e8227a84014.png" width="1252" />
复制代码 Driver故障恢复
- Cluster模式:通过集群管理器重启Driver
- Checkpoint机制:
- ssc.checkpoint("hdfs://checkpoint") // 流处理检查点
- spark.sparkContext.setCheckpointDir("hdfs://dir") // RDD检查点
复制代码 5. 企业级调优实践
资源分配公式
- # 计算最优Executor数量
- total_cores = 100 # 集群总核心数
- executor_cores = 4 # 每个Executor核心数
- executor_memory = 16 # 每个Executor内存(GB)
- num_executors = total_cores // executor_cores
- spark.executor.instances = num_executors - 1 # 保留1核心给Driver
复制代码 制止OOM的设置策略
- # 关键参数配置示例
- spark.executor.memoryOverhead=2048 # 堆外内存
- spark.memory.fraction=0.6 # 执行与存储内存比例
- 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 诊断命令示例
- # 查看Executor列表
- curl http://driver-host:4040/api/v1/applications/<app-id>/allexecutors
- # 获取Stage详情
- spark-submit --conf spark.eventLog.enabled=true ...
复制代码 理解Driver/Executor架构的要点:
- Driver是大脑:负责全局规划但非性能瓶颈
- Executor是肌肉:实际实验单元需合理设置资源
- 调度策略是神经:平衡数据当地性与资源利用率
- 容错机制是免疫体系:保障作业稳定运行
这种架构设计使得Spark能够:
- 实现亚秒级任务调度耽误(对比MapReduce的秒级耽误)
- 通过内存盘算达到10-100倍性能提升
- 支持复杂的DAG实验模式
- 动态顺应集群资源变化
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |