导读 在大数据行业中数据量大、任务多的背景下,如何做智能化、自动化的异常任务识别和分析至关重要。本文就将分享OPPO大数据诊断平台的设计与实践。
全文目录:
1. 背景
2. 技术方案
3. 时间效果
4. 总结与规划

首先介绍一下OPPO大数据的现状。整体大数据的数据量已经超过了一亿,系统组件20+,整体离线任务达到百万级别,实时任务也有数千,整个公司的数据分析师和开发师超过了1000人。数据和任务的复杂情况也带来了系统级的复杂度,其中包括:
数据开发人员水平参差不齐,问题排查困难; 任务链路长,组件众多,运维复杂; 僵尸任务和不合理任务治理难度大;
现在业界有一些类似的开源产品,比如Dr. Elephant,它是Linkedin开发并开源的,主要用来提高开发人员的效率和增加集群任务调试的高效性。支持很多种计算引擎,例如Spark,Tez,MapReduce,同时也支持多种调度框架,比如Azkaban,Airflow等。并且能够形成分析报告,作为历史作业和工作流性能统计的指标。
通过我们的实践和测试,发现它存在一些不足之处。首先,它对于新版本的兼容性不够好;另外,支持的Spark诊断指标非常少,目前只有4个;诊断手段也相对较少;最后就是存在一些稳定性风险,因为它需要不断对Spark History的服务接口做频繁的调用,影响了整体的稳定性。
基于这样的背景,我们自研了一套大数据平台的任务诊断系统。
我们的平台具有以下一些特性:
首先,做到了非侵入式,即时诊断,无需修改已有的调度平台,即可体验诊断效果;
第二,支持OPPO自研调度平台以及多种主流开源调度平台,包括DolphinScheduler,Airflow等,并可进行工作流层面的异常诊断; 第三,在计算引擎和存储上面支持多版本的Flink、Hadoop、Spark; 第四,目前支持了40+ 离线和实时场景的异常类型判定,并仍在不断完善和丰富; 最后,支持自定义规则编写和异常阈值调整,可以针对不同场景自行调整。

外部系统适配层,将Yarn、调度器、计算引擎、集群状态、运行环境状态等指标收集到诊断系统当中; 诊断架构层,主要包括数据采集,元数据关联,数据模型标准化,异常检测以及诊断Portal模块; 底层是通用基础组件层。

首先是数据采集阶段,会将调度系统的DAG、用户、执行记录等工作流的元数据进行同步,在计算引擎采集Yarn、ResourceManager、Spark、Flink的元数据; 采集完成之后,会通过工作流的模式把各个组件的数据关联起来,并行成一个标准化的模型; 得到标准化模型之后,通过加载已有的知识库到标准模型,通过启发式规则,进行诊断和异常挖掘,并结合集群状态以及运行时状态做相关的分析,最终得到是否异常的结果。


平台提供了较为丰富的诊断类型,针对离线、实时任务的健康度诊断,目前支持了40+ 场景的异常类型判定。整体上可分为四大方面:
效率分析方面,包括长尾Task分析、HDFS卡顿分析、推测执行过多分析,以及全局排序异常分析等;
稳定性分析方面,例如全表扫描问题、数据倾斜分析、Shuffle失败分析、内存溢出等;
实时作业分析,支持作业TM空跑、并行度不足、反压算子和慢算子的诊断等;
成本分析方面,包括CPU浪费分析、内存浪费分析、长期失败分析和任务耗时分析等。
3.效率分析案例

在效率分析方面,有一个长尾Task分析的案例。在整体的WEB界面可以明显看出哪些任务耗时是比较长的,拖慢了整个任务的运行时间。平台会给出一些分析和建议,比如是由于单个Task读取数据量过多或者读取数据过慢,如果读取数据量过多,可能是数据倾斜的问题,建议按照数据倾斜方式处理,如果是读取数据过慢,可能是HDFS集群节点负载过高或者是网络丢包等问题,可以联系运维相关同学进行进一步的排查。
4.成本分析案例


在稳定性分析方面,这里给出了一个数据倾斜分析的案例。数据倾斜是Task计算过程中Key分布不均造成的,个别Key的数据特别多,超出计算节点的计算能力,会导致内存溢出,计算资源利用率低,整体作业超时的问题。我们基于自身大量数据处理的经验,对如何处理这种问题进行了总结,如上图中所示。如果发现数据倾斜的异常,会给出相应的处理建议,结合业务方具体的任务去选择恰当的处理方式。

还有一些SQL的常见问题分析。比如没有权限、表不存在、语法错误等,因为我们在任务上线的时候会做一些SQL的校验,但是在运行过程中会出现权限失效,或者是表被修改了等等问题。我们也能够非常明确地给出问题和解决方法,比如重新去申请相应权限,或者修改SQL和表结构等。


总结与规划

为了回馈开源社区,并且希望更多人参与进来,共同解决任务诊断的痛点和难题,我们现在已经把一些功能做了开源的处理,项目名称叫做“罗盘”。上图中给出了Github地址和微信群,大家有兴趣可以关注一下。
开源的版本主要支持DolphinScheduler和Airflow两种主流调度平台;同时支持多版本Spark、Hadoop 2.0和3.0任务日志诊断和解析;目前支持14种异常诊断类型;同时支持各种日志匹配规则编写和异常阈值调整,可自己根据实际场景进行优化。
05
问答环节
Q1:CPU浪费是如何计算出来的?
Q2:请问这里面的诊断是如何实现智能化的?使用的是一些什么样的模型?


分享嘉宾
INTRODUCTION

戴巍

OPPO

数据平台架构师

目前在OPPO数据智能中心负责数据平台效能、交互式分析引擎等。




