1.spark web ui
web ui(4040端口)也看的stages tab页面,展示job的运行情况,调优的时候需要跟进这个页面的去分析
但是 web ui 在job跑完或者sc.stop 之后,4040页面会关闭,无法访问
在spark的官网More -> Moniting页面(http://spark.apache.org/docs/latest/monitoring.html)有介绍History Server可以解决上面的问题
2.History Server参数配置
(1)spark-default.conf文件配置:
spark.eventlog.enabled=true (开启关联)
spark.histpry.fs.logDirectory (记录日志的目录)
spark.eventlog.dir hdfs://hd1:9000/spark-event-log (目录必须事先创建好)
spark.history.fs.update.interval (默认10s更新检测/spark-log目录下的文件内容变更)
spark.history.retainedApplicaions 50 ( 这个参数什么意思?自己查)
spark.evetlog.compress (默认不开启压缩,建议开启)
spark.io.compression.codec (默认是lz4压缩,不用改,直接用推荐的即可)
spark.io.compression.lz4.blocksize (默认是32k,太小,需要调大)
spark.history.ui.port (默认是18080)
spark.history.fs.cleaner.enable (开启日清理,默认是false)
spark.history.fs.cleaner.interval (默认1d检测一次)
spark.history.fs.cleaner.maxAge (清理7d前的日志)
本地测试的配置:
spark-defaults.conf文件
## 配置history server ## spark.eventLog.enabled true #是否压缩记录Spark事件,前提spark.eventLog.enabled为true,默认使用的是snappy spark.eventLog.compress true #Application在运行过程中所有的信息均记录在该属性指定的路径下 spark.eventLog.dir hdfs://hd1:9000/spark-event-log #Spark History Server页面只展示该指定路径下的信息 #spark.history.fs.logDirectory hdfs://hd1:9000/spark-event-log #该参数并不是也页面中显示的application的记录数,而是存放在内存中的个数,内存中的信息在访问页面时直接读取渲染既可; #比如说该参数配置了10个,那么内存中就最多只能存放10个applicaiton的日志信息,当第11个加入时,第一个就会被踢除, #当再次访问第1个application的页面信息时就需要重新读取指定路径上的日志信息来渲染展示页面。 #spark.history.retainedApplications 3 #以秒为单位,更新日志相关信息的时间间隔,默认是10s #spark.history.fs.update.interval 10 #history server的端口18080 #spark.history.ui.port 18081 #日志清理 #spark.history.fs.cleaner.enabled true #spark.history.fs.cleaner.interval 1d (默认是1天检测一次) #spark.history.fs.cleaner.maxAge 7d (默认清理超过7天的日志) #默认值:false,是否使用kerberos方式登录访问HistoryServer,对于持久层位于安全集群的HDFS上是有用的,如果设置为true,就要配置下面的两个属性 #spark.history.kerberos.enabled #默认值:用于HistoryServer的kerberos主体名称 #spark.history.kerberos.principal #用于HistoryServer的kerberos keytab文件位置 #spark.history.kerberos.keytab #默认值:false,授权用户查看应用程序信息的时候是否检查acl。如果启用,只有应用程序所有者和spark.ui.view.acls指定的用户可以查看应用程序信息;否则,不做任何检查 #spark.history.ui.acls.enable
(2)spark-env.sh文件配置
spark_history_opts ="-Dspark.history.fs.logDirectory=hdfs:///spark-event-log/" (展示和查看日志的地方) (注意:opts参数都是 java的参数,用-D指定,这里也可以支持多个目录,待测试)
本地测试:
spark-env.sh
SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs:///spark-event-log/ -Dspark.history.fs.cleaner.enabled=true"
(3)开启服务
sbin/start-history-server.sh (开启history服务)
(4)hadoop dfs -ls /spark-log/ 查看这个目录下,有incomplete何complete两种文件夹,分别对应 18080端口对应的web ui上的incomplete和complete两个展示项
- hdfs目录:
- historyServer的web 18080页面
*下面是complete的页面
*下面是incomplete的job
(5)spark-shell如果不调用sc.stop方法,直接ctrl+c推出,在History server上一直处于incomplete状态
本地的spark2.2版本 spark-shell --master yarn 命令直接ctrl+c退出,未复现这个问题(是否是低版本存在,待确认)
3.jps查看History的进程,然后ps -ef | grep 进程ID 查看进程
查看star-history-server.sh内容,查看HistoryServer源码(注:jps能看到的进程,都有源码里的main方法与之对应)
HistoryServer源码入口:
4.源码(spark2.2.0)里的ui包和web 8080页面下的Tab页对应
源码查找SparkUI类
5.spark也提供了rest api自定义监控
官网http://spark.apache.org/docs/latest/monitoring.html REST API部分 ,注意:18080端口是historyserver的(对应多个application),4040端口仅对应一个活着的application,
本地测试:
总结:
在测试时候发现个现象,测试流程: 使用spark-shell --master yarn 启动一个application
(1)如果spark.eventLog.compress 设为 false
此时在HistoryServer的180080页面incomplete下有这个application
而且hdfs目录/spark-event-log目录下的文本文件有内容,大小不是0
(2)如果spark.eventLog.compress 设为 true
此时在HistoryServer的180080页面incomplete下没有这个application
而且hdfs目录/spark-event-log目录下的lz4压缩文件没有内容,大小是0
(3)在(2)的集成上继续测试, 在启动的spark-shell中执行下面语句:
val rdd=sc.textFile("file:///root/1.txt") //执行完,文件大小还是0
rdd.count //执行完,文件才有内容,大小变为7.87kB
查看 .inprogress文件,头部几条数据和 不压缩时候的一样
翻阅源码:
HistoryServer相关的几个类文件
大体流程:
- HistoryServer 内部有一个cache, 缓存application信息,这个cache的大小是spark.history.retainedApplications参数的值,cache有淘汰机制
- HistoryServer.scala中有个provider.getAppUI 方法获取显示在18080页面上的ui信息,application的信息保存在内存或者磁盘上(由spark.history.store.path控制,默认内存),对应着KVStore.scala接口,元数据信息分别存在内存或LevelDB里
- 当文件变更后,getAppUI方法会根据存储的位置,重建ui对象信息,然后返回一个新的SparkUI对象,如下图所示:
相关推荐
7. 集成工具:Spark提供了一系列工具,如SparkSubmit用于提交应用,Spark History Server用于查看应用历史,以及Spark Web UI用于监控应用状态。 在下载并解压"spark-2.4.1-bin-hadoop2.6"压缩包后,用户通常会找到...
- 如果需要使用 Spark History Server 和其他自定义配置,还需要编辑 `spark-defaults.conf` 文件。 #### 五、分发安装文件 **1. 拷贝 Scala 和 Spark 到其他节点** - 使用 `scp` 命令将 Scala 和 Spark 的安装...
- **启动Spark History Server**:为了查看Spark作业的历史记录,需要启动Spark History Server。 - **提交应用**:使用`spark-submit`命令提交Spark应用程序,指定YARN为资源管理器。 5. **注意事项**: - **...
- 使用`./start-all.sh`和`./start-history-server.sh`启动Spark服务。 ##### 9. 查看Spark服务状态 - **访问地址**: 在浏览器中访问`http://localhost:8080/`来检查Spark服务的状态。 #### 二、Scala环境配置 #...
2. Spark History Server:启用Spark History Server,可以查看Spark作业的历史记录和日志。 六、优化技巧 1. 参数调优:根据集群资源和任务需求调整executor的数量、内存和CPU等参数。 2. 数据源和持久化:合理...
- 在Master节点上启动Spark的History Server,以便查看任务历史。 - 在集群中任意节点提交一个Spark应用,如`spark-submit --master yarn --class org.apache.spark.examples.SparkPi --deploy-mode cluster spark...
- 最后,启动Spark相关服务,如Spark History Server,如果需要,配置Spark on YARN。 8. **测试与优化** - 测试安装是否成功,可以上传文件到HDFS,运行Hadoop MapReduce作业,启动Hive会话,创建HBase表并插入...
在本文档中,我们使用 `start-all.sh` 和 `start-history-server.sh` 脚本来启动 Spark 集群。 五、HDFS 配置 在 Spark 分布式环境中,HDFS 是一种常用的分布式文件系统。在本文档中,我们使用 HDFS 来存储 Spark ...
- History Server (http://masterIP:18080):存储并展示完成的应用历史信息,需额外配置。 - HDFS UI (http://masterIP:50070):监控Hadoop文件系统的状态。 2. **工作负载数据集大小** 数据集大小应与硬件资源...
6. 启动 Spark 集群,包括 HistoryServer 和 Worker。 四、集群启动 在各节点上分别启动 Zookeeper、Hadoop 和 Spark 的相关服务。确保所有服务正常运行,可以通过相应的管理工具或命令行检查服务状态。 以上就是 ...
Spark提供了丰富的监控工具,如Spark UI、Spark History Server以及第三方工具如Ganglia、Prometheus和Grafana等,用于实时查看作业状态、资源使用情况、任务延迟等关键指标。 1. Spark UI:提供Web界面,展示正在...
10. **Spark工具和生态**:熟悉如SparkSubmit、Spark UI、Spark History Server等工具,以及与其他大数据工具(如Hive、Kafka、HDFS等)的集成。 总的来说,Spark是一个功能强大的大数据处理框架,涵盖了多个领域的...
10. **故障排查与监控**:如何利用Spark提供的工具进行应用监控和错误排查,如Spark UI、Spark History Server等。 本课程的两个部分可能分别侧重于基础理论和实践应用,帮助学员从理论到实践全面掌握Spark技术,并...
7. 调优工具:使用Spark UI和Spark History Server监控作业运行情况,分析瓶颈并进行优化。 8. 参数调优:根据具体场景调整Spark的各类参数,如`spark.executor.instances`、`spark.sql.shuffle.partitions`等。 ...
1. Spark History Server:查看作业历史,监控性能。 2. Spark UI:通过Web界面实时查看作业状态、Stage信息等。 总结,Spark for Python开发者不仅需要理解Spark的核心概念和API,还需要掌握如何在Python环境中...
3. Spark History Server:记录已完成作业的详细信息,便于后期分析。 六、问题排查 常见问题包括内存溢出、任务延迟、数据倾斜等,需通过日志分析、指标监控等手段定位问题,再结合上述优化手段进行调整。 七、...
- 同时,需要启动Hadoop的HistoryServer,`mr-jobhistory-daemon.sh start historyserver`。 11. **Oozie的Demo演示**: - 安装并运行Oozie自带的例子,例如Map-Reduce示例,首先解压`oozie-examples.tar.gz`,...
- **历史服务器**(History Server):用于存储和查询作业的历史记录。 - **流式处理任务**:流式处理任务对资源的需求更为动态,增加了管理难度。 - **优化资源使用的挑战**: - **资源估算**:与MapReduce相比...
配置Hadoop涉及修改`core-site.xml`(设置HDFS的默认名称节点)、`hdfs-site.xml`(定义副本数量和目录结构)以及`mapred-site.xml`(指定jobhistory服务器的端口,这里是10020,web端口为19888)。 四、Spark ...
此外,你还将学习如何使用Spark的监控工具,如Spark UI和Spark History Server,来跟踪和调试你的作业,确保其稳定运行。 至于课程中的设置问题,通常涉及到环境变量配置、依赖库安装、集群配置等。例如,你需要...