写点什么

数据治理的核心:大数据开发平台

作者:Taylor
  • 2022-11-13
    俄罗斯
  • 本文字数:2550 字

    阅读完需:约 8 分钟

数据治理的核心:大数据开发平台

这一篇,终于来到了数据治理的核心:大数据开发平台。坦白将这个是一个相对偏技术性的一个产品,需要了解大数据的领域知识栈和数据开发的流程。


通常情况下,数据开发环境一般是由数据开发工程师结合公司的业务和技术需要,基于开源工具打造公司的集成数据开发环境,比如部署 Hadoop,Idea,Jenkins 等工具。但往往这些工具集相对分散,围绕工具集的流程管理成本较高,导致公司大数据团队对一个统一的、集成的数据开发平台呼声较高。


另一方面,在公司业务体量较小,或者在公司发展初期的时候,基于开源工具堆栈一个数据生产环境是完全没有问题,但是随着业务体量增加,计算的性能问题,发布流程的维护和管理,生产环境的监控与运维等就会很容易出现问题,这些问题一方面是因为开源工具软件之间的本就存在的兼容性问题,另一方面也有对工具的本身的认知问题。


本章我们主要从数据开发平台的角度,讨论数据开发平台关心的问题有哪些,以及如何设计开发平台。


常见的数据开发流程


先来看一下一个典型的数据开发工程师的日常工作流程:


数据开发岗位的日常工作流程为:

  • 产品需求评审,了解业务需求,进行开发排期;

  • 模型设计,了解依赖关系与约束原则,与产品二次核对;

  • 沟通其他部门,ETL 开发导入数据;

  • SQL/MR 开发,编写业务逻辑;

  • 测试,测试人员检查逻辑,并核对结果准确性;

  • 发布上线,加入日常监控报警。


从以上的流程中可以通过平台工具完成的有:数据模型的构建,原始数据的导入,业务逻辑的编写,上线与运维。需要说一下的是,数据的导入部分,一般是由数据交换平台来专业去做,所以本文就不展开讨论。


面向不同的业务场景,比如面向数据分析的离线开发,面向支付场景的实时开发,面向用户操作的交互式计算,面向推荐的算法(模型)开发。虽然不同的开发有相似的内容,但这里我们讨论的开发定位在离线开发场景。

<一> 数据模型构建

根据业务的需求来设计数据模型,数据模型的设计本质上就是在维护元数据信息,一般包含了技术元数据,业务元数据,管理元数据。


  • 管理元数据:包含数据所属于的开发者,部门等信息;表所属的数仓分层划域信息 ,如属于哪条业务域,属于数仓哪一层。

  • 业务元数据:包含了数据的业务定义,计算的逻辑等信息。

  • 技术元数据:包含了表中字段的数据类型,约束条件等技术信息。


具体的建模方法论这里就不展开了,可以参考 Tencent 的欧拉平台中数据建模的方法。


<二> 业务逻辑编写

按照业务逻辑编写完成之后,进行一次任务的测试运行,没什么问题的话,就进行调度的配置。在真正提交到生产环境之前,需要对代码进行扫描检查。


尽管开发人员都是经过严格培训的,但仍无法避免一些日常的工作失误,例如 Sql 质量差、性能低、不遵循规范等问题,通过总结常见问题,形成开发规则,便可以开发 SQL SCAN 工具,在提交代码时即发现问题,提示报警;主要校验规则有三类:

  • 代码规范:表命名、生命周期、注释等;

  • 代码质量:参数错误、分母为 0、NULL 值等;

  • 代码性能:扫描大表、重复计算、分区选择错误等;

<三> 任务上线运维

作业被提交到生产环境之后,任务的管理就交由调度平台进行运维管理。任务调度的本质,是一个非常复杂有向无环图。


在传统的数据仓库中,任务是依赖 Crontab 来定时执行的,存在许多的弊端,例如:各任务之间依赖定时执行,容易造成前面的任务未结束或者失败,而后面任务继续运行,导致失败的情况。此外还有任务无法设置并发执行;无法设置运行优先级;当任务多了看起来太乱,无法管理维护;任务开发方式多种多样,包括 MapReduce、Hive、SQL、Java、Shell、Spark 等,无法统一维护。


任务调度系统的核心有两个模块:调度引擎和执行引擎。简单来讲,就是调度引擎根据任务节点数据及依赖关系进行实例化,生成各类参数,并生成调度树;执行引擎根据具体任务,分配 CPU、运行节点等资源,在任务对应的执行环境中运行相关代码。


大数据平台经常会用来跑一些批任务,跑批处理当然就离不开定时任务。比如定时抽取业务数据库的数据,定时跑 hive/spark 任务,定时推送日报、月报指标数据。任务调度系统已经俨然成为了大数据处理平台不可或缺的一部分,可以说是 ETL 任务的灵魂。调度平台通常需要支持的能力有:


  • 调度的方式:定时调度(即设置一个具体的时间点),周期调度(按照小时,天,周,月),手动执行,依赖调度(即一个任务可以配置为依赖上一个任务结束)。


  • 调度的管理:支持任务按照优先级进行调度,这个在资源相对有限的情况,支持高优先级的任务优先被执行。控制任务并行的数量,集群资源是有限的,避免同时启动大量的任务,减少调度资源和计算资源压力。


  • 监控与告警:支持任务节点异常情况下的处理,比如运行失败或超时的时候,及时通过电话、短信、邮件等方式来提醒开发者。同时及时 kill 掉,以免占用大量资源,影响正常的任务运行。


  • 需求间协同:调度除了关注任务的调度运行本身之外,往往还需要跟其他的大数据平台需求协同配合,常见的有血缘管理、权限控制、负载流控、监控报警、质量分析等各种服务或事务。


顺带提下,在业务体量相对较小,复杂度较小的时候,可以选用一些开源的调度框架:DataX,Airflow,Azkaban,DolphinScheduler,Kettle,Oozie 等。

开发平台的设计

从产品设计角度,主要围绕一条任务的生命周期,以及围绕主线的平台管理,安全三个方面。


  • 任务全周期

主要包含了模型的构建 -> 任务的构建 -> 任务测试 -> 任务发布 -> 任务的监控。


  • 平台管理

包含了对任务的平台管理,比如按照不同的部门,不同的项目等视角下的任务管理;

任务的实例管理。整体来讲构建了项目-任务-实例的三级平台管理体系。


  • 安全

管理的安全:平台用户只能访问权限范围内的数据资源,作业以及作业的实例信息等。

数据的安全:对于敏感数据的脱敏化处理,比如身份证,手机号,姓名等敏感信息。


这里可以参考下某房地产行业数据开发平台设计:

总结

本文主要讨论了离线开发场景下的数据开发平台构建核心三要素:模型构建,业务逻辑构建,调度管理。最后从产品视角简单展开了下产品设计的三个方面。


对于一家公司来讲,数据开发平台随着业务在不断地演进。对于数据行业来讲,数据开发的底层技术架构也在不停地迭代。总的来说,数据开发平台也是要不断结合新的业务场景,调整底层的技术架构,满足更快,更稳定的产出数据结构,赋能业务的快速发展。


参考

数据开发治理平台WeData

数据平台与离线数据开发

从0到1搭建大数据平台


发布于: 刚刚阅读数: 3
用户头像

Taylor

关注

还未添加个人签名 2018-10-20 加入

专注于数据治理体系与数据应用平台建设、数据科学与AI、ToB/G数字化转型。 前4亿全球用户产品APP架构师。

评论

发布
暂无评论
数据治理的核心:大数据开发平台_大数据_Taylor_InfoQ写作社区