背景

平台目前大多数任务都是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

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

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

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

源码解析与改造

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

因为我们只需要关注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个数、核数等,执行开始时间、结束时间、耗时等

改造后整体流程如下:

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

总结

本文主要根据平台用户平常提交的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

[平台建设] Spark任务的诊断调优的更多相关文章

  1. 【原创 Hadoop&Spark 动手实践 8】Spark 应用经验、调优与动手实践

    [原创 Hadoop&Spark 动手实践 7]Spark 应用经验.调优与动手实践 目标: 1. 了解Spark 应用经验与调优的理论与方法,如果遇到Spark调优的事情,有理论思考框架. ...

  2. Spark面试题(八)——Spark的Shuffle配置调优

    Spark系列面试题 Spark面试题(一) Spark面试题(二) Spark面试题(三) Spark面试题(四) Spark面试题(五)--数据倾斜调优 Spark面试题(六)--Spark资源调 ...

  3. 【Spark】Sparkstreaming-性能调优

    Sparkstreaming-性能调优 Spark Master at spark://node-01:7077 sparkstreaming 线程 数量_百度搜索 streaming中partiti ...

  4. Spark 常用参数及调优

    spark streaming 调优的几个角度: 高效地利用集群资源减少批数据的处理时间 设置正确的批容量(size),使数据的处理速度能够赶上数据的接收速度 内存调优 Spark SQL 可以通过调 ...

  5. spark submit参数及调优

    park submit参数介绍 你可以通过spark-submit --help或者spark-shell --help来查看这些参数.   使用格式:  ./bin/spark-submit \   ...

  6. 013 Spark中的资源调优

    1.平常的资源使用情况 2.官网 3.资源参数调优 cores memory JVM 4.具体参数 可以在--conf参数中给定资源配置相关信息(配置的一般是JVM的一些垃圾回收机制) --drive ...

  7. 【Spark】Spark-性能调优-系列文章

    Spark-性能调优-系列文章 Spark Master at spark://node-01:7077 scala java8_百度搜索 (1 封私信)如何评价Linkedin决定逐渐减少Scala ...

  8. Spark(十)Spark之数据倾斜调优

    一 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作 ...

  9. spark submit参数及调优(转载)

    spark submit参数介绍 你可以通过spark-submit --help或者spark-shell --help来查看这些参数. 使用格式:  ./bin/spark-submit \ -- ...

随机推荐

  1. jenkins之分布式

    在jenkins的slave节点安装jdk(注:slave节点不需要安装jenkins) #:安装jdk环境 root@ubuntu:/usr/local/src# ls jdk-8u191-linu ...

  2. Vue重要知识

    Event Bus 总线 Vue中的EventBus是一种发布订阅模式的实践,适用于跨组件简单通信. Vuex也可以用来组件中进行通信,更适用于多组件高频率通信. 使用方式: 1.把Bus注入到Vue ...

  3. highchars操作集合

    一.tooltip 与鼠标指针的距离想调整tooltip和鼠标指针的距离,官方api 和中文api中都没写,只有轴 label.distance . 但我觉得应该有这个,看源码果然有 tooltip ...

  4. get请求url参数中有+、空格、=、%、&、#等特殊符号的问题解决

    url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...

  5. linux环境centos

    qhost:查看集群 投送到集群qsub -l vf=2G,p=1 work.sh -cwd -V all_section_run.sh 杀死任务 qdel  id qstat -u \* |less ...

  6. 9.Vue.js 监听属性

    本章节,我们将为大家介绍 Vue.js 监听属性 watch,我们可以通过 watch 来响应数据的变化. 以下实例通过使用 watch 实现计数器: <div id = "app&q ...

  7. Abp Vnext 替换Redis的实现为csredis

    Host项目安装csredis的nuget包和data protect包并 移除 Microsoft.Extensions.Caching.StackExchangeRedis Microsoft.A ...

  8. 【代码优化】List.remove() 剖析

    一.犯错经历 1.1 故事背景 最近有个需求大致的背景类似: 我已经通过一系列的操作拿到一批学生的考试成绩数据,现在需要筛选成绩大于 95 分的学生名单. 善于写 bug 的我,三下五除二完成了代码的 ...

  9. 【划重点】Python xlwt简介和用法

    一.导入xlwt包,并初始化创建一个工作簿 import xlwt workbook=xlwt.Workbook() # 初始化创建一个工作簿 二.创建表单 sheet1=workbook.add_s ...

  10. android 使用 perfetto 抓取atrace

    最近项目的原因需要抓自定义的一些atrace,发现使用google 自带的systrace python脚本抓出来的log使用chrome已经打不开了. 想着用用比较时髦的perfetto吧,发现无论 ...