数据治理实践 | 网易某业务线的计算资源治理

这篇具有很好参考价值的文章主要介绍了数据治理实践 | 网易某业务线的计算资源治理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文从计算资源治理实践出发,带大家清楚认识计算资源治理到底该如何进行,并如何应用到其他项目中。

01前言

由于数据治理层面可以分多个层面且内容繁多(包括模型合规、数据质量、数据安全、计算/存储资源、数据价值等治理内容),因此需要单独拆分为6个模块单独去阐述其中内容。

笔者作为数仓开发经常会收到大量集群资源满载、任务产出延时等消息/邮件,甚至下游数分及其他同学也会询问任务运行慢的情况,在这里很多数仓同学遇到这类问题第一想到的都是加资源解决,但事实真不一定是缺少资源,而是需要优化当前问题任务。所以本期从团队做计算资源治理视角出发,带大家清楚认识计算资源治理到底该如何进行。

02问题出现

在做计算治理之前(2022.12)我们团队盘点了下当前计算资源存在的几个问题:

(1)30+高消耗任务:由于数仓前中期业务扩张,要覆盖大量场景应用,存在大量问题代码运行时数据倾斜,在消耗大量集群计算资源下,产出时间也久;

(2)200w+的小文件:当前任务存在未合并小文件、任务Reduce数量过多、上游数据源接入(尤其是API数据接入)会造成过多小文件出现,小文件过多会开启更多数据读取,执行会浪费大量的资源,严重影响性能;

(3)任务调度安排不合理:多数任务集中在凌晨2-5点执行且该区间CPU满载,导致该时间段资源消耗成了重灾区,所有核心/非核心任务都在争抢资源,部分核心任务不能按时产出一直在等待阶段;

(4)线上无效DQC(数据质量监控)&监控配置资源过小:存在部分历史任务没下线表及DQC场景,每日都在空跑无意义DQC浪费资源,同时DQC资源过少导致DQC需要运行过长时间;

(5)重复开发任务/无用任务:早期协助下游做了较多烟囱数据模型,因为种种原因,部分任务不再被使用,烟囱模型分散加工导致资源复用率降低;

(6)任务缺少调优参数&部分任务仍然使用MapReduce/Spark2计算引擎:任务缺少调优参数导致资源不能适配及动态调整,甚至线上仍有早期配置MapReduce/Spark2计算引擎导致运行效率较低。

03思考与行动

3.1 治理前的思考:

在治理之前我想到一个问题,切入点该从哪里开始最合适?

经过与团队多次脑暴对当前治理优先级/改动成本大小/难度做了一个排序,我们先选择从简单的参数调优&任务引擎切换开始->小文件治理->DQC治理->高消耗任务治理->调度安排->下线无用模型及沉淀指标到其他数据资产,同时在初期我们完成各类元数据接入搭建治理看板以及团队治理产出统计数据模型,并通过网易数帆提供的数据治理平台解决具体细节问题。


数据治理平台截图

3.2 治理行动:

(1)大部分任务切换至Spark3计算引擎&补充任务调优参数

补充Spark调优参数(参数内容详见文末),任务统一使用Spark3引擎加速,并充分利用Spark3的AQE特性及Z-Order排序算法特性。

AQE解释:Spark 社区在 DAG Scheduler 中,新增了一个 API 在支持提交单个 Map 阶段,以及在运行时修改 shuffle 分区数等等,而这些就是 AQE,在 Spark 运行时,每当一个 Shuffle、Map 阶段进行完毕,AQE 就会统计这个阶段的信息,并且基于规则进行动态调整并修正还未执行的任务逻辑计算与物理计划(在条件运行的情况下),使得 Spark 程序在接下来的运行过程中得到优化。

Z-Order解释:Z-Order 是一种可以将多维数据压缩到一维的技术,在时空索引以及图像方面使用较广,比如我们常用order by a,b,c 会面临索引覆盖的问题,Z-Order by a,b,c 效果对每个字段是对等的

(2)小文件治理

在这里我们使用内部数据治理平台-数据治理360对存在小文件较多表提供内容展示(本质采集HDFS对应路径下文件数的日志去显示)

当前小文件处理:

对于分区较多使用Spark3进行动态分区刷新,(Spark3具备小文件自动合并功能,如未使用Spark3可配置Spark3/Hive小文件合并参数刷新,参数详见文末),代码如下:

1 set hive.exec.dynamic.partition.mode=nonstrict;
2 insert overwrite table xxx.xxx partition (ds)
3 select column
4 ,ds
5 from xxx.xxx

对于分区较少或未分区的表采用重建表,补数据方法回刷。

小文件预防:

  • 使用Spark3引擎,自动合并小文件
  • 减少Reduce的数量(可以使用参数进行控制)
  • 用Distribute By Rand控制分区中数据量
  • 添加合并小文件参数
  • 将数据源抽取后的表做一个任务(本质也是回刷分区合并小文件任务)去处理小文件保障从数据源开始小文件不向下游流去

(3)DQC治理

无效DQC下线:难点在于需要查找所有DQC对应的线上任务,查看该DQC任务是否与线上任务一一匹配,从而找到无效DQC任务下线,内容繁杂耗时较多。

DQC资源:由于之前DQC配置资源为集群默认参数,效率极低导致所有DQC运行时长均超过10min,从而使得整体任务链路运行时长过久,调整Driver内存为2048M,Executor个数为2,Executor内存为4096M

(4)高消耗任务调优

这里存在2个难点:优化效果不可控、高消耗任务调整到何种程度算合适,针对这个这个难点我们取所有核心数据资产任务均值,保障单个任务消耗小于平均消耗,同时我们针对当前高消耗任务列举出如下可优化的方式:

  • 关联表过多,需拆分
  • 关联时一对多,数据膨胀
  • 资源配置过多,运行时资源严重浪费,需要将配置调小(包括Driver内存、Executor个数、Executor内存)
  • 代码结尾添加Distribute By Rand(),用来控制Map输出结果的分发
  • 查询中列和行未裁剪、分区未限定、Where条件未限定
  • SQL中Distinct切换为Group by(Distinct会被hive翻译成一个全局唯一Reduce任务来做去重操作,Group by则会被hive翻译成分组聚合运算,会有多个Reduce任务并行处理,每个Reduce对收到的一部分数据组,进行每组聚合(去重))
  • 关联后计算切换为子查询计算好后再关联
  • 使用Map Join(Map Join会把小表全部读入内存中,在Map阶段直接拿另外一个表的数据和内存中表数据做匹配,由于在Map是进行了Join操作,省去了Reduce运行的效率也会高很多)可用参数代替

(5)任务调度合理优化

对于调度优化一开始会无从下手,统计凌晨2-5点区间下大概600+任务难梳理,同时存在任务依赖,修改起来可能会对下游整体有大的影响,因此我们选择循序渐进先梳理再改善。

  • 找到所有表的输出输入点即启始ODS与末尾ADS
  • 划分其中核心表/非核心表,及对应任务开始时间与结束时间
  • 按照梳理内容把非核心的任务穿插在当前集群资源非高峰时期(2点前与5点后),同时把核心任务调度提前,保障CDM层任务及时产出
  • 对实践后内容再度调优,达到资源最大利用率

(6)烟囱任务下沉&无用任务下线

烟囱表过多,需下沉指标到DWS中提升复用性,对于无用任务也需要及时下线(这里需要拿到元数据血缘最好到报表层级的数据血缘,防止任务下线后导致可视化内容问题产生),减少开发资源消耗。

04治理效果

(1)Hive与Spark2任务升级Spark3.1,总计升级任务137个,升级任务后总体任务执行效率提升43%,cpu资源消耗降低41%,内存资源消耗降低46%

(2)治理小文件数大于10000+以上的数仓表总计30+张,小文件总数由216w下降至67w

(3)下线无效DQC任务总计50+,修改DQC配置资源降低运行时长,由原来10min优化至3min内

(4)完成线上20+个任务优化及10+个任务下线及10+表指标下沉,优化后节省任务耗时146分钟,减少CPU损耗800w+,降低内存消耗2600w+(相当于节省了8个200+字段1亿数据量任务消耗)

(5)调度重新分配后2-5点资源使用率由90+%降低至50+%,保障日用资源趋势图无大突刺波动

05小结

计算资源治理核心在于降本增效,用有限资源去运行更多任务,通过一系列治理操作也让数仓同学积累技术经验同时规范化自身开发标准,让治理反推进组内技术进步。

计算资源治理是一件长久之事,并不能因为资源紧张才去治理,而要将计算治理常态化,可通过周/月资源扫描内容及时推送给每个同学,并为之打分,让每个任务都有源可循,有方法可优化。

参数内容

参数并不是设置越多任务性能越好,根据数据量、消耗、运行时间进行调整达到合理效果。

Hive:

(1)set hive.auto.convert.join = true; (是否自动转化成Map Join)

(2)set hive.map.aggr=true; (用于控制负载均衡,顶层的聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能,该设置会消耗更多的内存)

(3)set hive.groupby.skewindata=true; (用于控制负载均衡,当数据出现倾斜时,如果该变量设置为true,那么Hive会自动进行负载均衡)

(4)set hive.merge.mapfiles=true; (用于hive引擎合并小文件使用)

(5)set mapreduce.map.memory.mb=4096; (设置Map内存大小,解决Memory占用过大/小)

(6)set mapreduce.reduce.memory.mb=4096;(设置Reduce内存大小,解决Memory占用过大/小)

(7)set hive.exec.dynamic.partition.mode=nonstrict;(动态分区开启)

Spark:

(1)set spark.sql.legacy.parquet.datetimeRebaseModeInRead=LEGACY;(用于spark3中字段类型不匹配(例如datetime无法转换成date),消除sql中时间歧义,将Spark .sql. LEGACY . timeparserpolicy设置为LEGACY来恢复Spark 3.0之前的状态来转化)

(2)set spark.sql.adaptive.enabled=true;(是否开启调整Partition功能,如果开启,spark.sql.shuffle.partitions设置的Partition可能会被合并到一个Reducer里运行。平台默认开启,同时强烈建议开启。理由:更好利用单个Executor的性能,还能缓解小文件问题)

(3)set spark.sql.hive.convertInsertingPartitionedTable=false;(解决数据无法同步Impala问题,使用Spark3引擎必填)

(4)set spark.sql.finalStage.adaptive.advisoryPartitionSizeInBytes=2048M;(Spark小文件合并)

作者简介: 语兴,网易数据开发工程师。

限时开放,免费试用网易数据治理产品文章来源地址https://www.toymoban.com/news/detail-418298.html

到了这里,关于数据治理实践 | 网易某业务线的计算资源治理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 火山引擎 DataLeap 计算治理自动化解决方案实践和思考

    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群   【导读】本文旨在探讨火山引擎 DataLeap 在处理计算治理过程中所面临的问题及其解决方案,并展示这些解决方案带来的实际收益。主要内容包括: 探讨面临的痛点和挑战 提供自

    2024年02月05日
    浏览(34)
  • R2在全渠道业务线的落地

    随着业务的增长,系统的高频率迭代,质量保障工作迫切需要引入更加科学高效的测试方法来助力业务高质量的交付。长城项目一期测试中,全渠道质量团队引入技术平台部R2技术,极大的提升了项目交付的质量。因此,本文将重点介绍全渠道质量团队是如何利用R2来保障业务

    2024年02月14日
    浏览(22)
  • 银行数据治理:数据质量管理实践

    现代商业银行日常经营活动中积累了大量数据,这些数据除了支持银行前台业务流程运转之外,越来越多地被用于决策支持领域,风险控制、产品定价、绩效考核等管理决策过程也都需要大量高质量数据支持。银行日常经营决策过程的背后,实质是数据的生产、传递和利用过

    2024年02月09日
    浏览(31)
  • 网易互娱出海之旅:大数据平台上云架构设计与实践

    2020 年初,随着网易互娱的海外业务增长与海外数据合规的需求,我们开始了网易互娱大数据离线计算平台迁移出海的工作。前期,我们采取了云主机裸机加上高性能 EBS 块存储的方案。但是,这个方案存储费用高昂,成本是国内自建机房的数十倍。 于是,我们决定在公有云

    2024年02月13日
    浏览(32)
  • 数据仓库内容分享(四):滴滴大数据成本治理实践

    目录 01 滴滴大数据成本治理总体框架 1. 滴滴数据体系 2. 滴滴大数据资产管理平台 3. 滴滴大数据成本治理总体框架 02 Hadoop 成本治理实践 03 ES 成本治理实践 04 一些心得 在介绍滴滴成本治理之前,首先来简单介绍一下滴滴的数据体系。 最底层是以数据引擎为基础的数据存

    2024年02月20日
    浏览(27)
  • 云计算从基础架构到最佳实践:云计算架构与业务模式

    作者:禅与计算机程序设计艺术 1.1 论文背景 随着信息技术的飞速发展和云计算服务的普及,越来越多的人们开始把目光投向云计算这个领域。作为一名技术人员或云计算从业者,如何更好的掌握云计算相关技术并实现自身业务目标,已经成为一个重要课题。那么如何设计出

    2024年02月08日
    浏览(25)
  • 在企业中应用的区块链应能够扩容以满足业务条线的需求

    发表时间:2022年8月19日 信息来源:bsvblockchain.org 企业将业务条线(LoB)应用迁移至BSV区块链涉及到对业务的重大规划和评估。在采用新的架构之前,决策过程中的多个阶段的问题需要解决。 对于企业来说,将公链应用于关键的业务条线(LoB)之中没有什么值得担心的问题。

    2023年04月16日
    浏览(27)
  • 信息安全-数据安全-字节大数据平台安全与权限治理实践

    导读: 本次分享题目为字节跳动大数据平台安全与权限治理实践,文章会围绕下面四点展开: 字节大数据安全体系现状和难点 细粒度权限管控和治理 资产保护能力 数据删除能力 分享嘉宾|许从余 火山引擎 数据平台产品经理 编辑整理|杨佳慧 出品社区|DataFun 第一部分首

    2024年02月09日
    浏览(30)
  • 构建企业数据安全的根基:深入解析数据安全治理能力评估与实践框架

    随着数字化转型深入各行各业,数据安全已成为企业不可或缺的重要议题。在这一背景下,有效的数据安全治理框架成为确保企业数据安全的基石。 中国互联网协会于 2021 年发布 T/SC-0011-2021《数据安全治理能力评估方法》,推出了国内首个数据安全治理能力建设及评估框架,

    2024年02月22日
    浏览(29)
  • 微服务架构体系的全面治理:架构治理、研发治理、测试治理、运维治理、管理治理、业务治理

    随着微服务架构的普及,如何确保微服务架构体系的稳定性和性能成为企业面临的重要技术问题。个人认为微服务的全面治理理应包括以下六大部分内容:架构治理、研发治理、测试治理、运维治理、管理治理、业务治理。通用全面的治理来帮助企业构建高效、可靠的微服务

    2024年02月19日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包