一、布景
OPPO 大数据渠道现在有 20+个服务组件,数据量超 1EB,离线使命数近百万,实时使命数千,数据开发剖析师超千人。这也带来了体系复杂度的问题,一方面是用户常常对自己的使命运转状况“摸不着头脑”,不管是性能问题,还是参数装备问题,甚至是一些常见的权限报错问题,都需求咨询渠道给出详细的处理方案;另一方面是渠道面对各类繁杂使命,运维人员常常需求对使命毛病定位和排除,由于使命链路长,组件日志多,运维压力大。因而急需对使命进行实时监控和确诊,不只要能够帮助用户快速定位反常问题,还需给出详细的主张和优化方案,一起还能管理各类“僵尸”和不合理使命,然后到达降本增效的意图。据调研,现在业界尚无老练的开源使命确诊渠道。为此咱们开发了大数据确诊渠道,经过确诊渠道周优化使命实例数超 2 万,获得了杰出的效果。
“罗盘”(Compass)便是基于 OPPO 内部大数据确诊渠道的开源项目(项目地址:github.com/cubefs/comp…),可用于确诊 DolphinScheduler、Airflow 等调度渠道上所运转的大数据使命。咱们希望经过“罗盘”(Compass)回馈开源社区,也希望更多人参加进来,共同处理使命确诊的痛点和难题。
二、罗盘中心功用
罗盘现在已支撑以下功用和特性:
- 非侵入式,即时确诊,无需修正已有的调度渠道,即可体会确诊效果。
- 支撑多种主流调度渠道,例如 DolphinScheduler、Airflow 或自研等。
- 支撑多版别 Spark、Hadoop 2.x 和 3.x 使命日志确诊和解析。
- 支撑工作流层反常确诊,辨认各种失利和基线耗时反常问题。
- 支撑引擎层反常确诊,包括数据歪斜、大表扫描、内存糟蹋等 14 种反常类型。
- 支撑各种日志匹配规矩编写和反常阈值调整,可自行根据实践场景优化。
罗盘已支撑确诊类型概览:
(一)非侵入式,即时确诊
这儿以 DolphinScheduler 调度渠道为例。
从架构上看,MasterServer 首要担任 DAG 使命切分、使命提交监控并耐久化使命实例数据到 DB 中,WorkerServer 首要担任使命的履行和供给日志服务,一起在 UI 供给了查看长途日志的功用。为了能够获取使命元数据和相关日志进行确诊,一个方法是在 MasterServer 中监听使命状况事件,另一个方法是订阅 MySQL binlog 日志。为了减少对 DolphinScheduler 的修正,咱们采取了第二种方法。
因而只需求在 DolphinScheduler 创立一个工作流,并运转,等待运转结束,咱们便可在罗盘上看到该使命运转失利等反常。
罗盘不但完成了对调度渠道的解耦,还能在使命运转结束后即时确诊,一起供给了丰厚的 UI 展示服务。假如您不需求咱们供给的 UI 服务,那也可以直接查询罗盘确诊的元数据,展示在需求的地方。
(二)工作流层反常确诊
关于工作流层的使命实例,常见问题可分为两类:一类是失利的使命,例如首次失利、最终运转失利和长时刻失利;另一类是耗时反常的使命,例如基线时刻反常、基线耗时反常和运转耗时长。
- 确诊失利的使命
用户常常忽略首次失利,甚至加大重试次数,假如不注重,最终可能会演变为最终失利。罗盘记录和确诊剖析了每次失利的原因,不只可认为用户快速定位问题,还可以在毛病回溯时找到根因。关于长时刻失利的使命,需求通知用户整改或整理,避免形成资源糟蹋。
2. 确诊耗时反常的使命
针对需求 SLA 保证的使命,罗盘不只剖析了相关于历史正常结束时刻,是否提早结束或许晚点结束的使命,即基线时刻反常,也剖析了相关于历史正常运转时长,是否运转时刻过长或许过短的使命,即基线耗时反常。关于运转耗时长的使命,例如超过几个小时以上的大使命,用户和渠道都需求剖析是使命本身的问题,还是渠道的问题。
(三)Spark 引擎层反常确诊
关于 Spark 使命,常见的问题可以归为三类:一类是运转时报错,另一类是运转时功率,最终一类是资源运用率问题。
- 确诊运转时报错反常
引擎层常见报错有 sql 失利、shuffle 失利和内存溢出等。此类报错具有明显的日志特征,可根据要害字提取分类,运用已有的知识库,供给给用户详细的处理方案,提高用户体会和功率。
罗盘供给了 sql 失利日志剖析的规矩,通常涉及到操作权限,库表不存在及语法等问题,此类问题可直接指引用户去请求权限。
shuffle 问题会严重影响使命运转甚至导致失利,需求重点重视,假如您现在没有更好的处理方案,也可以参阅 OPPO 开源的高性能长途 shuffle 服务。 ( github.com/cubefs/shut… )
内存溢出也是常常导致使命失利的一大问题,可提取要害日志确诊剖析并主张用户优化内存装备参数。
除了以上问题,罗盘还供给了 40+的日志辨认规矩及主张,也可自行根据实践场景扩展辨认规矩。
- 确诊运转时功率反常
假如使命履行耗时较长或许突然变慢,用户直接在调度渠道无法判别是使命本身问题,还是调度渠道问题,亦或是核算引擎的问题。为了排查 Spark 引擎,一般需求专业剖析 SparkUI,比较不直观。罗盘对影响引擎履行功率的问题做了全面的检测,掩盖大表扫描,数据歪斜,Task 长尾,大局排序,OOM 危险,Job/stage 耗时反常,HDFS 卡顿,估测履行 Task 过多等问题。
- 大表扫描
罗盘对履行的 SQL 扫描表行数,直观出现在表格中。假如用户没有进行分区条件挑选,可能会发生全表扫描,需求提示用户优化 SQL,避免导致内存溢出和影响集群,以提高运转功率。
- 数据歪斜
罗盘检测每个 Task 的数据处理量并判别数据是否歪斜。当数据歪斜时,可能会导致使命内存溢出,核算资源利用率低,作业履行时刻超出预期。
- Task 长尾
罗盘检测一切 Task 的耗时,并按 Stage 出现在柱状图中,便利用户判别是哪个 Stage 履行耗时反常。形成的原因一般是读取数据过多或读取数据慢。假如是数据歪斜形成读取数据过多,则按数据歪斜方法处理。假如一起 HDFS 发生卡顿,则会导致读取数据慢,则需求排查集群问题。
- 大局排序反常
用户常常在 SQL 中运用了排序函数却不加分区约束,会导致大局排序。假如只有一个 Task 处理数据,需求主张用户重新分区,避免形成资源糟蹋和影响运转功率。
- OOM 预警剖析
罗盘检测履行 SQL 播送内存占比,当播送数据过大,会导致 driver 或 executor 出现 OOM 危险,需求提示用户禁用播送或取消强制播送,必要时请求添加内存。
- Job/stage 耗时反常
罗盘核算每个 Job/stage 实践核算时刻和闲暇时刻,一般是资源缺乏时出现,需求重视集群资源问题。
- HDFS 卡顿
当出现 HDFS 卡登时,会影响 Task 读取数据速率,然后影响履行功率,需求重视 HDFS 集群运转状况。
- 估测履行 Task 过多
估测履行(speculative)是指作业履行单元 Task 在同一个 Stage 中的履行时刻相比其他 Task 履行时刻长,在其他 Executor 发起相同 Task 履行,先完成的 Task 将 Kill 另个 Task, 并获得成果。需求重视集群运转状况。
- 确诊资源运用率反常
关于用户不确定使命 CPU 和内存运用情况,不知道怎样请求多大规范资源的问题,罗盘直观出现了 CPU 和内存运用占比,便利用户优化资源装备参数,以节省资源本钱。
罗盘还供给了 GC 日志剖析功用,可查看履行进程 GC 是否存在性能问题。
(四)一键确诊、陈述总览等功用
除了以上功用,咱们还供给了一键确诊的功用,为用户供给详细的确诊陈述。一起还有陈述总览数据和白名单功用等。
三、罗盘技能架构
罗盘首要由同步工作流层使命元数据模块、同步 Yarn/Spark App 元数据模块、相关工作流层/引擎层 App 元数据模块、工作流使命反常检测模块,引擎层反常检测模块,Portal 展示模块组成。
整体架构图
整体架构分 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 反常检测流程,一起渠道维护着一套沉淀多年的数据管理知识库,加载知识库到规范模型,经过启发式规矩,对规范模型的目标数据、日志一起进行反常发掘,结合集群状况及运转是环境状况,剖析得出工作流层、引擎层反常成果;
(4)业务视图:存储、剖析数据,供给给用户使命概览、工作流层使命确诊、引擎层作业 Application 确诊,工作流层展示调度器履行使命引发的反常,如使命失利、回环使命、基线偏离使命等问题,核算引擎层展示 Spark 作业履行引发的耗时、资源运用、运转时问题;
四、 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
一键布置
./bin/start_all.sh
(二)运用示例
首先在 DolphinScheduler 创立好项目,
然后创立一个 SPARK 使命的工作流,
最终上线该使命和运转。
翻开罗盘 Web UI,默许途径为http://localhost:7075/compass/ ,输入 DolphinScheduler 的账号密码,罗盘自动同步了 DolphinScheduler 用户信息。 最终进入使命运转页面,便可以看到一切的反常使命确诊信息。
五、罗盘开源规划
- 罗盘首要围绕离线调度使命、核算引擎两个方面对问题进行定位剖析,运用丰厚的知识库,供给给用户处理优化方案,一起到达降本增效的意图。
- 现在已开源部分首要包括对使命工作流和 Spark 引擎层的问题确诊,不久将发布针对 Flink 使命的反常和资源问题确诊。
- 未来将引入更深层次的算法和确诊模型,完成去规矩和阈值,使反常确诊愈加智能化。
六、参加贡献
【Github 地址】: github.com/cubefs/comp…
欢迎参加贡献,假如您有需求或主张可以提 issue 到 Github,咱们将及时为您解答。