Spark 部署与执行

Spark 部署

Spark 部署主要包括:Local 模式、Standalone 模式(伪集群部署)、YARN 模式(Hadoop2 资源管理器)、Mesos 模式(通用集群管理器)。除此之外 Spark 的 EC2 脚本是的 Amazon EC2 上启动一个独立的集群变得容易。

Local 模式部署

Local 模式部署比较简单,需要配置 Java 环境变量和主节点:

  1. 进入 Spark 安装目录下的 conf 目录
  2. spark-env.sh.template 文件为模版创建 spark-env.sh
  3. 修改 spark-env.sh
    export SPARK_MASTER_IP=${MASTER_IP}
    export JAVA_HOME=${JAVA_HOME_DIR}
  4. 版本验证,执行 spark-shell 进入 Spark 命令行模式,会输出 Spark 版本信息
    Welcome to
          ____              __
         / __/__  ___ _____/ /__
        _\ \/ _ \/ _ `/ __/  '_/
       /___/ .__/\_,_/_/ /_/\_\   version 2.1.1
          /_/
    
    Using Scala version 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101)
    

8080 端口可以访问 Master WebUI

提交任务,支持 FIFO 调度

./bin/spark-submit \
--master local[10] \
--class org.apache.spark.examples.SparkPi \
/home/hadoop/.../xxxx.jar

Standalone 模式部署

Standalone 模式部署流程:

  1. 与 Local 模式一样,创建并修改 spark-env.sh
  2. Spark 安装目录下创建 conf/slaves 文件,包括集群 Worker 节点的 hostname(每行一个)
  3. spark-env.shconf/slaves 拷贝到集群每一个节点上
  4. 配置 Master 节点免密登陆 Slave 机器
  5. 脚本依次启动 Master 和 Worker 节点
    sbin/start-master.sh
    sbin/start-slaves.sh
    sbin/start-all.sh
    sbin/stop-master.sh
    sbin/stop-slaves/sh
    sbin/stop-all.sh
    

提交任务

./bin/spark-submit \
--master spark://${MASTER_IP}:7077 \
--executor-memory 2G \
--executor-cores 2 \
--class org.apache.spark.examples.SparkPi \
/home/hadoop/.../xxxx.jar

Yarn 模式部署

Yarn 模式部署简要流程 #TODO

Spark 在 Yarn 上运行的方式有两种,可以在 --master 参数指定:yarn-cluster 模式会在集群中启动 Driver 程序,yarn-client 模式在客户端启动 Driver 程序。

./bin/spark-submit \
--master yarn-cluster
--class org.apache.spark.examples.SparkPi \
--num-executors 3 \
--driver-memory 2G \
--executor-memory 2G \
--executor-cores 2 \
/home/hadoop/.../xxxx.jar

注意:yarn-cluster 模式不会读取到本地文件(jar包),要使 SparkContext.addJar,命令行声明使用本地文件 --jars xxx.jar,xxxx.jar,jar包会一起发送给 Yarn 集群。

Spark 运行

前面介绍到 Spark 在集群上运行有两种模式:Driver 在集群中运行、Driver 在客户端运行。区别只在于 Driver 运行的机器,Driver 在客户端运行可以直接读取到客户端上的文件(jar)。

Spark 运行在 Standalone

Standalone 模式下,两种运行方式的架构:

Standalone

各个角色介绍如下:

  • Client,客户端进程,负责向集群提交任务
  • Master,Spark 集群主节点,接收 Client 提交的任务,通知 Worker 启动 Driver(可选) 和 Executor
  • Driver,Spark 作业的主进程,负责 DAG 图的构建、Stage 划分、Task 的管理和调度等。Driver 包括组件:DAGScheduler、TaskScheduler、ScheduleBackend
  • Executor,执行 Task 的进程

一个 Application 包含一个 Driver 和多个 Worker,每个 Worker 产生一个 Executor 进程,Executor 接收 Driver 的通知,可以运行多个 Task。

作业执行流程如下:

Standalone

  1. 客户端(Client)向 Master 提交 Application,Master 接收后向一个 Worker 发送消息,启动 Driver:启动 DriverRunner 线程,线程内启动 SchedulerBackend。
  2. Master 通知 Worker 启动 Executor:启动 Executor 线程,线程内启动 ExecutorBackend。启动后向 Driver 注册。
  3. Driver(SchedulerBackend)包含 DAGScheduler,根据用户程序生成执行计划,划分 Stage。每个 Stage 的 Task 保存在 TaskScheduler 中。
  4. ExecutorBackend 向 SchedulerBackend 汇报时把 TashScheduler 中的 Task 调度到 ExecutorBackend 执行。直到所有 Stage 执行完成结束。

故障处理

整个执行过程,Worker 节点定时向 Master 发送心跳,报告 Worker 上 Executor 的执行情况和机器资源、健康状态等。

如遇到一下故障:

  1. Worker 故障
    Worker 退出前会将 Worker 上的 Executor 杀掉,Master 可以通过心跳感应到 Worker 故障,通知给 Driver 移除 Worker 节点

  2. Executor 故障
    ExecutorRunner 汇报给 Worker,传递给 Master,Master 发送 LanuchExecutor 指令给 Worker 重新启动 Executor

  3. Master 故障
    通过 Zookeeper 搭建 Master HA 解决单点问题,一个作为 Active,其他作为 Standby,Active 节点故障能够及时切换

Spark 运行在 Yarn

Yarn 模式下,Driver 运行在集群中的架构(Driver 运行在 Client 参考 Standalone 模式):

Yarn

各个角色介绍如下:

  • Client,客户端进程,负责向集群提交任务
  • ResourceMaster,Yarn 集群资源管理主节点,接收 Client 提交的任务,通知 NodeManager 启动 SparkAppMaster 和 Executor
  • SparkAppMaster,相当于 Standalone 模式下的 Driver(ScheduleBackend),也包括 DAGScheduler 和 YARNScheduler
  • Executor,执行 Task 的进程,与 Standalone 模式下的 Executor 一样

作业执行流程如下:

Yarn

  1. 客户端(Client)向 ResourceManager 提交 Application,ResourceManager 接收后分配给一个 NodeManager(向 RM 汇报时),启动 SparkAppMaster
  2. SparkAppMaster 启动后,初始化作业,向 ResourceManager 申请资源,申请到资源后,SparkAppMaster 通过 RPC 通知 NodeManager 启动响应的 SparkExecutor
  3. SparkExecutor 向 SparkAppMaster 汇报状态,并完成分配的 Task
  4. SparkClient 通过 SparkAppMaster 获取作业的状态和进度

References:
《Spark 核心技术与高级应用》

Tags:

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注

4 − 3 =