前言
按照前面环境部署中所学习的,如果我们想要一个稳定的生产Spark环境,那么最优的选择就是构建:HA StandAlone集
群。
不过在企业中, 服务器的资源总是紧张的,许多企业不管做什么业务,都基本上会有Hadoop集群。也就是会有YARN集群。
对于企业来说,在已有YARN集群的前提下在单独准备Spark StandAlone集群,对资源的利用就不高。所以, 在企业中,多
数场景下,会将Spark运行到YARN集群中。
YARN本身是一个资源调度框架,负责对运行在内部的计算框架进行资源调度管理.。
作为典型的计算框架,Spark本身也是直接运行在YARN中,并接受YARN的调度的。
所以,对于Spark On YARN, 无需部署Spark集群,只要找一台服务器,充当Spark的客户端,即可提交任务到YARN集群中运行。
Spark On YARN 本质
Master角色由YARN的ResourceManager担任。
Worker角色由YARN的NodeManager担任。
Driver角色运行在YARN容器内 或 提交任务的客户端进程中
真正干活的Executor运行在YARN提供的容器内
Spark On YARN 需要环境
1、需要Yarn集群:已经安装了
2、需要Spark客户端工具, 比如spark-submit, 可以将Spark程序提交到YARN中
3、需要被提交的代码程序:,如spark/examples/src/main/python/pi.py此示例程序,或我们后续自己开发的Spark任务
Spark On YARN 部署
将spark安装包上传到 安装了YARN的机器上,解压。
在安装目录的conf目录下
mv spark-env.sh.template spark-env.sh
在spark-env.sh 以及 环境变量配置文件中即可
确保这两个配置要有
然后启动spark,执行bin目录下的pyspark
pyspark --master yarn
问题记录:因为虚拟机分配空间太小触发了 hadoop的安全模式,据网上信息,只要磁盘占用超过95%,hadoop就会进入安全模式,并且无法退出。在安全模式下,spark无法连接hadoop,并且hadoop里面的文件全部进入只读模式。
解决方法:
方法1: lsof -n | grep deleted
查看进程结束但是没有释放文件资源的进程,然后 kill -9 pid 杀死进程释放资源。
这个方法我他妈的杀了好多,还是不见好转。所以采取方法2,对磁盘进行扩容。原本采用的默认大小20G。
方法2:扩容虚拟机
https://blog.csdn.net/michaelcc00/article/details/127242856
亲测有效,lvextend -L +10G /dev/mapper/centos-root #扩展已有卷的容量
注意这步命令,在自己电脑上,10G,实际上只有9.9G,所以参数大于实际大小扩容不成功。注意你自己电脑的实际大小。如果参数大于实际大小,会出现提示。按照提示改一下大小就好。
最后,hadoop退出安全模式,spark正常连接虚拟机。
YARN的web UI界面中 ID和上图对应。
pyspark 交互式控制台客户端程序,就已经正常运行到YARN之中。