Amundsen 是来自Lyft 开源的元数据管理、数据发现平台,功能点很全,有一个比较全的前端、后端以及数据处理框架。在这篇文章中,咱们将深刻讨论Amundsen的架构,解释该工具如何使数据发现大众化,并阐述在设计这个产品时所面临的挑战。最后,咱们将重点介绍早期应用者的杰出贡献,并总结Amundsen的将来路线图。前端
像Lyft这样的现代数据驱动公司,平台上的每一个交互都由数据提供驱动力。复杂的数据生成、ETL数据加工流程和分析带来的挑战,使元数据变得很是重要。此外,数据源类型也在不断增长。Lyft兼容的数据源包括:Redshift,Presto,Hive,PostgreSQL中的SQL表和视图,以及诸如Mode,Superset和Tableau等商业智能工具中的仪表板。随着数据源的不断增加,弄清楚存在哪些数据源,如何访问以及这些数据源中哪些信息可用,变得愈来愈困难。node
Amundsen的出现,改变了这个困难的局面。而自从Lyft发布这个产品数据发现解决方一年后,Lyft将Amundsen的全部代码库公开,以此来探索多种扩展可能和改进,并创建了一个不断壮大的开源社区。git
1.认识Amundsen
下图显示了Amundsen在Lyft的架构。Amundsen采用微服务架构,由五个主要组件组成:程序员
1. 元数据服务github
元数据服务处理来自前端服务以及其余微服务的元数据请求。默认状况下,持久层是Neo4j,但能够替换。数据库
2. 搜索服务后端
搜索服务由ElasticSearch提供支持,处理来自前端服务的搜索请求。默认状况下,由ElacticSearch提供搜索引擎,但能够替换。跨域
3. 前端服务缓存
前端服务托管Amundsen的网络应用程序。安全
4. 数据生成器
数据生成器是一个通用的数据提取框架,可从各类来源提取元数据。
5. Common
是一个代码库分支,存储Amundsen的全部微服务的通用代码。
1.1 组件一:元数据服务
Amundsen的元数据服务提供有关数据源的元数据。此元数据显示在前端服务的Web应用程序中,Lyft的其余服务也能够使用。元数据服务当前支持三种类型的数据源:
表格资源源,包括元数据,如表名、描述、列名、相关统计信息及其余内容。
用户资源表明单个用户或团队用户,包括如姓名、团队信息和联系信息等元数据。
仪表板资源(当前开发中)。
在内部,元数据服务经过代理和RESTAPI服务请求,链接持久层。默认状况下,持久层由开源图数据库Neo4j提供支持。该服务还能够配置Apache Atlas(元数据引擎)。与Apache Atlas系统的集成归功于早期开放源码软件的贡献。
Amundsen将元数据实体建模为一个图,在引入更多实体时能够方便地扩展模型。包含表、列和Schema的全部实体,都是经过表示它们之间关系的边缘链接起来的。每一个实体还提供一个惟一的资源ID以供识别。
Lyft目前使用Neo4j社区版本3.3.5来承载元数据。每四个小时将Neo4j图备份到Amazon S3中。
1.2 组件二:搜索服务
Amundsen的搜索服务提供API,用于将资源编入搜索引擎中,并知足来自前端服务的搜索请求。
与元数据服务相似,搜索服务经过代理与不一样的搜索引擎进行交互。默认状况下,搜索服务集成ElasticSearch 6.x,但也能够集成Apache Atlas,提供与Solr相似的搜索功能。
目前,Amundsen支持多种搜索模式,以提供更灵活的搜索体验:
常规搜索:返回与给定搜索词和特定资源类型最相关的结果。
类别搜索:筛选第一个搜索词与给定的元数据类别匹配的资源(如搜索database:hive),而后根据相关性返回与第二个搜索词匹配的结果。
通配符搜索:容许用户对不一样资源执行通配符搜索。
1.3 组件三:前端服务
Amundsen前端服务由两个不一样的部分组成:
用于客户端渲染的React应用程序。
用于服务请求的Flask服务器,充当元数据或搜索服务请求的媒介。
React应用程序用TypeScript编写,利用Redux管理应用程序状态,并遵循“Ducks”模块化方法进行代码结构化。引入Redux-Saga做为中间件,来有效管理异步请求对应用程序状态的反作用。
Babel用于跨不一样ECMAScript标准转换源代码,Webpack用于打包源代码,Jest用于单元测试。应用程序还使用NPM来管理依赖。
考虑到开源社区,Amundsen的前端应用程序是高度可配置的。经过功能标记和各类配置变量来适配不一样组织的独特需求。例如,在Lyft,提取员工数据做为用户资源并将其编目。意识到并不是全部组织都有集成员工数据的状况,所以与用户资源相关的功能在默认状况下隐藏在应用程序的用户界面中,但能够使用功能标记打开。
1.4 组件四:数据生成器
数据生成器是Amundsen的ETL提取框架,它的产生是受到Apache Gobblin的高度启发。ETL有相应的组件,即提取,转换和加载,用于处理记录级操做。组件Task控制全部三个组件。Job是数据生成器中最高级别的组件,控制Task和Publisher。Job在客户端用来启动ETL做业。
在数据生成器中,每一个组件都高度模块化。使用基于名称空间的配置和HOCON(人为优化配置对象表示法),使数据生成器高可用和插件化。例如,在提取器内使用转换,或在提取器内使用提取器。
提取器从源中提取记录。但这并不意味着它仅支持ETL中的pull模式。例如,从消息传递总线中提取记录则是ETL中的push模式。
转换器从提取器或转换器自己获取记录(经过Chained转换器)来转换记录。
加载程序直接从转换器或提取器获取记录,并将它们加载到暂存区。因为加载程序在记录级别操做,所以没法支持原子性。
发布服务器是可选组件。一般的用法是在job级别支持原子性,且/或提供对大批量加载到sink的支持。
下图显示了一个数据生成器做业如何从Hive元存储中获取元数据并将该元数据发布到Neo4j的示例。每一个不一样的元数据源均可以经过不一样的数据生成器做业获取。
在Lyft,使用Apache Airflow做为数据生成器的编排引擎。每一个数据生成器job都将是DAG(有向无环图)中的单个任务。每种类型的数据资源都将有一个单独的DAG,由于它可能必须以不一样的时间运行。
2. Amundsen如何将数据发现大众化
2.1 显示异构数据资源的相关数据
在Lyft,最初将Amazon Redshift做为主要数据仓库。最终,从Redshift迁移到了Hive。随着时间的流逝,数据的数量、复杂性和广度成几何增加。到如今,Hive中的数据量达到了十万个表,而Redshift中的数据量则达到了数千个。
随着Lyft的发展,寻找相关数据源变得愈来愈重要,但随着数据格局变得愈来愈零散、复杂和孤立,这也成为一个更大的挑战。如今,Amundsen使Lyft的全部员工(重新员工到对数据生态系统有丰富经验的员工)都可以快速、独立地找到成功完成平常任务所需的数据资源。
Lyft的数据仓库存储在Hive,全部物理分区存储在S3中。Lyft的用户很是依赖Presto做为Hive表的实时查询引擎,由于它们共享同一个Hive元存储库。经过Presto的每一个查询都记录到Hive表中以便进行审计。在Lyft,若是想向用户展现最重要或最相关的表格,能够利用Databuilder框架来构建查询使用率提取器,经过提取器解析查询日志以获取表使用率数据。而后,以Elasticsearch表文档的方式将该表使用信息持久化。这些信息可帮助搜索服务根据数据库访问日志中的使用状况排名显示最相关的表。
2.2 将不一样的数据资源与人关联
数据全部权可能会使用户感到困惑。例如,不少资源没有人负责。该问题与难以找到数据这一事实交织在一块儿,Amundsen试图以可扩展的方式解决的问题。查找数据的许多过程都包含人与人之间的互动。虽灵活,但容易出错,而且不可扩展。除非碰巧知道可用问谁,不然很是耗时。
Amundsen经过在用户和数据资源之间创建关系来解决此问题,而且经过暴露这些关系来共享部落知识。如下是Amundsen中用户我的资料的示例。
目前,用户与资源之间的关系分为三种类型:已关注、已拥有和已使用。经过公开此信息,经验丰富的用户将本身成为其团队中其余成员以及具备相似职务的其余员工的有用数据资源。例如,新员工能够访问Amundsen并搜索其团队中经验丰富的用户,或进行相似分析的其余员工。而后,新员工将可以查看他们能够考虑更深刻地研究哪些资源,或者与该人联系以获取更多指导。为了使这些部落知识更容易找到,还在内部员工目录的我的资料页面上添加了一个连接,它能够连接到每一个用户的Amundsen我的资料。
此外,还已经开始构建通知功能,若是缺乏现有的元数据上下文,该功能将容许用户向数据资源全部者请求进一步的信息。例如,若是某个表缺乏描述,用户能够直接向Amundsen中该表的全部者发送请求,要求全部者添加该表的描述。
2.3 将丰富的元数据与数据资源关联
捕获数据资源ABC(应用程序上下文、行为、更改)的元数据可提升用户的工做效率。但愿捕获对每种类型的数据资源都有意义的全部元数据。如下展现表格详细信息页面示例,以下所示:
上表页面有两种类型的元数据:
程序方式展现
描述
数据范围或水印
表格统计
拥有者
常用的用户
表的源代码
生成表格的应用程式(如Airflow DAG)
表的记录数
手动添加展现
描述
标签
拥有者
某些元数据(如描述、标签和全部者)能够经过程序方式和手动方式进行管理。要将其余元数据吸取到Amundsen中,开发人员只需利用数据构建器的框架就可进行。他们能够重用现有的提取程序,也能够根据访问源数据的元数据所需的接口构建新的提取程序和模型。
2.4 设计挑战
跨不一样组织扩展索引元数据
将元数据索引入Amundsen中有Pull和Push两种方式:
Pull:经过爬网程序从源中拉取按期更新元数据。
Push:数据源(如数据库)将元数据push消息队列(如Kafka),下游源能够订阅并消费更改。
在启动开发Amundsen时,最初考虑了Push方式,可是Lyft才刚刚开始构建基于Kafka的可靠消息传递平台。结果,构建了数据提取库数据构建器,经过Pull将元数据索引到Amundsen中。不过,Pull是不可扩展的,由于Lyft内的不一样组织更愿意Push元数据到Amundsen。Push模型的好处是容许对元数据进行近实时索引。结果,Lyft目前正在转入混合模型:组织将可以基于预约义的schema将元数据推送到Kafka 的topic中,而Amundsen的数据构建器仍会经过平常的Airflow DAG拉取元数据。
2.5 删除和清除陈旧的数据
Amundsen当前不提供元数据版本控制。当Databuilder Airflow DAG完成时,将最新的元数据插入到图中。最初,没有删除过期的元数据,所以当从数据存储中删除表时,该表的元数据在Amundsen中仍然存在。这给用户带来了一些困惑,所以在DAG工做流中添加了一个单独的图形清理Airflow任务以删除过期的元数据。从长远来看,计划向数据集添加版本控制,以便用户能够看到数据集的演变方式,而不只仅是查看元数据的当前或最新快照。
2.6 使用图模型进行数据建模
Amundsen选择了图形数据模型来表示其元数据。图形数据模型不是大多数应用程序的经常使用选择,可是它很是适合Amundsen,由于它处理实体之间的许多关系。图形数据模型用于表示实体(点)和关系(边)之间的关系。借助此特性,当引入更多实体时,能够轻松扩展模型。在图形数据建模中,须要作出的设计决策之一是肯定是将新信息添加为实体的属性仍是做为新实体。在Amundsen中,最后决定添加一个新实体做为默认选择,由于这为与其余实体创建关系提供了机会。
2.7开源社区
做为开源软启动的一部分,Lyft于2019年2月将Amundsen的代码存储库公开。从那时起,Lyft一直与ING和Square等公司的一些早期使用者的优秀工程师合做。用户不只限于这些组织。对于未列出的,敬请谅解。
Amundsen兼容行业中一些流行的数据仓库,包括但不限于:Snowflake,Hive,Redshift,Postgres,Presto等。
截止到今天,有几家公司在生产中使用了Amundsen,有20多我的向Amundsen贡献了源码,包括对有价值的功能的支持,例如BigQuery和Redshift(Databuilder)的新提取器,支持Amundsen与Apache Atlas集成(元数据服务和搜索服务)和Markdown格式支持,以便用户UI界面中进行描述编辑。在撰写本文时,Lyft拥有60+公司和250名用户的活跃社区,也欢迎其余人加入。
3.将来
向前迈进,Lyft目前正在努力进行许多改进,并但愿与社区一块儿解决新功能。Lyft的路线图目前包括:
搜索和资源页面UI / UX从新设计
电子邮件通知系统
索引仪表板(Superset,Mode Analytics,Tableau等)
血缘关系整合
Granular ACL(访问控制)
更多详细信息,请查看Amundsen的开源路线图文档。Amundsen已在Lyft投入生产运行了一年多,在Lyft内部大约有1000名周活跃用户。对于数据科学家、研究科学家和数据工程师等技术角色,Lyft具备极高的渗透率(90 +%),同时市场营销和社区合做伙伴等业务用户也使用Lyft的产品。
将来,Lyft将继续与内部和外部不断发展的社区合做,以改善数据发现体验并提升用户的工做效率。最后但并不是最不重要的一点,请经过开源代码Slack channel加入社区。
欲了解智领云更详细的信息,请点击【阅读原文】
福利
扫描添加小编微信,备注“姓名+公司职位”,加入【大数据学习交流群】,和志同道合的朋友们共同打卡学习!
关于智领云
武汉智领云科技有限公司于2016年成立于武汉光谷,专一于大数据、云计算领域的核心技术研发。公司创始团队成员来自于推特(Twitter)、苹果(Apple)和艺电(EA)等硅谷知名企业,拥有多年的云计算和大数据系统的软件开发、项目运做和公司管理的经验。公司已经得到了数千万元国内外著名风险投资机构及天使投资人的投资。公司研发的BDOS(大数据操做系统)采用业界领先的容器技术对大数据系统须要的各类组件进行标准化和产品化,在统一的云平台架构下运行,为物联网、机器学习、人工智能、商业智能、互联网应用提供全面的大数据平台及运维支持,快速高效地实施、开发和管理一个企业级的大数据系统。BDOS使用户可集中精力在业务逻辑上而无须考虑系统底层技术细节,极大地提升了大数据及人工智能应用的开发效率,下降运维成本,持续高效地实现大数据价值。
推荐阅读:
本文分享自微信公众号 - 开源村OSV(osvosvosv)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。