title: Spark之yarn模式 #标题tags: spark #标签
categories: Hadoop # 分类
date: 2021-01-20
spark的独立部署模式(Standalone)模式由spark自身提供计算资源,无需其他框架提供资源。这种方式降低了和第三方资源框架的耦合性,独立性很强,但spark主要是一个计算框架,而不是资源调度框架,所以本身提供的资源调度并不是它的强项,所以还是通过yarn来提供资源调度比较靠谱一些。
这里部署的spark之yarn模式,也将依托于zookeeper实现spark的高可用,zookeeper的话,可以复用其他的zookeeper集群,这里就复用yarn高可用所需的zookeeper集群了。
环境准备
在开始下面的博文之前,需要先参考Hadoop HDFS之HA集群部署博文,将hdfs和yarn部署完成。
要注意的地方:
- spark的Master和hdfs的NameNode、Yarn的ResourceManager最好在同一台机器;
- spark的Worker和hdfs的DataNode、Yarn的NodeManager在同一台机器;
部署及配置spark
由于是基于其他博文进行配置的,所以主机名解析相关,请自行发挥,按照自己的实际情况去更改,需要注意的就是,你spark的master角色所在的主机名,必须所有节点可解析,注意,是你master主机的真实主机名,否则会造成集群无法启动。
我这里复用hdfs集群中的三个节点,主机名依次为:work01、work02、work03。这三个也是spark中的work节点,并且work01和work02也是master。
如下操作在work01进行配置即可。
$ wget https://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-3.0.1/spark-3.0.1-bin-hadoop3.2.tgz
$ tar zxf spark-3.0.1-bin-hadoop3.2.tgz -C /apps/usr/
$ cd /apps/usr/spark-3.0.1-bin-hadoop3.2/conf/
# spark.eventLog.dir是指定历史服务器在hdfs上的存储路径
$ cat >> spark-defaults.conf << EOF
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop02:9000/history
spark.yarn.historyServer.address=work03:18080
spark.history.ui.port=18080
EOF
# 指定的hdfs路径需要提前存在
$ hdfs dfs -mkdir /history
# spark.deploy.zookeeper.url是指定zookeeper的IP或可解析的主机名
$ cat >> spark-env.sh << EOF
export JAVA_HOME=/apps/usr/jdk
export SPARK_HISTORY_OPTS="
-Dspark.history.ui.port=18080
-Dspark.history.fs.logDirectory=hdfs://hadoop02:9000/history
-Dspark.history.retainedApplications=30"
SPARK_MASTER_WEBUI_PORT=8989
export SPARK_DAEMON_JAVA_OPTS="
-Dspark.deploy.recoveryMode=ZOOKEEPER
-Dspark.deploy.zookeeper.url=work01,work02,work03
-Dspark.deploy.zookeeper.dir=/spark"
EOF
# slaves文件中指定所有work节点名称
$ cat > slaves << EOF
work01
work02
work03
EOF
# 将修改好的配置文件分发到其他节点
$ for i in work02 work03;do rsync -az /apps/usr/spark-3.0.1-bin-hadoop3.2 ${i}:/apps/usr/;done
启动spark集群
# 在work01启动所有
$ /apps/usr/spark-3.0.1-bin-hadoop3.2/sbin/start-all.sh
# 从输出中可以看出来,只是本机启动了master,另一个master并没有启动
starting org.apache.spark.deploy.master.Master, logging to /apps/usr/spark-3.0.1-bin-hadoop3.2/logs/spark-root-org.apache.spark.deploy.master.Master-1-master01.out
work02: starting org.apache.spark.deploy.worker.Worker, logging to /apps/usr/spark-3.0.1-bin-hadoop3.2/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-master02.out
work03: starting org.apache.spark.deploy.worker.Worker, logging to /apps/usr/spark-3.0.1-bin-hadoop3.2/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-lv.out
work01: starting org.apache.spark.deploy.worker.Worker, logging to /apps/usr/spark-3.0.1-bin-hadoop3.2/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-master01.out
# 到work02启动另一个master
$ /apps/usr/spark-3.0.1-bin-hadoop3.2/sbin/start-master.sh
验证集群
# 提交应用
$ cd /apps/usr/spark-3.0.1-bin-hadoop3.2/
bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
--deploy-mode cluster \
./examples/jars/spark-examples_2.12-3.0.1.jar \
10
看到如下输出,则表明没有问题:
可以根据输出信息的提示,访问下yarn的8088端口,查看作业记录,如下: