Spark环境搭建(Hadoop YARN模式)

前言

按照前面环境部署中所学习的,如果我们想要一个稳定的生产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之中。
在这里插入图片描述

测试提交命令,提交一个py程序到spark中运行。使用官方提供的测试程序进行测试。examples/src/main/python/pi.py
还是 bin 目录下
spark-submit --master yarn …/examples/src/main/python/pi.py 100
执行结果截图:
在这里插入图片描述
在这里插入图片描述

两种提交方式测试成功


部署模式DeployMode

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程序运行在哪里。

  • Client模式:学习测试时使用,生产不推荐(要用也可以,性能略低,稳定性略低)
    1.Driver运行在Client上,和集群的通信成本高
    2.Driver输出结果会在客户端显示
  • Cluster模式:生产环境中使用该模式
    1.Driver程序在YARN集群中,和集群的通信成本低
    2.Driver输出结果不能在客户端显示
    3.该模式下Driver运行ApplicattionMaster这个节点上,由Yarn管理,如果出现问题,yarn会重启ApplicattionMaster(Driver)

总结:
SparkOnYarn本质?

  • Master由ResourceManager代替
  • Worker由NodeManager代替
  • Driver可以运行在容器内(Cluster模式)或客户端进程中(Client模式)
  • Executor全部运行在YARN提供的容器内

Why Spark On YARN?
提高资源利用率, 在已有YARN的场景下让Spark收到YARN的调度可以更好的管控资源提高利用率并方便管理

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值