-
sprk on yarn 概述及使用
(0)spark 资源管理 G3-平头哥
Spark支持Yarn,Mesos,Standalone三种集群部署模式,它们的共同点:Master服务(Yarn ResourceManager,Mesos master,Spark standalone)来决定哪些应用可以运行以及在哪什么时候运行,Slave服务(Yarn NodeManger)运行在每个节点上,节点上实际运行着Executor进程,此外还监控着它们的运行状态以及资源的消耗
(1)spark on yarn 模式
用过hadoop的都知道,YARN是集群的资源管理系统,spark on yarn 就是spark 作业提交到集群上通过yarn 去调度,spark on yarn有两种模式,一种是cluster模式,一种是client模式;通常Yarn-Cluster适用于生产环境,而Yarn-Clientr更适用于交互,调试模式
(2) 提交作业 参数讲解
./bin/spark-submit --class org.apache.spark.examples.SparkPi \ #作业类名
--master yarn \ #spark模式
--deploy-mode cluster \ #spark on yarn 模式
--driver-memory 4g \ #每一个driver的内存
--executor-memory 2g \ #每一个executor的内存
--executor-cores 1 \ #每一个executor占用的core数量
--queue thequeue \ #作业执行的队列
examples/jars/spark-examples*.jar \ #jar包
10 #传入类中所需要的参数
(3) 简单测试测试(client 和 cluster 模式) G3-平头哥
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn \
/ruozedata/app/spark-2.3.1-bin-2.6.0-cdh5.7.5/examples/jars/spark-examples_2.11-2.3.1.jar \
3
./bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master yarn-cluster \
/ruozedata/app/spark-2.3.1-bin-2.6.0-cdh5.7.5/examples/jars/spark-examples_2.11-2.3.1.jar \
3
(4)注意的点
1.它每次提交作业的时候会把本地jar包和conf 文件打成zip 文件上传,这十分耗费资源,故而我们可以将spark jars放在一个 yarn可以访问到的目录中,具体做法如下:
vi spark-default.cong 添加
spark.yarn.jars hdfs://hostname:8020/sparkjar/*
保存生效,并将所有的spark jars上传至hdfs://hostname:9000/sparkjar/即可
2.在cluster mode 模式下,spark 驱动程序和客户端在不同的机器上运行,所以SparkContext.addJar 无法使用客户端本地 文件,用 --jars 指定jar包
3.关于yarn 的日志问题: 应用程序运行完之后,yarn-site.xml 里面配置 yarn.log-aggregation-enable=true (日志聚合)完后, 会把日志从本地上传到hdfs,从本地删除,用 yarn logs -applicationId <app ID> 来查看日志
(5) yarn 两种模式的区别 G3-平头哥
"宏观": driver 运行在客户端是 client 模式,driver 运行在application Master 中是 cluster 模式(面试题)
"微观" :client 和 cluster 区别:
1.运行在客户端,diver要和exector 通信频繁,网络请求太大;cluster 模式driver运行在AM里面的话,AM运行在 nodemanager 的 container 里面,它可能分散在不同节点上,现在属于在集群内部,网络通信请求自然就少很多了
2.driver 运行在本地,进程不能停,因为它要和exector 通信;另一种的话,当driver 提交完应用程序就可以退出了, 不需要一直启动
3.client 模式看日志在客户端可以看;cluster 模式则运行看不到日志
(6) sc.stop() 不管在哪里跑任务,如果不停,任务都会在incomplete页面里面,所以必须停,切记!!!!
- Spark-history 配置使用 G3-平头哥
- spark-defaults.conf配置: 里面添加:(启动日志服务 和 日志所在的hdfs目录)
spark.eventLog.enabled true
spark.eventLog.dir hdfs://hadoop01.com:8020/directory - spark-env.sh 配置:
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://hadoop000:8020/directory -Dspark.history.ui.port=7777" (运行历史服务的端口和目录,那个目录不存在需要自己创建)
spark.history.fs.cleaner.enabled = true (history-server的日志是否定时清除)
spark.history.fs.cleaner.interval = 1d (每一天会检查一下日志文件)
spark.history.fs.cleaner.maxAge = 7d (某个日志文件的生命周期为7d时,则会删除该日志文件)
spark.history.retainedApplications = 50 ([可选] 内存中保存Application历史记录的个数)
spark.history.fs.update.interval 默认值10秒 (刷新日志的时间,更短的时间可以更快检测到新的任务以及任务执行情况) - start-history-server.sh 打开7777 页面查看近期的任务信息
- REST API 的使用(最后加一个)
Spark源为了方便用户对任务做监控,从1.4版本启用Rest服务,用户可以通过访问地址,得到application的运行状态。
Spark的REST API返回的信息是JSON格式的,开发者们可以很方便地通过这个API来创建可视化的Spark监控工具。目前 这 个API支持正在运行的应用程序,也支持历史服务器。在请求URL都有/api/v1。比如,对于历史服务器来说,我们可以通过 http://:18080/api/v1 来获取一些信息,端口可以改;对于正在运行的Spark应用程序,我们可以通过 https:///api/v1来获取一些 信息。
主要用途: 通过rest服务,可以轻松对任务时长、stage等做监控,同时可以配合时间序列数据库,对集群各个任务做监控。
- 对于spark web UI界面的一些介绍大家可以看一下这个博客:spark wen UI界面介绍看这 里:https://blog.csdn.net/minge_se/article/details/79146737
作者不易,转载请注明地址:https://blog.csdn.net/zilianxiaozhu/article/details/82081325
G3-平头哥 谢谢!!!