一. 准备工作
官方文档地址:http://spark.apache.org/docs/latest/running-on-yarn.html
1. 安装启动Hadoop(需要使用HDFS和YARN,已经ok)
此步如果不会的话,可以参考博主以往博文一文教你快速了解伪分布式集群搭建(超详细!)只需查看如何配置HDFS即可
2. 安装单机版Spark(不需要集群)
- 1. 把安装包上传到
/opt/software/
下 - 2. 解压文件到
/opt/module/
目录下
[bigdata@hadoop002 software]$ tar -zxvf spark-2.1.1-bin-hadoop2.7.tgz -C /opt/module
- 3. 复制刚刚解压得到的目录, 并命名为
spark-local
[bigdata@hadoop002 module]$ cp -r spark-2.1.1-bin-hadoop2.7 spark-local
注意
:不需要集群,因为把Spark程序提交给YARN运行本质上是把字节码给YARN集群上的JVM运行,但是得有一个东西帮我去把任务提交上个YARN,所以需要一个单机版的Spark,里面的有spark-shell命令,spark-submit命令
二. Yarn 模式概述
Yarn有 client 和 cluster 两种模式,主要区别在于:Driver 程序的运行节点不同。
- client:Driver程序运行在客户端,适用于交互、调试,希望立即看到app的输出
- cluster:Driver程序运行在由 RM(ResourceManager)启动的 AM(AplicationMaster)上,适用于生产环境。
1. cluster模式
在企业生产环境中大部分都是cluster部署模式运行Spark应用
Spark On YARN的Cluster模式 指的是Driver程序运行在YARN集群上
Driver是什么?
The process running the main() function of the application and creating the SparkContext
运行应用程序的main()函数并创建SparkContext的进程。
注意
:
之前我们使用的spark-shell
是一个简单的用来测试的交互式窗口,下面的演示命令使用的是spark-submit
用来提交打成jar包的任务
- 示例运行
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
./examples/jars/spark-examples_2.11-2.1.1.jar
100
上述标记的含义如下图:
2. client模式(学习测试的时候用)
Spark On YARN的Client模式 指的是Driver程序运行在提交任务的客户端
- 示例运行
bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode client
./examples/jars/spark-examples_2.11-2.1.1.jar 100
3. 两种运行方式的区别
Cluster和Client模式最最本质的区别是:Driver程序运行在哪里
其中,就直接的区别就是:
- 运行在YARN集群中就是Cluster模式,
- 运行在客户端就是Client模式
当然,还有由本质区别延伸出来的区别:
cluster模式
:生产环境中使用该模式
- Driver程序在YARN集群中
- 应用的运行结果不能在客户端显示
- 该模式下Driver运行ApplicattionMaster这个进程中, 如果出现问题,yarn会重启ApplicattionMaster(Driver)
client模式
:
- Driver运行在Client上的SparkSubmit进程中
- 应用程序运行结果会在客户端显示
三. 工作模式介绍
四. Yarn 模式配置
- 1. 修改 hadoop 配置文件 yarn-site.xml
由于咱们的测试环境的虚拟机内存太少, 防止将来任务被意外杀死, 配置所以做如下配置
代码语言:javascript复制<!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是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. 修改后分发配置文件
// copy到hadoop003
scp /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml hadoop003:/opt/module/hadoop-2.7.2/etc/hadoop/
// copy到hadoop004
scp /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml hadoop004:/opt/module/hadoop-2.7.2/etc/hadoop/
- 3. 修改
spark-evn.sh
文件名
[bigdata@hadoop002 spark]$ cd conf/
[bigdata@hadoop002 conf]$ mv spark-env.sh.template spark-env.sh
- 3.修改
spark-evn.sh
文件
SPARK_MASTER_HOST=hadoop002
SPARK_MASTER_PORT=7077
// 添加如下配置: 告诉 spark 客户端 yarn 相关配置
YARN_CONF_DIR=/opt/module/hadoop-2.7.2/etc/hadoop
// 如果是集群的话需要分发一下
[bigdata@hadoop002 spark]$ scp /opt/module/spark/conf/spark-env.sh hadoop003:/opt/module/spark/conf/
[bigdata@hadoop002 spark]$ scp /opt/module/spark/conf/spark-env.sh hadoop004:/opt/module/spark/conf/
五. 运行结果及查看
- 1.
client
模式
bin/spark-submit
--class org.apache.spark.examples.SparkPi
--master yarn
--deploy-mode client
./examples/jars/spark-examples_2.11-2.1.1.jar 100
UI
查看:
http://hadoop003:8088/cluster
- 2.
cluster
模式
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
./examples/jars/spark-examples_2.11-2.1.1.jar
100
本次的分享就到这里了