Spark的On Yarn集群模式部署及参数详解

Spark的On Yarn集群模式部署

  • 官方文档
    http://spark.apache.org/docs/latest/running-on-yarn.html

准备工作

  • 安装启动Hadoop(需要使用HDFS和YARN)
  • 安装单机版Spark
    这里不需要启动集群,因为把Spark程序提交到YARN运行本质上就是把字节码给YARN集群上的JVM运行,但是有一个东西帮我们把任务提交上到YARN,所以需要一个单机版的Spark,里面有spark-shell命令 - spark-submit
  • 修改配置
    在spark-env.sh ,添加HADOOP_CONF_DIR配置,指明了hadoop的配置文件的位置
    vim /export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/conf/spark-env.sh
    添加
# hadoop安装目录下的etc/hadoop路径
export HADOOP_CONF_DIR=/export/servers/hadoop/etc/hadoop

ON YARN的两种模式

在讲解on yarn的两种模式之前,我们先来看一下spark-shell中的参数有哪些?

spark-shell

spark-shell是Spark自带的交互式Shell程序,该命令下可以用scala编写spark程序
spark-shell可以携带的参数:

  • spark-shell --master local[N] 数字N表示在本地模拟N个线程来运行当前任务
  • spark-shell --master local[*] 表示使用当前机器上所有可用的资源默认不携带参数就是–master local[]
  • spark-shell --master spark://node01:7077,node02:7077 表示运行在集群上

spark-submit

spark-submit命令用来提交jar包给spark集群/YARN
示例:计算Π

/export/servers/spark/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://node01:7077  \
--executor-memory 1g \
--total-executor-cores 2 \
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/jars/spark-examples_2.11-2.2.0.jar \
10

参数总结

Master形式 解释
local 本地以一个worker线程运行(例如非并行的情况)
local[N] 本地以K worker 线程 (理想情况下, N设置为你机器的CPU核数)
local[*] 本地以本机同样核数的线程运行
spark://HOST:PORT 连接到指定的Spark standalone cluster master. 端口是你的master集群配置的端口,缺省值为7077
mesos://HOST:PORT 连接到指定的Mesos 集群. Port是你配置的mesos端口, 默认5050. 或者使用ZK,格式为 mesos://zk://…
yarn-client 以client模式连接到YARN cluster. 集群的位置基于HADOOP_CONF_DIR 变量找到
yarn-cluster 以cluster模式连接到YARN cluster. 集群的位置基于HADOOP_CONF_DIR 变量找到

其他参数示例:

参数 解释
- -master spark://node01:7077 指定 Master 的地址
- -name “appName” 指定程序运行的名称
- -class 程序的main方法所在的类
- -jars xx.jar 程序额外使用的 jar 包
- -driver-memory 512m Driver运行所需要的内存, 默认1g
- -executor-memory 2g 指定每个 executor 可用内存为 2g, 默认1g
- -executor-cores 1 指定每一个 executor 可用的核数
- -total-executor-cores 2 指定整个集群运行任务使用的 cup 核数为 2 个
- -queue default 指定任务的对列
- -deploy-mode 指定运行模式(client/cluster)

注意:

  • 如果 worker 节点的内存不足,那么在启动 spark-submit的时候,就不能为 executor分配超出 worker 可用的内存容量。
  • 如果- -executor-cores超过了每个 worker 可用的 cores,任务处于等待状态。
  • 如果- -total-executor-cores即使超过可用的 cores,默认使用所有的。以后当集群其他的资源释放之后,就会被该程序所使用。
  • 如果内存或单个 executor 的 cores 不足,启动 spark-submit 就会报错,任务处于等待状态,不能正常执行。

cluster模式

Spark On Yarn的Cluster模式指的是Driver程序运行在Yarn集群上

补充:Driver是什么?
运行应用程序的main()函数并创建SparkContext的进程

Spark的On Yarn集群模式部署及参数详解_第1张图片
示例

/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/jars/spark-examples_2.11-2.2.0.jar \
10
  • 查看界面
    http://node01:8088/cluster
    Spark的On Yarn集群模式部署及参数详解_第2张图片

client模式

Spark On Yarn的Client模式 指的是Driver程序运行在提交任务的客户端
Spark的On Yarn集群模式部署及参数详解_第3张图片

示例

/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode client \
--driver-memory 1g \
--executor-memory 1g \
--executor-cores 2 \
--queue default \
/export/servers/spark-2.2.0-bin-2.6.0-cdh5.14.0/examples/jars/spark-examples_2.11-2.2.0.jar \
10

两种模式的区别

Cluster和Client模式最本质的区别是:Driver程序运行在哪里!
运行在YARN集群中就是Cluster模式,
运行在客户端就是Client模式
当然还有由本质区别延伸出来的区别,面试的时候能简单说出几点就行

  • cluster模式:生产环境中使用该模式
  1. Driver程序在YARN集群中
  2. 应用的运行结果不能在客户端显示
  3. 该模式下Driver运行ApplicationMaster这个进程中,如果出现问题,yarn会重启ApplicattionMaster(Driver)
  • client模式:
  1. Driver运行在Client上的SparkSubmit进程中
  2. 应用程序运行结果会在客户端显示

你可能感兴趣的:(Spark,hadoop,spark,大数据)