简述spark任务的调度原理_Apache Spark

简述spark任务的调度原理_Apache Spark本文主要根据平台用户平常提交的spark任务思考,调研引入Dr. Elephant, 通过阅读Dr 相关源码, 明白Dr 执行整体流程并对代码进行改造,适配我们的需求.最终转变为平台产品来对用户的Sp

[平台建设] Spark任务的诊断调优

背景

平台目前大多数任务都是Spark任务,用户在提交Spark作业的时候都要进行的一步动作就是配置spark executor 个数、每个executor 的core 个数以及 executor 的内存大小等,这项配置目前基本靠用户个人经验,在这个过程中,有的用户就会设置非常不合理,比如配置的内存非常大,实际上任务运行时所占用的内存极少. 基于此,希望能有工具来针对任务进行分析,帮助用户来监控和调优任务,并给出一些建议,使任务更加有效率,同时减少乱配资源影响其他用户任务运行的情况。

Dr. Elephant介绍

通过调研,发现一个开源项目 Dr. Elephant 基本与想要达成目标一致。

DR.Elephant 介绍:

Dr. Elephant is a job and flow-level performance monitoring and tuning tool for Apache Hadoop and Apache Spark

Dr功能介绍:

https://github.com/linkedin/dr-elephant/wiki/User-Guide

接下来就是需要了解下Dr的架构, 因为我们有些定制化的需求,所以需要了解下架构,以及阅读源码进行相关改造适配。

Dr. Elephant 的系统架构如下图。主要包括三个部分:

数据采集:数据源为 Job History

诊断和建议:内置诊断系统

存储和展示:MySQL 和 WebUI

TfzFXV.png

Dr.Elephant定期从Hadoop平台的YARN资源管理中心获取近期所有的任务,这些任务既包含成功的任务,也包含那些失败的任务。每个任务的元数据,例如任务计数器、配置信息以及运行信息都可以从Hadoop平台的历史任务服务端获取到。一旦获取到了任务的元数据,Dr.Elephant就基于这些元数据运行启发式算法,然后会产生一份该启发式算法对该任务性能的诊断报告。根据每个任务的执行情况,这份报告会为该任务标记一个待优化的严重性级别。严重性级别一共分为五级,报告会对该任务产生一个级别的定位,并通过级别来表明该任务中存在的性能问题的严重程度。

启发式算法具体要做的事情就是:

  • 获取数据
  • 量化计算打分
  • 将分值与不同诊断等级阈值进行比较
  • 给出诊断等级

源码解析与改造

首先我们要知道Dr整体的运行流程是怎么样的?

ThA5uj.md.png

因为我们只需要关注Spark任务,下面主要介绍下Spark指标如何采集?

上面我们已经知道Dr执行的大致流程, 我们只采集spark任务, 所以不用太多额外的代码和抽象.

只需要关键的几个步骤改造即可:

1.首先还是通过yarn api 获取执行的job, 我们只需要对ExecutorJob直接使用org.apache.spark.deploy.history.SparkFSFetcher#fetchData方法, 获取eventlog, 并对eventlog进行重放解析

  1. 将解析后的数据,获取相关需要的信息,直接写入mysql库

  2. 因为涉及连接hdfs,yarn 等服务,将hdfs-site.xml,core-site.xml等文件放置配置目录下

  3. 最终将程序改造成一个main方法直接运行的常驻进程运行

采集后的主要信息:

  • 采集stage相关指标信息
  • 采集app任务配置、executor个数、核数等,执行开始时间、结束时间、耗时等

改造后整体流程如下:

T4ibY8.png

规则平台进行配置, 有了采集数据, 根据规则对相关指标定级, 并以不同颜色区分展示,并给出相关诊断意见.

总结

本文主要根据平台用户平常提交的spark任务思考,调研引入Dr. Elephant, 通过阅读Dr 相关源码, 明白Dr 执行整体流程并对代码进行改造,适配我们的需求.最终转变为平台产品来对用户的Spark任务进行诊断并给出相关调优建议.

参考

https://engineering.linkedin.com/blog/2016/04/dr-elephant-open-source-self-serve-performance-tuning-hadoop-spark

https://github.com/linkedin/dr-elephant

https://blog.csdn.net/qq475781638/article/details/90247623

本文作者: chaplinthink, 关注领域:大数据、基础架构、系统设计, 一个热爱学习、分享的大数据工程师

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/5580.html

(0)
上一篇 2023-05-03
下一篇 2023-05-03

相关推荐

  • PostgreSQL 初探「建议收藏」

    PostgreSQL 初探「建议收藏」PostgreSQL 是我们经常选择的数据库之一。它不仅仅是关系型数据库,同时也添加了对JSON数据的支持、全文检索功能,以及其他扩展。 2020 年 2月的总排名为第四名,关系型数据库中排名第四名…

    2023-01-31
    149
  • MySQL篇「终于解决」

    MySQL篇「终于解决」2、Mysql 的技术特点是什么? Mysql 数据库软件是一个客户端或服务器系统,其中包括:支持各种客户端程序和库的多 线程 SQL 服务器、不同的后端、广泛的应用程序编程接口和管理工具。 3、He

    2023-03-07
    149
  • postgresql强制删除数据库

    postgresql强制删除数据库SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='db_name&#

    2023-03-01
    162
  • java结合email实现自动推送[通俗易懂]

    java结合email实现自动推送[通俗易懂]1、编写方法获取最新标题的最新的标题
    2、使用获取额标题进行模糊查询,查询出邮箱地址,标题名称
    3、使用email发送邮件

    2023-02-12
    176
  • 文件同步网盘数据会有遗失的风险吗?[通俗易懂]

    文件同步网盘数据会有遗失的风险吗?[通俗易懂]文件同步网盘数据会有遗失的风险吗?如果我们将自己的文件存储在文件同步网盘中,但是因为某些网盘自身存在某些问题或缺陷,会导致网盘中的数据丢失,同时又没有办法找回。那么我们存储的这些数据,也就永久的遗失…

    2023-04-11
    177
  • 如何基于LSM-tree架构实现一写多读

    如何基于LSM-tree架构实现一写多读一 前言 PolarDB是阿里巴巴自研的新一代云原生关系型数据库,在存储计算分离架构下,利用了软硬件结合的优势,为用户提供具备极致弹性、海量存储、高性能、低成本的数据库服务。X-Engine是阿里巴巴

    2023-05-03
    132
  • 聪明的数据库,如何减轻你的心智负担?[通俗易懂]

    聪明的数据库,如何减轻你的心智负担?[通俗易懂]从 4 月 11 日起,我们正式开启了主题为 《The Future of Database》的系列直播,经过前面三期直播,我们逐步为大家描绘了我们眼中未来数据库的模样。以下是第三期「聪明的数据库,…

    2023-02-23
    142
  • 倒序遍历Python

    倒序遍历Python在Python语言中,倒序遍历是一种非常常见的操作。倒序遍历Python有多种实现方式,包括倒序遍历数组、前序遍历二叉树、倒序遍历列表、range倒序遍历、vector倒序遍历、v-for倒序遍历、list倒序遍历、map倒序遍历、iterator倒序遍历、for循环倒序遍历等。在本文中,我们将从多个方面对倒序遍历Python做详细介绍,并给出代码示例。

    2024-07-19
    42

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注