低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

Airbnb 数据质量(一):重建

2020 年 11 月 30 日

Airbnb数据质量(一):重建

本文最初发布于 Airbnb 工程 &数据科学博客,作者 Jonathan Parks、Vaughn Quoss、Paul Ellwood,由 InfoQ 中文站翻译并分享。



在 Airbnb,我们一直有一种数据驱动的文化。我们组建了一流的数据科学和工程团队,建立了行业领先的数据基础设施,并推出了许多成功的开源项目,包括 Airflow 和 Superset。与此同时,Airbnb 已经从一个光速发展的初创公司转变为一个拥有数千名员工的成熟组织。在转型过程中,Airbnb 经历了大多数公司都会遇到的典型的增长挑战,包括那些影响数据仓库的挑战。这篇文章探讨了 Airbnb 在高速增长期间面临的数据挑战,以及我们为克服这些挑战所采取的措施。

简介

在 Airbnb,我们一直有一种数据驱动的文化。我们组建了一流的数据科学和工程团队,建立了行业领先的数据基础设施,并推出了许多成功的开源项目,包括AirflowSuperset。与此同时,Airbnb 已经从一个光速发展的初创公司转变为一个拥有数千名员工的成熟组织。在转型过程中,Airbnb 经历了大多数公司都会遇到的典型的增长挑战,包括那些影响数据仓库的挑战。这篇文章探讨了 Airbnb 在高速增长期间面临的数据挑战,以及我们为克服这些挑战所采取的措施。

背景

随着 Airbnb 从一家小型初创公司发展成为今天的公司,很多事情都变了。公司冒险进入了新的业务领域,收购了许多公司,并大幅改进了产品战略。同时,对数据的要求也发生了变化。例如,领导层对数据的及时性和质量有很高的期望,对成本和遵从性的关注度也更高了。为了确保我们能够继续满足这种预期,显然,我们需要针对我们的数据做大量的投资。这些投资集中于与所有权、数据架构和治理相关的领域。

所有权

在制定本文介绍的数据质量计划之前,数据资产的所有权主要分布在产品团队中,软件工程师或数据科学家是管道和数据集的主要所有者。然而,数据所有权的职责并没有明确定义——当问题出现时,这就会成为瓶颈。

数据架构

公司早期建造的大部分管道都是根据需要自然发展出来的,没有明确定义质量标准和数据架构总体战略。这导致数据模型膨胀,给一小群工程师带来了巨大的操作负担。

治理

除了需要制定一个数据架构总体战略外,Airbnb 还需要一个集中式的治理流程,以使团队能够遵守战略和标准。

数据质量计划

2019 年初,公司对数据质量做出了前所未有的承诺,并形成了一项全面的计划,以解决我们在数据方面面临的组织和技术挑战。Airbnb 领导层签署了数据质量计划——一个大型项目,使用新流程和技术从头开始重建数据仓库。


在制订改善数据质量的总体策略时,我们首先提出了五个主要目标:


  1. 确保所有重要数据集的所有权清晰;

  2. 确保重要数据总是符合 SLA;

  3. 确保管道采用最佳实践按照高质量标准建造;

  4. 确保重要数据是可信的,并定期验证;

  5. 确保数据有良好的文档记录并且易于发现;


接下来的部分详细介绍了推进这项工作所采取的具体方法,重点是我们的数据工程组织、架构和最佳实践,以及我们用于管理数据仓库的流程。

组织

一旦数据质量计划推进到关键点,领导层就会重新调配公司有限的数据工程资源来启动项目。这足以为 Airbnb 最关键数据的演进扫清障碍;无论如何,很明显,我们需要团结起来,并大力发展 Airbnb 数据工程社区。以下是我们为推动上述工作所作的变革。

数据工程角色

几年来,Airbnb 一直没有正式的数据工程师职位。大多数数据工程工作都是由数据科学家和软件工程师完成的,他们以各种不同的名义被招募进来。这种错位使得招聘拥有数据工程技能的人才非常具有挑战性,并且在职业发展方面也造成了一些混乱。为了解决这些问题,我们重新引入了“数据工程师”这个角色,将其作为工程组织序列中的专门人才。这个新角色要求数据工程师在多个领域中都具有很强的能力,包括数据建模、管道开发和软件工程。

组织结构

我们还致力于建立一个去中心化的组织结构,由数据工程小组为产品团队提供数据报告(而不是单一的集中式数据工程组织)。该模型确保数据工程师与消费者的需求和产品的方向保持一致,同时确保工程师的数量足够(3 名或以上)。团队规模对于提供指导/领导机会、管理数据操作和消除人员缺口非常重要。


作为对分散的数据工程师小组的补充,我们成立了一个集中式数据工程团队,开发数据工程标准、工具和最佳实践。该团队还管理不属于任何产品团队的全局数据集。

社区

我们创建了新的沟通渠道,以便更好地连接数据工程社区,并建立了一个跨组织的决策框架。为了弥补这种结构的不足,我们创建了以下群组:


  • 数据工程论坛——每月举行数据工程师全体会议,目的是串联上下文以及收集来自更广泛的社区的反馈。

  • 数据架构师工作组——由来自整个公司的高级数据工程师组成,负责制定主要的架构决策,并对 Midas 认证进行评审(见下文)。

  • 数据工程工具工作组——由来自整个公司的数据工程师组成,负责制定数据工程工具和工作流的愿景。

  • 数据工程领导小组——由数据工程经理和最资深的个人贡献者组成,负责组织和招聘决策。

招聘

我们修改了数据工程师的招聘流程,积极增加员工数量,扩大我们的数据工程实践。我们特别注意引入高层领导,指导我们做出影响公司未来几年的决策。这是一项持续性的工作。

架构和最佳实践

下一步是根据一组通用的架构原则和最佳实践来指导我们的工作。我们为管道实现的数据建模、操作和技术标准提供了全面的指导方针,下面将对此进行讨论。

数据模型

公司最初的分析基础为“core_data”,这是一个针对易用性优化过的星型模式数据模型。它由一个中心团队构建和拥有,整合了大量的资源——通常跨不同的主题领域。在 2014 年,这种模式非常有效;然而,随着公司的发展,管理变得越来越困难。基于这一认识,显然,在设计未来的数据模型时应该深思熟虑,避免所有权集中的陷阱。


与此同时,公司构建了一个被广泛采用的平台 Minerva,该平台将指标和维度进行编目,并计算这些实体之间的连接(还有其他功能)。鉴于 Minerva 广泛的功能和应用,显然,Minerva 应该继续在我们的数据架构中扮演核心角色,我们的数据模型应该能够发挥出 Minerva 的优势。


在此背景下,我们设计了新的数据模型,以下是遵循的两个关键原则:


  1. 表必须规范化(在合理的范围内),并且尽可能减少依赖。Minerva 承担了跨数据模型连接的重任。

  2. 描述相似域的表被分组到主题领域(Subject Areas)中。每个主题领域必须只有一个所有者,自然,该所有者与单个团队的范围相一致。所有权应该非常清晰。


在数据建模领域,规范化数据和基于主题领域的数据模型并不是什么新概念,最近,它们又重新兴起(请阅读最近来自其他组织的关于“数据网格”架构的文章)。我们发现,这种理念特别有吸引力,因为它解决了我们以前的挑战,并可以与我们的数据组织结构很好地结合。

数据技术

我们还彻底修改了我们的管道实现建议。下面将对此进行讨论。


Spark 和 Scala

当我们开始实施数据质量计划时,Airbnb 的大多数关键数据都是通过编写 SQL 来组合并通过 Hive 执行的。这种方法在工程师中间并不受欢迎,因为 SQL 缺乏函数式编程语言的优点(例如代码重用、模块化、类型安全等)。与此同时,Spark 已经成熟,公司在这一领域的专业知识也在不断增长。出于这些原因,我们转向了 Spark,并将 Scala API 作为我们的主接口。与此同时,我们在通用 Spark 封装器上做了很大的投入,以简化读/写模式和集成测试。


测试

我们需要改进的另一个方面是数据管道测试。这降低了迭代速度,并且使得外部人员很难安全地修改代码。我们要求在构建管道时必须使用完整的集成测试,这些测试作为持续集成流程的一部分运行。


数据质量检查

我们还构建了用于执行数据质量检查和异常检测的新工具,并要求在新的管道中使用它们。特别是异常检测,在预防新管道质量问题方面非常成功。

操作

数据操作是另一个改进机会,因此,我们在这一方面制定了严格的要求。所有重要数据集都必须签订落地时间 SLA,管道需要安排寻呼值班。

治理

流程

当我们开始重建我们的数据仓库时,显然,我们需要一种机制来确保数据模型之间的内聚性,并在团队之间保持很高的质量标准。我们还需要一种更好的方式,向终端用户展示我们最值得信赖的数据集。为此,我们推出了 Midas 认证流程(如下图所示)。



Midas 认证过程示意图,详细介绍见下文。


Midas 流程要求涉众在构建管道之前首先就设计规范达成一致。这是通过 Spec 文档实现的,该文档提供了对指标和维度、表模式、管道图的非专业描述,并描述了不明显的业务逻辑和其他假设。一旦规范得到批准,数据工程师就会根据商定的规范构建数据集和管道。然后,在结果数据和代码通过审查后,就可以最终授予证书。认证标志在所有面向消费者的数据工具中都可见,而且,经过认证的数据在数据发现工具中优先级更高。


我们将在以后的文章中提供更多关于 Midas 认证流程的细节。

责任制

最后,同样重要的是,我们创建了新的机制,用于确保与数据质量相关的责任制。我们更新了报告数据质量缺陷的流程,并设立了每周缺陷审查会议,讨论高优先级的缺陷并共同制定纠正措施。我们还要求团队将数据管道 SLA 合并到他们的季度 OKR 计划中。

总结

随着公司的成熟,数据仓库的需求会发生显著变化。为了满足 Airbnb 不断变化的需求,我们成功地重建了数据仓库,振兴了数据工程社区。这是公司数据质量计划的一部分。


数据质量计划采用了全方位的方法,通过在各个层次上解决问题来实现这一振兴。这包括恢复数据工程职能,为这个角色设置较高的技术标准,并为这个工程专业建立一个社区。我们还新成立了一个团队,开发数据工程专用工具。公司还开发了一套高度个性化的架构和技术标准,并启动了 Midas 认证流程,以确保所有新数据都按照该标准构建。最后,公司对数据管道所有者提出了更高的期望,尤其是在操作和 Bug 解决方案方面,强化了责任。


当前,数据质量计划正在全速推进,仍有大量的工作要做。我们正在加速对数据基础的投资,设计下一代数据工程工具和工作流,并开发一种策略,将我们的数据仓库从日常批处理范式转变为近实时的。我们正在积极招聘数据工程负责人,他们将开发这些架构并推动它们完成。如果你想帮助我们实现这些目标,请查看Airbnb招聘页面


英文原文:Data Quality at Airbnb Part 1 — Rebuilding at Scale

2020 年 11 月 30 日 06:001077

评论

发布
暂无评论
发现更多内容

机器学习笔记之:虽然还没明白到底是在干嘛,但竟然还觉得挺有意思的!

Nydia

Mybatis【17】-- Mybatis自关联查询一对多查询

秦怀杂货店

数据库 mybatis

数据结构和算法学习总结-复杂度分析

Nick

时间复杂度 数据结构与算法 复杂度

年关将至

luojiahu

VS2019 + Qt Creator 4.11.1 导入Qt源码进行调试记录

Creep

c++ qt

管理笔记[2]:独裁者X与民主统治者Y

俊毅

浅谈JavaScript常见的循环方式

devpoint

foreach for for...of

GameStop: 究竟发生了什么?

lidaobing

28天写作 逼空

week10-总结

J

还不清楚Lambda的底层原理?一文帮你搞懂

后台技术汇

28天写作

《学会写作》学习笔记之如何选题

JiangX

28天写作

发布 Go Modules

Rayjun

go go modules

Reactive Spring实战 -- 响应式Redis交互

binecy

redis Reactive Spring

架构师训练营第10周课后作业

万有引力

怀着期待开启美好的一天「幻想短篇 23/28」

道伟

28天写作

碎碎念之「创造力可能是新的生产力」

Justin

创意 28天写作 创造性思维

项目管理知识标准体系

Ian哥

28天写作

管事情的过程,如何聚焦并决策高价值的事?

一笑

管理 优先级队列 28天写作

【Vue2】文本无缝滚动

学习委员

Vue 前端 28天写作

【计算机内功修炼】八:函数运行时在内存中是什么样子?

码农的荒岛求生

高并发 内存 高性能 内存管理 运行时栈帧

week10-homework

J

28天瞎写的第二百三十三天:唯工具论的错误

树上

28天写作

外企时代已经过去?

李忠良

28天写作

小产品、连接和生态

孙苏勇

产品 产品定位

读2020年Javascript趋势报告展望ES2020

devpoint

ES2020 构建工具 前端构建

产品训练营-第六课笔记

Geek_娴子

我的电脑嘲讽我!

IT蜗壳-Tango

七日更

创业失败启示录|茶之玄学

青城

28天写作 创业失败启示录 青城

如何做到超预期供应

熊斌

28天写作

同城快递架构设计

Mars

技术创业,股权设置的常见“坑” | 视频号28天(24)

赵新龙

28天写作

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

Airbnb数据质量(一):重建-InfoQ