spark安装与运行模式

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

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)


    image.png

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

Cluster 模式

image.png

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)进行交互,完成这个分布式任务。

spark standalone 模式

进入spark安装目录下的conf文件夹
[atguigu@hadoop102 module]cd spark/conf/ 2)修改配置文件名称 [atguigu@hadoop102 conf] mv slaves.template slaves
[atguigu@hadoop102 conf]mv spark-env.sh.template spark-env.sh 3)修改slave文件,添加work节点: [atguigu@hadoop102 conf] vim slaves

hadoop102
hadoop103
hadoop104
4)修改spark-env.sh文件,添加如下配置:
[atguigu@hadoop102 conf]$ vim spark-env.sh

SPARK_MASTER_HOST=hadoop102
SPARK_MASTER_PORT=7077

5)分发spark包
[atguigu@hadoop102 module]xsync spark/ 或者scp 6)启动 [atguigu@hadoop102 spark] sbin/start-all.sh

注意:如果遇到 “JAVA_HOME not set” 异常,可以在sbin目录下的spark-config.sh 文件中加入如下配置:
export JAVA_HOME=XXXX

官方求PI案例
spark-submit
--class org.apache.spark.examples.SparkPi
--master spark://server-2:7077
--executor-memory 1G
--total-executor-cores 2
/home/xxx/software/spark-2.4.4-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.4.jar
100

启动spark shell

spark-shell
--master spark://server-2:7077
--executor-memory 1g
--total-executor-cores 2

spark-shell --master spark://server-2:7077 --executor-memory 1g --total-executor-cores 2

参数:--master spark://server-2:7077指定要连接的集群的master

Yarn模式(重点)

Spark客户端直接连接Yarn,不需要额外构建Spark集群。有yarn-client和yarn-cluster两种模式,主要区别在于:Driver程序的运行节点。
yarn-client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
yarn-cluster:Driver程序运行在由RM(ResourceManager)启动的AP(APPMaster)适用于生产环境。


image.png

安装使用
1)修改hadoop配置文件yarn-site.xml,添加如下内容:

[atguigu@hadoop102 hadoop]$ vi yarn-site.xml
        <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
        <property>
                <name>yarn.nodemanager.pmem-check-enabled</name>
                <value>false</value>
        </property>
        <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
        <property>
                <name>yarn.nodemanager.vmem-check-enabled</name>
                <value>false</value>
        </property>

2)修改spark-env.sh,添加如下配置:
[atguigu@hadoop102 conf]$ vi spark-env.sh

YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
3)分发配置文件
[atguigu@hadoop102 conf]xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml [atguigu@hadoop102 conf] xsync spark-env.sh
4)执行一个程序
spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode client
/home/xxx/software/spark-2.4.4-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.4.jar
100
注意:在提交任务之前需启动HDFS以及YARN集群。

日志查看

修改配置文件spark-defaults.conf
添加如下内容:
spark.yarn.historyServer.address=server-2:18080
spark.history.ui.port=18080
2)重启spark历史服务
[atguigu@hadoop102 spark]sbin/stop-history-server.sh stopping org.apache.spark.deploy.history.HistoryServer [atguigu@hadoop102 spark] sbin/start-history-server.sh
starting org.apache.spark.deploy.history.HistoryServer, logging to /opt/module/spark/logs/spark-atguigu-org.apache.spark.deploy.history.HistoryServer-1-hadoop102.out
3)提交任务到Yarn执行
spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode client
/home/xxx/software/spark-2.4.4-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.4.4.jar
100

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. spark三种分布式部署模式 Spark支持的主要的三种分布式部署方式分别是standalone、spark...
    ZPPenny阅读 13,451评论 0 5
  • spark支持standlone、yarn、mesos等多种运行模式,其中standlone模式主要用于线下环境的...
    落月摇情满江树月阅读 11,407评论 0 7
  • 本文主要分以下章节: 一、Spark专业术语定义 二、 Spark的任务提交机制 一、Spark专业术语定义 1、...
    数据萌新阅读 3,211评论 0 0
  • Scala语法 至于scala语法而言,大致上和Java的语法类似,增加了一些函数式编程,具体语法可以参考Scal...
    卡卡xx阅读 8,105评论 0 1
  • 本文主要分以下章节: 一、Spark专业术语定义 二、 Spark的任务提交机制 一、Spark专业术语定义 1、...
    小猪Harry阅读 2,563评论 0 1