[平台建设] Spark任务的诊断调优
发布时间 - 2025-07-19 00:00:00 点击率:次背景
目前,平台上的大部分任
务都是Spark任务,用户在提交Spark作业时需要配置Spark executor的个数、每个executor的核心数以及executor的内存大小等。这些配置主要依赖于用户的个人经验,导致一些用户设置不合理,例如配置过大的内存,而实际任务运行时所需的内存却非常少。基于此,我们希望开发一个工具来分析任务,帮助用户监控和优化任务,并提供建议,使任务更加高效,同时减少资源配置不当对其他用户任务的影响。
通过调研,我们发现了一个开源项目Dr. Elephant,它的目标与我们的需求基本一致。
Dr. Elephant介绍:
Dr. Elephant是一款针对Apache Hadoop和Apache Spark的作业和流程级性能监控与调优工具。
Dr功能介绍:
更多详细信息请参考Dr. Elephant的用户指南:https://www./link/ee9a1fc09b64d5cdd17ba7b7f6640409
为了满足我们的一些定制化需求,我们需要了解Dr. Elephant的架构,并阅读其源码进行相关改造和适配。
Dr. Elephant的系统架构如下图所示,主要包括三个部分:
- 数据采集:数据源为Job History
- 诊断和建议:内置诊断系统
- 存储和展示:MySQL和WebUI
Dr. Elephant定期从Hadoop平台的YARN资源管理中心获取近期的所有任务,包括成功和失败的任务。每个任务的元数据(如任务计数器、配置信息和运行信息)可以从Hadoop平台的历史任务服务端获取。一旦获取到任务的元数据,Dr. Elephant会基于这些数据运行启发式算法,生成一份关于该任务性能的诊断报告。报告会根据任务的执行情况,为任务标记一个待优化的严重性级别。严重性级别分为五级,报告会对任务进行级别定位,并通过级别表明任务中存在的性能问题的严重程度。
启发式算法的主要任务包括:
- 获取数据
- 量化计算打分
- 将分值与不同诊断等级阈值进行比较
- 给出诊断等级
源码解析与改造
首先,我们需要了解Dr. Elephant的整体运行流程。
由于我们只关注Spark任务,下面主要介绍Spark指标的采集方式。
我们已经了解了Dr. Elephant执行的大致流程,因为只采集Spark任务,所以不需要太多额外的代码和抽象。关键的改造步骤如下:
- 通过YARN API获取执行的作业,只需要对ExecutorJob直接使用
org.apache.spark.deploy.history.SparkFSFetcher#fetchData方法,获取eventlog,并对eventlog进行重放解析。 - 将解析后的数据获取相关需要的信息,直接写入MySQL库。因为涉及连接HDFS、YARN等服务,需要将
hdfs-site.xml、core-site.xml等文件放置在配置目录下。 - 最终将程序改造成一个main方法直接运行的常驻进程。采集后的主要信息包括:
- 采集stage相关指标信息
- 采集app任务配置、executor个数、核数等,执行开始时间、结束时间、耗时等
改造后的整体流程如下:
在规则平台上进行配置,根据规则对相关指标定级,并以不同颜色区分展示,同时给出相关的诊断意见。
总结
本文主要基于平台用户平常提交的Spark任务进行思考,调研并引入Dr. Elephant。通过阅读Dr. Elephant的相关源码,理解其执行的整体流程,并对代码进行改造,适配我们的需求。最终将其转变为平台产品,用于对用户的Spark任务进行诊断并提供相关的调优建议。
参考资料:
- https://www./link/8d4965eaf92972d652fd44ece6f79533
- https://www./link/92f2c86007260e130e78c68fb7d800a1
- https://www./link/9a1a05c42c96b161ecd2884b758e114a
# mysql
# git
# apache
# 工具
# qq
# ai
# 架构
# yarn
# xml
# history
# github
# 算法
# hadoop
# spark
# hdfs
# https
# 系统架构
# 并对
# 都是
# 太多
# 不需要
# 只需
# 平台上
# 将其
# 所需
# 会对
# 资源配置
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用美橙互联一键搭建多站合一网站?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
使用C语言编写圣诞表白程序
如何打造高效商业网站?建站目的决定转化率
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
JavaScript Ajax实现异步通信
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
Laravel如何使用.env文件管理环境变量?(最佳实践)
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
,在苏州找工作,上哪个网站比较好?
Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
JS去除重复并统计数量的实现方法
如何在万网自助建站平台快速创建网站?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
Python正则表达式进阶教程_复杂匹配与分组替换解析
如何快速搭建个人网站并优化SEO?
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
如何在景安服务器上快速搭建个人网站?
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
利用 Google AI 进行 YouTube 视频 SEO 描述优化
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
如何用y主机助手快速搭建网站?
Laravel怎么实现搜索高亮功能_Laravel结合Scout与Algolia全文检索【实战】
EditPlus 正则表达式 实战(3)
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
C++用Dijkstra(迪杰斯特拉)算法求最短路径
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Laravel如何优化应用性能?(缓存和优化命令)
Laravel distinct去重查询_Laravel Eloquent去重方法
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Python3.6正式版新特性预览
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
EditPlus中的正则表达式实战(5)
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel如何使用withoutEvents方法临时禁用模型事件
利用vue写todolist单页应用
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程

