[spark]master,worker,driver,executor(如何理解1)

39 阅读3分钟

1. 从整体架构理解

用户提交应用程序 → Driver创建SparkContext → 与Master通信 → Master分配资源 → Worker启动Executor → Executor执行任务

2. 各组件详细说明

Master(主节点)
  • 角色:集群的资源管理器
  • 职责
    • 管理所有Worker节点
    • 接收客户端应用程序的连接请求
    • 分配计算资源给应用程序
    • 监控Worker节点的状态
  • 类比公司的CEO,负责整体资源分配
Worker(工作节点)
  • 角色:集群的工作执行节点
  • 职责
    • 管理所在节点的资源
    • 执行Master分配的任务
    • 启动和管理Executor进程
    • 向Master汇报心跳和资源状态
  • 类比部门经理,管理具体部门的资源
Driver(驱动器)
  • 角色:应用程序的大脑和控制中心
  • 职责
    • 运行用户的main()函数
    • 创建SparkContext
    • 将用户程序转换为任务(DAG)
    • 调度任务到Executor
    • 收集计算结果
    • 监控任务执行状态
  • 关键点
    • 每个应用程序有一个Driver
    • 可以在集群内部或外部(如你的本地机器)
  • 类比项目经理,负责整个项目的规划和协调
Executor(执行器)
  • 角色:应用程序的任务执行单元
  • 职责
    • 执行具体的任务(Task)
    • 存储RDD的分区数据
    • 将结果返回给Driver
    • 提供内存存储(缓存数据)
  • 关键点
    • 每个Worker节点可以有多个Executor
    • 每个应用程序有自己独立的Executor
  • 类比具体干活的员工

3. 组件交互流程示例

// 1. 用户在Driver程序中编写代码
val spark = SparkSession.builder()
    .appName("Example")
    .getOrCreate()

// 2. Driver创建SparkContext,连接Master
val sc = spark.sparkContext

// 3. Master分配资源,Worker启动Executor
// 4. Driver将任务分发给Executor执行
val rdd = sc.parallelize(1 to 100)
val result = rdd.map(_ * 2).collect()

// 5. Executor执行map操作,将结果返回Driver

4. 在集群中的部署方式

Standalone模式
Client Machine (Driver)
        ↓
    Master Node
    /    |    \
Worker1 Worker2 Worker3
  |       |       |
Exec1    Exec1   Exec1
Exec2    Exec2
YARN/Mesos模式
  • Master/Worker → ResourceManager/NodeManager
  • 其他概念相同

5. 核心区别对比表

组件数量生命周期作用通信对象
Master集群1个(或HA模式多个)集群运行时持续存在集群资源管理Worker, Driver
Worker集群多个集群运行时持续存在节点资源管理Master, Executor
Driver每个应用1个应用程序运行期间应用逻辑控制Master, Executor
Executor每个应用多个应用程序运行期间任务执行计算Driver, Worker

6. 实际运行示例

# 启动Master
./sbin/start-master.sh

# 启动Worker
./sbin/start-worker.sh spark://master-ip:7077

# 提交应用(Driver在客户端)
spark-submit \
  --master spark://master-ip:7077 \
  --class com.example.MyApp \
  myapp.jar

# 提交应用(Driver在集群)
spark-submit \
  --master spark://master-ip:7077 \
  --deploy-mode cluster \
  --class com.example.MyApp \
  myapp.jar

7. 记忆技巧

想象一个建筑工地

  • Master:工地总指挥(知道所有资源情况)
  • Worker:各个施工队队长(管理具体人员和设备)
  • Driver:建筑师(有图纸,知道要建什么)
  • Executor:建筑工人(具体砌砖、抹灰)

或者想象一个餐厅

  • Master:餐厅经理(分配服务区域)
  • Worker:服务员领班(管理几个服务员)
  • Driver:厨师长(看订单,决定做什么菜)
  • Executor:厨师(具体炒菜)

8. 常见配置参数

# Worker配置
spark.worker.cores = 4     # 每个Worker可用的CPU核心数
spark.worker.memory = 16g  # 每个Worker可用的内存

# Executor配置
spark.executor.cores = 2   # 每个Executor的CPU核心数
spark.executor.memory = 4g # 每个Executor的内存

# Driver配置  
spark.driver.cores = 1     # Driver的CPU核心数
spark.driver.memory = 2g   # Driver的内存

总结:Master/Worker管理集群物理资源,Driver/Executor管理应用程序逻辑执行。理解这个分离是掌握Spark架构的关键。