Uber:100 PB大数据平台演化简史

2018 年 11 月 12 日

Uber:100 PB大数据平台演化简史

Uber 的工程团队撰写一篇文章,介绍了他们的大数据平台如何从传统的基于关系型数据库的 ETL 作业演变为基于 Hadoop 和 Spark 的平台。可扩展的摄取模型、标准传输格式和用于增量更新的自定义库是这个平台的关键组件。


Uber 的各个团队使用大数据来预测乘客需求、欺诈检测、地理空间计算以及解决乘客注册流程的瓶颈问题。他们在 2014 年之前开发的初始解决方案基于 MySQL 和 PostgreSQL。那个时候,他们的数据相对较少——几 TB——可以放在这些 RDBMS 中,用户必须知道如何进行跨数据库查询。城市运营团队、数据科学家和分析师以及工程团队在使用这些数据。在进行工程标准化后,他们开始采用Vertica——一个面向列的分析平台——由 Extract-Transform-Load(ETL)作业提供支持。自定义查询服务通过 SQL 提供对数据的访问。数据量开始增长到数十 TB,同时使用这些数据的团队和服务数量也在增长。Uber 在这个阶段面临的主要问题是缺乏水平可扩展性,由于数据生产者和消费者之间缺乏正式模式,导致成本增加和数据丢失。


工程团队在下一阶段采用了 Hadoop,从多个数据存储提取数据而不对数据进行转换。Apache Spark、Apache Hive 和 Presto 作为查询引擎,是整个技术栈的组成部分。Vertica 速度很快,但扩展成本很高,而 Hive 存在的问题恰好相反。使用自定义模式服务将模式和数据存储在一起解决了前一阶段所面临的问题。数据量增长到数十 PB,数据基础设施每天在 10000 个虚拟 CPU 核心上运行 10 万个作业。


尽管具备了水平可扩展性,但仍然遇到了 HDFS 瓶颈。在 HDFS 集群中,NameNode 负责跟踪集群中每个文件的保存位置,并维护目录树。HDFS 针对大型文件的流式访问进行了优化,太多的小文件导致访问效率低下。当他们的数据量超过 10 PB 时,这个问题就出现了。他们通过调整 NameNode 垃圾回收、限制小文件数量和 HDFS 负载管理服务来缓解 HDFS 瓶颈问题。此外,数据无法以最快的速度提供给最终用户。Uber 工程经理 Reza Shiftehfar 写道:


Uber 的业务是实时运行的,因此,我们的服务需要访问尽可能新鲜的数据。为了加速数据交付,我们不得不重新构建我们的管道,以便只提取增量的更新过的和新的数据。



图片来源


结果出来的是一个叫作Hudi(Hadoop Upserts anD Incrementals)的自定义 Spark 库。它在 HDFS 和 Parquet(存储文件格式)之上构建了一个层,允许更新和删除,从而可以进行增量的 ETL 作业。Hudi 的原理是让用户使用上一个检查点时间戳进行查询,以获取自检查点以来已更新的所有数据,不需要进行全表扫描。这使得模型化数据的延迟从 24 小时缩短到不到一个小时,原始数据的延迟缩短到 30 分钟。


除了 Hudi,Uber 大数据平台最新阶段的另一个组件是通过 Apache Kafka 摄取数据。一个叫作Marmaray的组件从 Kafka 获取数据变更,并使用 Hudi 库将它们推送到 Hadoop。所有这些都是使用 Apache Mesos 和 YARN 编排的。Mesos 适合长期运行的服务,YARN 适合批处理和 Hadoop 作业。Uber 使用了基于 Mesos 构建的自定义调度程序框架Peloton来管理计算工作负载。


查看英文原文The Evolution of Uber’s 100+ Petabyte Big Data Platform


2018 年 11 月 12 日 09:461148
用户头像

发布了 731 篇内容, 共 359.6 次阅读, 收获喜欢 1824 次。

关注

评论

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

关于编码的一点“思考”

damnever

golang 思考 抽象 分层架构 编码

一文带你学会 Blob(含 7 个使用场景)

pingan8787

Java 前端 Web Blob

架构师训练营作业 -Week4

wyzwlj

极客大学架构师训练营

ARTS-WEEK5

一周思进

ARTS 打卡计划

python中对字典与列表组合进行排序

开心太平洋

Python List 排序

CECBC带你一图看懂区块链

CECBC区块链专委会

CECBC 区块链技术 去中心化

《架构师训练营》第四周命题作业

重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」

小傅哥

Java 设计模式 小傅哥 重构 备忘录模式

自由职业的前半年,我是如何度过的?

王磊

Java 程序员 程序员人生 程序员成长

阿里待遇那么好,你为什么从阿里离职?

互联网架构师小马

Java 阿里巴巴 程序员 找工作 离职

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?

朱月俊

快来解锁Pepper机器人新技能,够酷Pepper就跟你回家!

阿甜

编程 开发者 App 开发 机器人

互联网系统常见问题以及解决方案

而立

极客大学架构师训练营

Linux系统查询端口命令

打鱼小王子

原来使用Postman如此简单,API测试之Postman使用全指南

软测小生

接口 Postman 接口测试 API API测试

MyBatis标签trim,你不会以为我是去空格的吧?

Java小咖秀

Java mybatis Java 面试

架构师训练营 - 学习笔记 - 第四周

心在飞

极客大学架构师训练营

安畅迁移平台的云原生之路

雪雷

Kubernetes DevOps 云原生 CI/CD 迁移

架构师训练营 - 第四周命题作业

牛牛

极客大学架构师训练营 作业

区块链冷链食品追溯系统

CECBC区块链专委会

区块链技术 上链 溯源 浙冷链

《架构师训练营》第四周总结

学习总结 - 第 4 周

饶军

央行数字货币:第三方支付产业新变量

CECBC区块链专委会

数字货币 DCEP 区块链技术

架构师训练营第四周学习总结

CATTY

消息队列(三)如何保证消息不被重复消费?

奈何花开

Java MQ 消息队列

谈反应式编程在服务端中的应用,数据库操作优化,提速 Upsert

newbe36524

C# MySQL 数据库 mongodb Reactive

围绕 Office 365 的那些 CLI

手艺人杨柳

Office 365

太厉害了!阿里年薪120W架构师整理的学习笔记,看完收获良多

互联网架构师小马

Java 学习 阿里巴巴 程序员 架构师

系统架构感想

朱月俊

小师妹学JVM之:JIT中的PrintAssembly

程序那些事

JVM 小师妹 性能调优 JIT 汇编

GO语言泛型编程实践

老胡爱分享

go 泛型

Uber:100 PB大数据平台演化简史-InfoQ