速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

Airbnb 的大数据平台架构

  • 2016-03-24
  • 本文字数:3220 字

    阅读完需:约 11 分钟

Airbnb 成立于 2008 年 8 月,拥有世界一流的客户服务和日益增长的用户社区。随着 Airbnb 的业务日益复杂,其大数据平台数据量也迎来了爆炸式增长。

本文为 Airbnb 公司工程师 James Mayfield 分析的 Airbnb 大数据平台构架,提供了详尽的思想和实施。

Part 1:大数据架构背后的哲理

Airbnb 公司提倡数据信息化,凡事以数据说话。收集指标,通过实验验证假设、构建机器学习模型和挖掘商业机会使得 Airbnb 公司高速、灵活的成长。

经过多版本迭代之后,大数据架构栈基本稳定、可靠和可扩展的。本文分享了 Airbnb 公司大数据架构经验给社区。后续会给出一系列的文章来讲述分布式架构和使用的相应的组件。James Mayfield 说,“我们每天使用着开源社区提供的优秀的项目,这些项目让大家更好的工作。我们在使用这些有用的项目得到好处之后也得反馈社区。”

下面基于在 Airbnb 公司大数据平台架构构建过程的经验,给出一些有效的观点。

  • 多关注开源社区:在开源社区有很多大数据架构方面优秀的资源,需要去采用这些系统。同样,当我们自己开发了有用的项目也最好回馈给社区,这样会良性循环。
  • 多采用标准组件和方法:有时候自己造轮子并不如使用已有的更好资源。当凭直觉去开发出一种“与众不同”的方法时,你得考虑维护和修复这些程序的隐性成本。
  • 确保大数据平台的可扩展性:当前业务数据已不仅仅是随着业务线性增长了,而是爆发性增长。我们得确保产品能满足这种业务的增长。
  • 多倾听同事的反馈来解决问题:倾听公司数据的使用者反馈意见是架构路线图中非常重要的一步。
  • 预留多余资源:集群资源的超负荷使用让我们培养了一种探索无限可能的文化。对于架构团队来说,经常沉浸在早期资源充足的兴奋中,但 Airbnb 大数据团队总是假设数据仓库的新业务规模比现有机器资源大。

Part 2:大数据架构预览

这里是大数据平台架构一览图。

Airbnb 数据源主要来自两方面:数据埋点发送事件日志到 Kafka;MySQL 数据库 dumps 存储在 AWS 的 RDS,通过数据传输组件 Sqoop 传输到 Hive“金”集群(其实就是 Hive 集群,只是 Airbnb 内部有两个 Hive 集群,分别为“金”集群和“银”集群,具体分开两个集群的原因会在文章末尾给出。)。

包含用户行为以及纬度快照的数据发送到 Hive“金”集群存储,并进行数据清洗。这步会做些业务逻辑计算,聚合数据表,并进行数据校验。

在以上架构图中,Hive 集群单独区分“金”集群和“银”集群大面上的原因是为了把数据存储和计算进行分离。这样可以保证灾难性恢复。这个架构中,“金”集群运行着更重要的作业和服务,对资源占用和即席查询可以达到无感知。“银”集群只是作为一个产品环境。

“金”集群存储的是原始数据,然后复制“金”集群上的所有数据到“银”集群。但是在“银”集群上生成的数据不会再复制到“金”集群。你可以认为 “银”集群是所有数据的一个超集。由于 Airbnb 大部分数据分析和报表都出自“银”集群,所以得保证“银”集群能够无延迟的复制数据。更严格的讲,对于“金”集群上已存在的数据进行更新也得迅速的同步到“银”集群。集群间的数据同步优化在开源社区并没有很好的解决方案,Airbnb 自己实现了一个工具,后续文章会详细的讲。

在 HDFS 存储和 Hive 表的管理方面做了不少优化。数据仓库的质量依赖于数据的不变性(Hive 表的分区)。更进一步,Airbnb 不提倡建立不同的数据系统,也不想单独为数据源和终端用户报表维护单独的架构。以以往的经验看,中间数据系统会造成数据的不一致性,增加 ETL 的负担,让回溯数据源到数据指标的演化链变得异常艰难。Airbnb 采用 Presto 来查询 Hive 表,代替 Oracle、 Teradata、 Vertica、 Redshift 等。在未来,希望可以直接用 Presto 连接 Tableau。

另外一个值得注意的几个事情,在架构图中的 Airpal ,一个基于 Presto,web 查询系统,已经开源。Airpal 是 Airbnb 公司用户基于数据仓库的即席 SQL 查询借口,有超过 1/3 的 Airbnb 同事在使用此工具查询。任务调度系统 Airflow ,可以跨平台运行 Hive,Presto,Spark,MySQL 等 Job,并提供调度和监控功能。Spark 集群时工程师和数据分析师偏爱的工具,可以提供机器学习和流处理。S3 作为一个独立的存储,大数据团队从 HDFS 上收回部分数据,这样可以减少存储的成本。并更新 Hive 的表指向 S3 文件,容易访问数据和元数据管理。

Part 3:Hadoop 集群演化

Airbnb 公司在今年迁移集群到“金和银”集群。为了后续的可扩展,两年前迁移 Amazon EMR 到 EC2 实例上运行 HDFS,存储有 300 TB 数据。现在,Airbnb 公司有两个独立的 HDFS 集群,存储的数据量达 11PB。S3 上也存储了几 PB 数据。

下面是遇到的主要问题和解决方案:
A) 基于 Mesos 运行 Hadoop
早期 Airbnb 工程师发现 Mesos 计算框架可以跨服务发布。在 AWS c3.8xlarge 机器上搭建集群,在 EBS 上存储 3TB 的数据。在 Mesos 上运行所有 Hadoop、 Hive、Presto、 Chronos 和 Marathon。

基于 Mesos 的 Hadoop 集群遇到的问题:

  • Job 运行和产生的日志不可见
  • Hadoop 集群健康状态不可见
  • Mesos 只支持 MR1
  • task tracker 连接导致性能问题
  • 系统的高负载,并很难定位
  • 不兼容 Hadoop 安全认证 Kerberos

解决方法:不自己造轮子,直接采用其它大公司的解决方案。

B) 远程读数据和写数据
所有的 HDFS 数据都存储在持久性数据块级存储卷(EBS),当查询时都是通过网络访问 Amazon EC2。Hadoop 设计在节点本地读写速度会更快,而现在的部署跟这相悖。

Hadoop 集群数据分成三部分存储在 AWS 一个分区三个节点上,每个节点都在不同的机架上。所以三个不同的副本就存储在不同的机架上,导致一直在远程的读数据和写入数据。这个问题导致在数据移动或者远程复制的过程出现丢失或者崩溃。

解决方法:使用本地存储的实例,并运行在单个节点上。

C) 在同构机器上混布任务
纵观所有的任务,发现整体的架构中有两种完全不同的需求配置。Hive/Hadoop/HDFS 是存储密集型,基本不耗内存和 CPU。而 Presto 和 Spark 是耗内存和 CPU 型,并不怎么需要存储。在 AWS c3.8xlarge 机器上持久性数据块级存储卷(EBS)里存储 3 TB 是非常昂贵的。

解决方法:迁移到 Mesos 计算框架后,可以选择不同类型的机器运行不同的集群。比如,选择 AWS c3.8xlarge 实例运行 Spark。AWS 后来发布了“D 系列”实例。从 AWS c3.8xlarge 实例每节点远程的 3 TB 存储迁移数据到 AWS d2.8xlarge 4 TB 本地存储,这给 Airbnb 公司未来三年节约了上亿美元。

D) HDFS Federation
早期 Airbnb 公司使用 Pinky 和 Brain 两个集群联合,数据存储共享,但 mappers 和 reducers 是在每个集群上逻辑独立的。这导致用户访问数据需要在 Pinky 和 Brain 两个集群都查询一遍。并且这种集群联合不能广泛被支持,运行也不稳定。

解决方法:迁移数据到各 HDFS 节点,达到机器水平的隔离性,这样更容易容灾。

E) 繁重的系统监控
个性化系统架构的严重问题之一是需要自己开发独立的监控和报警系统。Hadoop、Hive 和 HDFS 都是复杂的系统,经常出现各种 bug。试图跟踪所有失败的状态,并能设置合适的阈值是一项非常具有挑战性的工作。

解决方法:通过和大数据公司 Cloudera 签订协议获得专家在架构和运维这些大系统的支持。减少公司维护的负担。Cloudera 提供的 Manager 工具减少了监控和报警的工作。

最后陈述

在评估老系统的问题和低效率后进行了系统的修复。无感知的迁移 PB 级数据和成百上千的 Jobs 是一个长期的过程。作者提出后面会单独写相关的文章,并开源对于的工具给开源社区。 大数据平台的演化给公司减少大量成本,并且优化集群的性能,下面是一些统计数据:

  • 磁盘读写数据的速度从 70 – 150 MB / sec 到 400 + MB / sec。
  • Hive 任务提高了两倍的 CPU 时间
  • 读吞吐量提高了三倍
  • 写吞吐量提高了两倍
  • 成本减少百分之七十

查看英文原文: Data Infrastructure at Airbnb


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-03-24 19:0011235
用户头像

发布了 43 篇内容, 共 28.7 次阅读, 收获喜欢 7 次。

关注

评论

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

聚道云软件连接器助力建筑企业实现资金系统与易快报的无缝对接

聚道云软件连接器

案例分享

OH与AI绘画的碰撞,打造个性化视觉艺术

白晓明

OpenHarmony Stable Diffusion Ai绘图

聚道云助力企业数字化转型:金蝶云星空与旺店通无缝对接

聚道云软件连接器

案例分享

AI 时代:保持好奇心

石云升

AI 年终总结

Merlin Protocol 推出 BRC20 Indexer Oracle 基础设施

TerpLayer

区块链

RocksDB深度解析

俞凡

架构

旧年好,祝新年更好

阿里云CloudImagine

云计算 视频云

2023年12月 GitHub 关注度最高的前十名

晴空万里

GitHub github Contributing

替代企业微信、钉钉等平台,WorkPlus打造企业完美的私有化部署解决方案

WorkPlus

DAPP矩阵公排模式系统开发

l8l259l3365

快速体验Spark Connect

CloudEon开源

WorkPlus私有化即时通讯的标杆,助力企业实现信息管控与保障

WorkPlus

文心一言 VS 讯飞星火 VS chatgpt (168)-- 算法导论13.2 1题

福大大架构师每日一题

福大大架构师每日一题

混合专家语言的快速推理的大模型

想得开居士

mxxWechatBot微信机器人V2(流程图、原理)

穆雄雄

微信机器人 mxxWechatBot

mxxWechatBot微信机器人V2使用教程(图文)最全最详细

穆雄雄

微信机器人 mxxWechatBot

音视频:音视频的编解码 | 社区征文

笨笨的鸟

音视频

CloudEon V1.3.0版本发布!

CloudEon开源

技术写作:漏斗内容策略、认知博客、支柱内容、研究报告、通用门控内容、电子书和教程

小万哥

程序人生 软件工程 博客 后端开发 技术写作

保护你的游戏服务器——游戏盾的功能和优势

德迅云安全_初启

聚道云软件连接器助力哗啦啦与开联通预付卡无缝对接

聚道云软件连接器

案例分享

聚道云软件连接器助力精成MES与金蝶K3wise的无缝对接

聚道云软件连接器

案例分享

技术人的 2023 总结|AI大模型探索

世人万千丶

开发者 前端 AI大模型

高效视频处理框架BMF实践

轻口味

音视频

WorkPlus:领先的IM即时通讯软件,打造高效沟通协作新时代

WorkPlus

聚道云软件连接器助力宁波银行与金蝶产品高效对接

聚道云软件连接器

案例分享

2023年实时音视频行业观察-黄金时代彻底过去

轻拿轻放

音视频

Linux学习笔记0 - 三个感想

袁世超

Linux 学习 内核

实战rabbitmq-exporter,prometheus实现rabbitmq监控

智慧源点

​我的 2023 年度自我总结

Java 工程师蔡姬

程序员 大厂 年终总结

文心一言 VS 讯飞星火 VS chatgpt (169)-- 算法导论13.2 2题

福大大架构师每日一题

福大大架构师每日一题

Airbnb的大数据平台架构_大数据_侠天_InfoQ精选文章