Spark On Yarn部署
本文使用的软件环境同第一篇,另增加了hadoop的环境:
- Linux 4.4.0-62-generic #83-Ubuntu x86_64 GNU/Linux
- java version "1.8.0_101" Java(TM) SE Runtime Environment (build 1.8.0_101-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
- Spark 2.1.0 built for Hadoop 2.7.3
- Hadoop 2.7.3
另外扯一句题外话,由于hadoop体系的复杂,我会从最简单的层级来配置,多余的配置项不会列出。
所有机器的jdk、spark、hadoop版本,目录位置都相同。
1 hadoop配置
配置的基础是集群主机到从机的无密码ssh登录,spark需要hdfs和yarn集群同时运行。在官方文档上一句话提及了这一点:
These configs are used to write to HDFS and connect to the YARN ResourceManager.
这是一个坑,很多文章都没有强调hdfs集群配置的重要性。
1.1 hadoop核心配置
这一步主要参考Hadoop集群配置官方文档。
进入<HADOOP_DIR>/etc/hadoop/
目录,为了让hadoop系列服务能够启动,首先需要修改hadoop-env.sh
文件,指定JDK的目录所在。JAVA_HOME
这个变量如果在.bashrc
中export
了,hadoop执行脚本时还是不行的,所以要在hadoop自己的配置文件中指定。无论主从机都需要。
接着修改hadoop的一些核心配置,修改同目录下的core-site.xml
文件,指定hdfs的NameNode的位置:
这个配置也是主从机都需要的。
1.2 hdfs集群配置
接着配置hdfs集群,需要修改同目录下的hdfs-site.xml
文件,这个主从机有所不同,对于namenode,需要指定namenode存放文件的路径:
对于datanode,需要指定datanode存放文件的路径:
然后需要在各个机器上建立好指定的目录。
修改同目录下的slaves文件,将从机名称一机一行写入。
在主机<HADOOP_DIR>下执行Name Node的初始化及集群的启动脚本:
./bin/hdfs namenode -format
./sbin/start-dfs.sh
需要检验一下hdfs集群是否成功,这里再次说明,不要相信jps的输出,即便jps的输出完备,各种角色都列出了,也不一定说明集群能正常运行了,只有从web控制台看到主从机的信息才算配置正常了。
hdfs的默认web端口在50070,用浏览器访问Name Node的50070端口就可以看到结果:
Live Nodes
可以点开看每个slave机器的信息。
1.3 yarn集群配置
修改同目录下的yarn-site.xml
文件,设定yarn.resourcemanager.hostname
为Resource Manager主机名,主从机都需要:
在主机<HADOOP_DIR>下执行Yarn的启动脚本
./sbin/start-yarn.sh
yarn的web控制台默认端口是8088,访问Resouce Manager所在主机的8088端口就可以看到yarn的集群情况:
2 spark配置
修改<SPARK_DIR>/conf目录下的spark-env.sh
文件,将HADOOP_CONF_DIR
变量指定到hadoop配置文件目录并导出。
这个配置的修改是所有spark所在主机都要的。
由于之前已经搭建过了独立模式的集群,也为了控制台执行spark命令行时少输入点参数,还需要修改同目录下的
spark-defaults.conf
文件,将spark.master
指定为yarn
,同时修改默认的部署方式,将spark.submit.deployMode
指定为cluster
。这个修改也要应用到所有的spark中:3 运行
在集群中任意机器上执行以下测试看看结果:
在spark-submit运行过程中,yarn的web控制台
Applications
界面会进行展示:点击
Tracking UI
栏中的链接,就可以看到熟悉的spark作业运行界面,这个界面只有spark作业运行期可以看到。如果需要中止运行,需要在yarn的web控制台
Applications
界面通过Application ID一列中的链接进入Application的详情界面,在左上角有个Kill Application
按钮: