热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

只需3分钟,快速了解大数据平台架构

点击“蓝字”关注我们本文转自:大数据杂谈作者丨侠天大数据架构背后的哲理Airbnb公司提倡数据信息化,凡事以数据说话。收集指标,通过实验验

 点击“蓝字”关注我们

本文转自:大数据杂谈

作者丨侠天

大数据架构背后的哲理

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

经过多版本迭代之后,大数据架构栈基本稳定、可靠和可扩展。

James Mayfield说,“我们每天使用着开源社区提供的优秀的项目,这些项目让大家更好的工作。我们在使用这些有用的项目得到好处之后也得反馈社区。”

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

  • 多关注开源社区:在开源社区有很多大数据架构方面优秀的资源,需要去采用这些系统。同样,当我们自己开发了有用的项目也最好回馈给社区,这样会良性循环。

  • 多采用标准组件和方法:有时候自己造轮子并不如使用已有的更好资源。当凭直觉去开发出一种“与众不同”的方法时,你得考虑维护和修复这些程序的隐性成本。

  • 确保大数据平台的可扩展性:当前业务数据已不仅仅是随着业务线性增长了,而是爆发性增长。我们得确保产品能满足这种业务的增长。

  • 多倾听同事的反馈来解决问题:倾听公司数据的使用者反馈意见是架构路线图中非常重要的一步。

  • 预留多余资源:集群资源的超负荷使用让我们培养了一种探索无限可能的文化。对于架构团队来说,对资源利用最大化还高兴的太早,但Airbnb大数据团队总是假设数据仓库的会有新的商业机会来抵消这些额外的机器费用。

大数据架构预览

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

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文件,容易访问数据和元数据管理。

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时间

  • 读吞吐量提高了三倍

  • 写吞吐量提高了两倍

  • 成本减少百分之七十

- FIN -

福利

关注我们,后台回复关键字,即可领取相应白皮书资料

1、关键字:直播7 ,获取直播回放《硅谷“数据中台”实践》

2、

2、关键字:大数据图谱,获取《2020中国大数据产业生态地图暨中国大数据产业发展白皮书》

3、关键字:新基建白皮书,获取《“新基建”政策白皮书》

扫描添加小编微信,备注“姓名+公司职位”,加入【大数据学习交流群】,和志同道合的朋友们共同打卡学习!

更多精彩推

  • 定位云原生数据中台,「智领云」获数千万元A轮融资

  • 硅谷速递 | 硅谷2020最新大数据学习路线:科学使用这一招,12周助你成为数据分析师

  • 【必读!】Twitter数据平台的架构演化:分析数据的数据发现和消费

  • 2020人工智能应用挑战赛前瞻 | 专家委员会强大阵容,震撼发布!

  • Uber 大数据平台的演进(2014~2019)

  • 数据平台、大数据平台、数据中台……傻傻分不清?这次终于有人讲明白了……

????更多智领云科技详细内容,点击“阅读原文”


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
author-avatar
pet宠物情缘
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有