一、布景

OPPO 大数据渠道现在有 20+个服务组件,数据量超 1EB,离线使命数近百万,实时使命数千,数据开发剖析师超千人。这也带来了体系复杂度的问题,一方面是用户常常对自己的使命运转状况“摸不着头脑”,不管是性能问题,还是参数装备问题,甚至是一些常见的权限报错问题,都需求咨询渠道给出详细的处理方案;另一方面是渠道面对各类繁杂使命,运维人员常常需求对使命毛病定位和排除,由于使命链路长,组件日志多,运维压力大。因而急需对使命进行实时监控和确诊,不只要能够帮助用户快速定位反常问题,还需给出详细的主张和优化方案,一起还能管理各类“僵尸”和不合理使命,然后到达降本增效的意图。据调研,现在业界尚无老练的开源使命确诊渠道。为此咱们开发了大数据确诊渠道,经过确诊渠道周优化使命实例数超 2 万,获得了杰出的效果。

“罗盘”(Compass)便是基于 OPPO 内部大数据确诊渠道的开源项目(项目地址:github.com/cubefs/comp…),可用于确诊 DolphinScheduler、Airflow 等调度渠道上所运转的大数据使命。咱们希望经过“罗盘”(Compass)回馈开源社区,也希望更多人参加进来,共同处理使命确诊的痛点和难题。

二、罗盘中心功用

罗盘现在已支撑以下功用和特性:

  • 非侵入式,即时确诊,无需修正已有的调度渠道,即可体会确诊效果。
  • 支撑多种主流调度渠道,例如 DolphinScheduler、Airflow 或自研等。
  • 支撑多版别 Spark、Hadoop 2.x 和 3.x 使命日志确诊和解析。
  • 支撑工作流层反常确诊,辨认各种失利和基线耗时反常问题。
  • 支撑引擎层反常确诊,包括数据歪斜、大表扫描、内存糟蹋等 14 种反常类型。
  • 支撑各种日志匹配规矩编写和反常阈值调整,可自行根据实践场景优化。

罗盘已支撑确诊类型概览:

OPPO 大数据诊断平台“罗盘”正式开源

(一)非侵入式,即时确诊

这儿以 DolphinScheduler 调度渠道为例。

OPPO 大数据诊断平台“罗盘”正式开源

从架构上看,MasterServer 首要担任 DAG 使命切分、使命提交监控并耐久化使命实例数据到 DB 中,WorkerServer 首要担任使命的履行和供给日志服务,一起在 UI 供给了查看长途日志的功用。为了能够获取使命元数据和相关日志进行确诊,一个方法是在 MasterServer 中监听使命状况事件,另一个方法是订阅 MySQL binlog 日志。为了减少对 DolphinScheduler 的修正,咱们采取了第二种方法。

因而只需求在 DolphinScheduler 创立一个工作流,并运转,等待运转结束,咱们便可在罗盘上看到该使命运转失利等反常。

OPPO 大数据诊断平台“罗盘”正式开源

罗盘不但完成了对调度渠道的解耦,还能在使命运转结束后即时确诊,一起供给了丰厚的 UI 展示服务。假如您不需求咱们供给的 UI 服务,那也可以直接查询罗盘确诊的元数据,展示在需求的地方。

(二)工作流层反常确诊

关于工作流层的使命实例,常见问题可分为两类:一类是失利的使命,例如首次失利、最终运转失利和长时刻失利;另一类是耗时反常的使命,例如基线时刻反常、基线耗时反常和运转耗时长。

  1. 确诊失利的使命

用户常常忽略首次失利,甚至加大重试次数,假如不注重,最终可能会演变为最终失利。罗盘记录和确诊剖析了每次失利的原因,不只可认为用户快速定位问题,还可以在毛病回溯时找到根因。关于长时刻失利的使命,需求通知用户整改或整理,避免形成资源糟蹋。

OPPO 大数据诊断平台“罗盘”正式开源
2. 确诊耗时反常的使命

针对需求 SLA 保证的使命,罗盘不只剖析了相关于历史正常结束时刻,是否提早结束或许晚点结束的使命,即基线时刻反常,也剖析了相关于历史正常运转时长,是否运转时刻过长或许过短的使命,即基线耗时反常。关于运转耗时长的使命,例如超过几个小时以上的大使命,用户和渠道都需求剖析是使命本身的问题,还是渠道的问题。

OPPO 大数据诊断平台“罗盘”正式开源

(三)Spark 引擎层反常确诊

关于 Spark 使命,常见的问题可以归为三类:一类是运转时报错,另一类是运转时功率,最终一类是资源运用率问题。

OPPO 大数据诊断平台“罗盘”正式开源

  1. 确诊运转时报错反常

引擎层常见报错有 sql 失利、shuffle 失利和内存溢出等。此类报错具有明显的日志特征,可根据要害字提取分类,运用已有的知识库,供给给用户详细的处理方案,提高用户体会和功率。

罗盘供给了 sql 失利日志剖析的规矩,通常涉及到操作权限,库表不存在及语法等问题,此类问题可直接指引用户去请求权限。

OPPO 大数据诊断平台“罗盘”正式开源

shuffle 问题会严重影响使命运转甚至导致失利,需求重点重视,假如您现在没有更好的处理方案,也可以参阅 OPPO 开源的高性能长途 shuffle 服务。 ( github.com/cubefs/shut… )

OPPO 大数据诊断平台“罗盘”正式开源

内存溢出也是常常导致使命失利的一大问题,可提取要害日志确诊剖析并主张用户优化内存装备参数。

OPPO 大数据诊断平台“罗盘”正式开源

除了以上问题,罗盘还供给了 40+的日志辨认规矩及主张,也可自行根据实践场景扩展辨认规矩。

  1. 确诊运转时功率反常

假如使命履行耗时较长或许突然变慢,用户直接在调度渠道无法判别是使命本身问题,还是调度渠道问题,亦或是核算引擎的问题。为了排查 Spark 引擎,一般需求专业剖析 SparkUI,比较不直观。罗盘对影响引擎履行功率的问题做了全面的检测,掩盖大表扫描,数据歪斜,Task 长尾,大局排序,OOM 危险,Job/stage 耗时反常,HDFS 卡顿,估测履行 Task 过多等问题。

  • 大表扫描

罗盘对履行的 SQL 扫描表行数,直观出现在表格中。假如用户没有进行分区条件挑选,可能会发生全表扫描,需求提示用户优化 SQL,避免导致内存溢出和影响集群,以提高运转功率。

OPPO 大数据诊断平台“罗盘”正式开源

  • 数据歪斜

罗盘检测每个 Task 的数据处理量并判别数据是否歪斜。当数据歪斜时,可能会导致使命内存溢出,核算资源利用率低,作业履行时刻超出预期。

OPPO 大数据诊断平台“罗盘”正式开源

  • Task 长尾

罗盘检测一切 Task 的耗时,并按 Stage 出现在柱状图中,便利用户判别是哪个 Stage 履行耗时反常。形成的原因一般是读取数据过多或读取数据慢。假如是数据歪斜形成读取数据过多,则按数据歪斜方法处理。假如一起 HDFS 发生卡顿,则会导致读取数据慢,则需求排查集群问题。

OPPO 大数据诊断平台“罗盘”正式开源

  • 大局排序反常

用户常常在 SQL 中运用了排序函数却不加分区约束,会导致大局排序。假如只有一个 Task 处理数据,需求主张用户重新分区,避免形成资源糟蹋和影响运转功率。

OPPO 大数据诊断平台“罗盘”正式开源

  • OOM 预警剖析

罗盘检测履行 SQL 播送内存占比,当播送数据过大,会导致 driver 或 executor 出现 OOM 危险,需求提示用户禁用播送或取消强制播送,必要时请求添加内存。

OPPO 大数据诊断平台“罗盘”正式开源

  • Job/stage 耗时反常

罗盘核算每个 Job/stage 实践核算时刻和闲暇时刻,一般是资源缺乏时出现,需求重视集群资源问题。

OPPO 大数据诊断平台“罗盘”正式开源

  • HDFS 卡顿

当出现 HDFS 卡登时,会影响 Task 读取数据速率,然后影响履行功率,需求重视 HDFS 集群运转状况。

OPPO 大数据诊断平台“罗盘”正式开源

  • 估测履行 Task 过多

估测履行(speculative)是指作业履行单元 Task 在同一个 Stage 中的履行时刻相比其他 Task 履行时刻长,在其他 Executor 发起相同 Task 履行,先完成的 Task 将 Kill 另个 Task, 并获得成果。需求重视集群运转状况。

OPPO 大数据诊断平台“罗盘”正式开源

  1. 确诊资源运用率反常

关于用户不确定使命 CPU 和内存运用情况,不知道怎样请求多大规范资源的问题,罗盘直观出现了 CPU 和内存运用占比,便利用户优化资源装备参数,以节省资源本钱。

OPPO 大数据诊断平台“罗盘”正式开源

OPPO 大数据诊断平台“罗盘”正式开源

罗盘还供给了 GC 日志剖析功用,可查看履行进程 GC 是否存在性能问题。

OPPO 大数据诊断平台“罗盘”正式开源

(四)一键确诊、陈述总览等功用

除了以上功用,咱们还供给了一键确诊的功用,为用户供给详细的确诊陈述。一起还有陈述总览数据和白名单功用等。

OPPO 大数据诊断平台“罗盘”正式开源

OPPO 大数据诊断平台“罗盘”正式开源

三、罗盘技能架构

罗盘首要由同步工作流层使命元数据模块、同步 Yarn/Spark App 元数据模块、相关工作流层/引擎层 App 元数据模块、工作流使命反常检测模块,引擎层反常检测模块,Portal 展示模块组成。

整体架构图

OPPO 大数据诊断平台“罗盘”正式开源

整体架构分 3 层:

  • 第一层为对接外部体系,包括调度器、Yarn、HistoryServer、HDFS 等体系,同步元数据、集群状况、运转环境状况、日志比及确诊体系剖析;
  • 第二层为架构层,包括数据采集、元数据相关 &模型规范化、反常检测、确诊 Portal 模块;
  • 第三层为根底组件层,包括 MySQL、Elasticsearch、Kafka、Redis 等组件。

详细模块流程阶段:

(1)数据采集阶段:从调度体系将用户、DAG、作业、履行记录等工作流元数据同步至确诊体系;守时同步 Yarn ResourceManager、Spark HistoryServer App 元数据至确诊体系,标志作业运转目标存储途径,为后续数据处理阶段作根底;

(2)数据相关 &模型规范化阶段:将分步采集的工作流履行记录、Spark App、Yarn App、集群运转环境装备等数据经过 ApplicationID 介质进行相关,此刻,工作流层与引擎层元数据已相关结束,得到数据规范模型(user, dag, task, application, clusterConfig, time);

(3)工作流层 &引擎层反常检测阶段:至此现已获得数据规范模型,针对规范模型进一步 Workflow 反常检测流程,一起渠道维护着一套沉淀多年的数据管理知识库,加载知识库到规范模型,经过启发式规矩,对规范模型的目标数据、日志一起进行反常发掘,结合集群状况及运转是环境状况,剖析得出工作流层、引擎层反常成果;

OPPO 大数据诊断平台“罗盘”正式开源

(4)业务视图:存储、剖析数据,供给给用户使命概览、工作流层使命确诊、引擎层作业 Application 确诊,工作流层展示调度器履行使命引发的反常,如使命失利、回环使命、基线偏离使命等问题,核算引擎层展示 Spark 作业履行引发的耗时、资源运用、运转时问题;

OPPO 大数据诊断平台“罗盘”正式开源

四、 DolphinScheduler&Compass

DolphinScheduler 是一个分布式和可扩展的开源工作流和谐渠道,具有强壮的 DAG 可视化界面,有着丰厚的运用场景,供给 Spark、Hive 和 Flink 等 30+种类型的使命,可靠性高和拓展性强。DolphinScheduler 经历了多年的实践和堆集,现已成为了一个老练的开源项目,并有着广泛的用户群体。

(一)布置体会

这儿咱们以 DolphinScheduler(2.0.6 版别)为例,体会如何快速集成罗盘。假如你还没有布置 DolphinScheduler,可参阅官网布置指南。假如你现已在运用 DolphinScheduler,那么只需求布置罗盘即可。罗盘支撑单机和集群布置,假如你想要快速体会罗盘的功用,可运用单机布置模式,罗盘依靠 Kafka、Redis、zookeeper 和 ElasticSearch,需求提早装置,依靠服务完成后即可经过布置脚本进行罗盘布置:

代码编译

git clone https://github.com/cubefs/compass.git

cd compass

mvn package -DskipTests

修正装备

cd dist/compass

修正数据源和相关装备,如下图

vim bin/compass_env.sh

OPPO 大数据诊断平台“罗盘”正式开源

一键布置

./bin/start_all.sh

(二)运用示例

首先在 DolphinScheduler 创立好项目,

OPPO 大数据诊断平台“罗盘”正式开源

然后创立一个 SPARK 使命的工作流,

OPPO 大数据诊断平台“罗盘”正式开源

最终上线该使命和运转。

OPPO 大数据诊断平台“罗盘”正式开源

翻开罗盘 Web UI,默许途径为http://localhost:7075/compass/ ,输入 DolphinScheduler 的账号密码,罗盘自动同步了 DolphinScheduler 用户信息。

OPPO 大数据诊断平台“罗盘”正式开源
最终进入使命运转页面,便可以看到一切的反常使命确诊信息。
OPPO 大数据诊断平台“罗盘”正式开源

五、罗盘开源规划

  • 罗盘首要围绕离线调度使命、核算引擎两个方面对问题进行定位剖析,运用丰厚的知识库,供给给用户处理优化方案,一起到达降本增效的意图。
  • 现在已开源部分首要包括对使命工作流和 Spark 引擎层的问题确诊,不久将发布针对 Flink 使命的反常和资源问题确诊。
  • 未来将引入更深层次的算法和确诊模型,完成去规矩和阈值,使反常确诊愈加智能化。

六、参加贡献

Github 地址】: github.com/cubefs/comp…

欢迎参加贡献,假如您有需求或主张可以提 issue 到 Github,咱们将及时为您解答。