Spark常用三种运行模式

概述

  • Spark 的运行模式有 Local(也称单节点模式),Standalone(集群模式),Spark on Yarn(运行在Yarn上),Mesos以及K8s等常用模式,本文介绍前三种模式。

Spark-shell 参数

  • Spark-shell 是以一种交互式命令行方式将Spark应用程序跑在指定模式上,也可以通过Spark-submit提交指定运用程序,Spark-shell 底层调用的是Spark-submit,二者的使用参数一致的,通过- -help 查看参数:

    • -master: 指定运行模式,spark://host:port, mesos://host:port, yarn, or local[n].
    • -deploy-mode: 指定将driver端运行在client 还是在cluster.
    • -class: 指定运行程序main方法类名,一般是应用程序的包名+类名
    • -name: 运用程序名称
    • -jars: 需要在driver端和executor端运行的jar,如mysql驱动包
    • -packages: maven管理的项目坐标GAV,多个以逗号分隔
    • -conf: 以key=value的形式传入sparkconf参数,所传入的参数必须是以spark.开头
    • -properties-file: 指定新的conf文件,默认使用spark-default.conf
    • -driver-memory:指定driver端运行内存,默认1G
    • -driver-cores:指定driver端cpu数量,默认1,仅在Standalone和Yarn的cluster模式下
    • -executor-memory:指定executor端的内存,默认1G
    • -total-executor-cores:所有executor使用的cores
    • -executor-cores: 每个executor使用的cores
    • -driver-class-path: driver端的classpath
    • -executor-class-path:executor端的classpath
  • sparkconf的传入有三种方式:

    • 1.通过在spark应用程序开发的时候用set()方法进行指定
    • 2.通过在spark应用程序提交的时候用过以上参数指定,一般使用此种方式,因为使用较为灵活
    • 3.通过配置spark-default.conf,spark-env.sh文件进行指定,此种方式较shell方式级别低

Local模式

  • Local 模式是最简单的一种Spark运行方式,它采用单节点多线程(cpu)方式运行,local模式是一种OOTB(开箱即用)的方式,只需要在spark-env.sh导出JAVA_HOME,无需其他任何配置即可使用,因而常用于开发和学习
  • 方式:./spark-shell - -master local[n] ,n代表线程数

Standalone模式

  • Spark可以通过部署与Yarn的架构类似的框架来提供自己的集群模式,该集群模式的架构设计与HDFS和Yarn大相径庭,都是由一个主节点多个从节点组成,在Spark 的Standalone模式中,主,即为master;从,即为worker.
  • Standalone集群模式通过配置spark-env.sh和slaves文件来部署,可以通过以下配置

    1. vi spark-env.sh
    2. SPARK_MASTER_HOST=192.168.137.200 ##配置Master节点
    3. SPARK_WORKER_CORES=2 ##配置应用程序允许使用的核数(默认是所有的core)
    4. SPARK_WORKER_MEMORY=2g  ##配置应用程序允许使用的内存(默认是一个G)
    5. vi slaves
    6. 192.168.137.200
    7. 192.168.137.201
    8. 192.168.137.202
    
  • 启动集群

    1. sbin/start-all.sh
    

    Web UI:192.168.137.200:8080

Spark on Yarn

  • 简而言之,Spark on Yarn 模式就是将Spark应用程序跑在Yarn集群之上,通过Yarn资源调度将executor启动在container中,从而完成driver端分发给executor的各个任务。将Spark作业跑在Yarn上,首先需要启动Yarn集群,然后通过spark-shell或spark-submit的方式将作业提交到Yarn上运行。
  • 提交作业之前需要将HADOOP_CONF_DIR或YARN_CONF_DIR配置到Spark-env.sh中:

    1. vi spark-env.sh
    2. HADOOP_CONF_DIR=/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
    

on Yarn的俩种模式

  • Yarn的俩种模式:一种为 client;一种为 cluster,可以通过- -deploy-mode 进行指定,也可以直接在 - -master 后面使用 yarn-client和yarn-cluster进行指定
  • 俩种模式的区别:在于driver端启动在本地(client),还是在Yarn集群内部的AM中(cluster)

Client 模式

这里写图片描述

  • 客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和excutor,另外ApplicationMaster和executor都装在在container里运行,container默认的内存是1g,ApplicationMaster分配的内存是driver-memory,executor分配的内存是executor-memory.同时,因为Driver在客户端,所以程序的运行结果可以在客户端显示,Driver以进程名为SparkSubmit的形式存在。

Cluster 模式

这里写图片描述

  • 1.由client向ResourceManager提交请求,并上传Jar到HDFS上

    这期间包括四个步骤:

    a).连接到RM

    b).从RM ASM(applicationsManager)中获得metric,queue和resource等信息。

    c).upload app jar and spark-assembly jar

    d).设置运行环境和container上下文

  • 2.ResourceManager向NodeManager申请资源,创建Spark ApplicationMaster(每个SparkContext都有一个ApplicationManager)

  • 3.NodeManager启动Spark App Master,并向ResourceManager ASM注册

  • 4.Spark ApplicationMaster从HDFS中找到jar文件,启动DAGScheduler和YARN Cluster Scheduler

  • 5.ResourceManager向ResourceManager ASM注册申请container资源(INFO YarnClientImpl: Submitted application)

  • 6.ResourceManager通知NodeManager分配Container,这是可以收到来自ASM关于container的报告。(每个container的对应一个executor)

  • 7.Spark ApplicationMaster直接和container(executor)进行交互,完成这个分布式任务。

on Yarn 部分参数调优

  • spark.yarn.jars/spark.yarn.archive
    将本地jar包上传到hdfs,然后通过这个参数指定上传路径:

    1. [hadoop@hadoop001 spark-2.2.0-bin-2.6.0-cdh5.7.0]$ hdfs dfs -mkdir -p /spark/jars
    2. [hadoop@hadoop001 spark-2.2.0-bin-2.6.0-cdh5.7.0]$ hdfs dfs -put jars/ /spark/jars
    
    3. vi spark-defaults.conf
    4. spark.yarn.jars  hdfs:///spark/jars/*
    
  • spark.port.maxRetries 能够启动的最大程序数+1,根据实际业务设置
  • *

猜你喜欢

转载自blog.csdn.net/Realoyou/article/details/80398424
今日推荐