赞
踩
按照前面环境部署中所学习的,如果我们想要一个稳定的生产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安装包上传到 安装了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之中。
测试提交命令,提交一个py程序到spark中运行。使用官方提供的测试程序进行测试。examples/src/main/python/pi.py
还是 bin 目录下
spark-submit --master yarn …/examples/src/main/python/pi.py 100
执行结果截图:
两种提交方式测试成功
Spark On YARN是有两种运行模式的,一种是Cluster模式一种是Client模式。
这两种模式的区别就是Driver运行的位置。
Cluster模式即:Driver运行在YARN容器内部, 和ApplicationMaster在同一个容器内
Client模式即:Driver运行在客户端进程中, 比如Driver运行在spark-submit程序的进程中
Cluster模式:
Client模式:以spark-submit为例
两种模式比较:
Cluster模式 通讯效率更高。
但是Cluster模式中,spark产生的日志也是在容器内部,如果我们想要快速验证一些结果,在查询日志时就很不方便。在使用Client模式时,日志产生在本地,可以直接通过终端查看,查看日志更方便。
总体区别:
通过命令指定两种模式:
客户端模式:
# 假设在spark安装包的bin目录下
spark-submit --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --num-executors 3
--total-executor-cores 3 ../examples/src/main/python/pi.py 100
# deploy-mode 指定模式,不指定则默认客户端模式
# driver-memory 指定driver内存
# executor-memory 指定executor内存
# num-executors 指定executor数量,这里集群式三台虚拟机,所以可以指定3、6、9都行。指定为3 则每台机器开一个executor跑程序
# total-executor-cores 指定executor集群总共可以使用多少集群CPU核心,一般和数量对应
执行以上命令:日志都输出在 spark-submit的控制台,在driver的web监控界面,通过18080端口访问历史服务器可以看见,driver没有日志。
集群模式:
只需要将deploy-mode参数改为 cluster即可
spark-submit --master yarn --deploy-mode cluster --driver-memory 512m --executor-memory 512m --num-executors 3
--total-executor-cores 3 ../examples/src/main/python/pi.py 100
控制台没有输出结果,web界面有日志
Client模式和Cluster模式最最本质的区别是:Driver程序运行在哪里。
总结:
SparkOnYarn本质?
Why Spark On YARN?
提高资源利用率, 在已有YARN的场景下让Spark收到YARN的调度可以更好的管控资源提高利用率并方便管理
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。