AI实践哪家强?来 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:0011695
用户头像

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

关注

评论

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

涨薪5K的Java虚拟机:垃圾回收,Serial GC,卡表你想学吗?

小Q

Java 学习 面试 JVM GC

进公司不会用 Git 拉项目!第二天被开除?

Java架构师迁哥

聪明人的训练(十五)

Changing Lin

4月日更

无代码开发会是未来的趋势吗?

优秀

无代码

看了这篇MySQL,开发功力又升级

学Java关注我

Java 编程 程序员 架构 计算机

如何用 Electron + WebRTC 开发一个跨平台的视频会议应用

阿里云CloudImagine

阿里云 音视频 WebRTC Electron 视频云

数据虚拟化引擎openLooKeng介绍

LooK

大数据 数据分析 Bigdata

阿里P8亲自讲解!带你一步一步深入Handler源码,满满干货指导

欢喜学安卓

android 程序员 面试 移动开发

iOS 面试策略之算法基础4-5节

iOSer

ios 面试 算法面经 算法解析

程序员快乐的一天!

BinTools图尔兹

程序员 运维 开发 dba 数据库管理工具

iceberg查询加速原理

聚变

ConcurrentHashMap源码深度解析(一)(java8)不可不知的基本概念(助你拿下源码事半功倍)

徐同学呀

ConcurrentHashMap Java源码 JUC

区块链食品安全追溯系统,区块链溯源优势

13530558032

一文看懂Modbus协议

不脱发的程序猿

物联网 通信协议 智能硬件 4月日更 Modbus协议

HDFS的动态扩容及动态缩容

五分钟学大数据

hadoop hdfs 4月日更

智慧平安社区整体解决方案,智慧安防小区建设

13530558032

一个单例还能写出花来吗?

艾小仙

Java 设计模式

ConcurrentHashMap 源码深度解析(java7)原来如此简单(写的真好,建议收藏)

徐同学呀

ConcurrentHashMap Java源码 JUC

科技赋能快餐零售商突破瓶颈:英特尔AI技术助力汉堡王打造保护顾客隐私的订单推荐系统

E科讯

有道写作浏览器扩展实践

有道技术团队

大前端 浏览器 有道云笔记

混沌大佬系列第二期 - Jesse Robbins

混沌工程实践

混沌工程 混沌大佬 灾难大师 游戏日 GameDay

阿里P8大牛亲自教你!带你快速通过面试,Android岗

欢喜学安卓

android 程序员 面试 移动开发

知乎载量破100W !阿里大佬的Java性能调优实战手册 一网打尽BAT大厂

比伯

Java 程序员 架构 面试

编排包在设计与运行两态之间的运用价值体现

鲸品堂

服务编排 实践案例

portal 认证 - 下线流程

箭上有毒

4月日更

2021年5个最佳YouTube视频下载器

科技猫

软件 工具 网站 分享 下载youtube视频

ConcurrentHashMap源码深度解析(二)(java8)直呼Doug Lea是真的细(带你参透扩容机制)

徐同学呀

ConcurrentHashMap Java源码 JUC

区块链电子合同一体化平台--破解信任难题

13530558032

直播选择 RTC 还是 RTMP?

anyRTC开发者

音视频 WebRTC CDN RTC RTMP

Python和Java的区别

Sakura

4月日更

Spark数据倾斜解决方案

大数据技术指南

spark 4月日更

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