Google大数据架构深度探秘,带你了解海量数据处理机制
Google是大数据时代的奠基者,其大数据技术架构一直是互联网公司争相学习和 研究的重点,也是行业大数据技术架构的标杆和示范。
1、谷歌的数据中心
谷歌已经建立了世界上最快、最强大、最高质量的数据中心,它的8个主要数据中心都远离其位于加州山景城的总部,分别位于美国南卡罗来纳州的伯克利郡,爱荷华州的康瑟尔布拉夫斯,乔治亚州的道格拉斯郡,俄克拉荷马州的梅斯郡,北卡罗来纳州的勒努瓦,俄勒冈州的达尔斯;另外2个在美国境外,分别是芬兰的哈米纳和比利时的圣吉斯兰。此外,谷歌公司还在中国香港和中国台湾,以及新加坡和智利建立了数据中心。
2、谷歌新一代搜索引擎平台和大数据分析核心技术
Google是GFS MapReduce BigTable的缔造者,但Google 新一代搜索引擎平台正逐步用更强计算能力的系统来替换原有系统,新一代搜索引擎平台有几个核心技术系统:
一是用基于Percolator的增量处理索引系统来取代MapReduce批处理索引系统,这个索引系统被称作Caffeine,它比MapReduce批处理索引系统搜索更快。
二是专为BigTable设计的分布式存储Colossus,也被称为GFS2(二代Google文件系统),它专为建立Caffeine搜索索引系统而用。
三是列存储数据库BigTable,但为了更好地支持大数据集的互动分析,Google推出了Dremel和PowerDrill。Dremel被设计用来管理非常大量的大数据集(指数据集的数量和每数据集的规模都大),而PowerDrill则设计用来分析少量的大数据集(指数据集的规模大,但数据集的数量不多)时提供更强大的分析性能。
四是为Google Instant提供服务的实时搜索引擎存储和分析架构。
五是Pregel,这是谷歌更快捷的网络和图算法。
在谷歌新一代搜索引擎平台上,每月40亿小时的视频,4.25亿Gmail用户,150,000,000 GB Web索引,却能实现0.25秒搜索出结果。
3、谷歌基础云服务
基于Colossus,谷歌为用户提供计算、存储和应用的云服务。计算服务包括计算的引擎(ComputeEngine)和应用APP的引擎(AppEngine);存储服务包括云存储(CloudStorge)、云SQL(CLoudSQL)、云数据存储(Cloud DataStore)、永久磁盘等服务;云应用服务包括BigQuery、云终端(Cloud Endpoints)、缓冲、队列等。
4、谷歌的大数据智能应用服务
Google提供的大数据分析智能应用包括客户情绪分析、交易风险(欺诈分析)、产品推荐、消息路由、诊断、客户流失预测、法律文案分类、电子邮件内容过滤、政治倾向预测、物种鉴定等多个方面。据称,大数据已经给Google每天带来2300万美元的收入。例如,一些典型应用如下:
(1)基于Map Reduce,Google的传统应用包括数据存储、数据分析、日志分析、搜索质量以及其他数据分析应用。
(2)基于Dremel系统, Google推出其强大的数据分析软件和服务 — BigQuery,它也是Google自己使用的互联网检索服务的一部分。Google已经开始销售在线数据分析服务,试图与市场上类似亚马逊网络服务(Amazon Web Services)这样的企业云计算服务竞争。这个服务,能帮助企业用户在数秒内完成万亿字节的扫描。
(3)基于搜索统计算法,Google推出搜索引擎的输写纠错、统计型机器翻译等服务。
(4)Google的趋势图应用。通过用户对于搜索词的关注度,很快的理解社会上的热点是什么。对广告主来说,它的商业价值就是很快的知道现在用户在关心什么,他们应该在什么地方投入一个广告。据此,Google公司也开发了一些大数据产品,如“Brand Lift in Adwords”、“Active GRP”等,以帮助广告客户分析和评估其广告活动的效率。
(5)Google Instant。输入关键词的过程,Google Instant 会边打边预测可能的搜索结果。
谷歌的大数据平台架构仍在演进中,追去的目标是更大数据集、更快、更准确的分析和计算。这将进一步引领大数据技术发展的方向。
Bingdata优网助帮汇聚多平台采集的海量数据,通过大数据技术的分析及预测能力为企业提供智能化的数据分析、运营优化、投放决策、精准营销、竞品分析等整合营销服务。
北京优网助帮信息技术有限公司(简称优网助帮)是以大数据为基础,并智能应用于整合营销的大数据公司,隶属于亨通集团。Bingdata是其旗下品牌。优网助帮团队主要来自阿里、腾讯、百度、金山、搜狐及移动、电信、联通、华为、爱立信等著名企业的技术大咖,兼有互联网与通信运营商两种基因,为大数据的算法分析提供强大的技术支撑
一、大数据平台
大数据在工作中的应用有三种:
与业务相关,比如用户画像、风险控制等;
与决策相关,数据科学的领域,了解统计学、算法,这是数据科学家的范畴;
与工程相关,如何实施、如何实现、解决什么业务问题,这是数据工程师的工作。
数据工程师在业务和数据科学家之间搭建起实践的桥梁。本文要分享的大数据平台架构技术选型及场景运用偏向于工程方面。
如图所示,大数据平台第一个要素就是数据源,我们要处理的数据源往往是在业务系统上,数据分析的时候可能不会直接对业务的数据源进行处理,而是先经过数据采集、数据存储,之后才是数据分析和数据处理。
从整个大的生态圈可以看出,要完成数据工程需要大量的资源;数据量很大需要集群;要控制和协调这些资源需要监控和协调分派;面对大规模的数据怎样部署更方便更容易;还牵扯到日志、安全、还可能要和云端结合起来,这些都是大数据圈的边缘,同样都很重要。
二、数据源的特点
数据源的特点决定数据采集与数据存储的技术选型,我根据数据源的特点将其分为四大类:
第一类:从来源来看分为内部数据和外部数据;
第二类:从结构来看分为非结构化数据和结构化数据;
第三类:从可变性来看分为不可变可添加数据和可修改删除数据;
第四类,从规模来看分为大量数据和小量数据。
内部数据
来自企业内部系统,可以采用主动写入技术(push),从而保证变更数据及时被采集。
外部数据
企业要做大数据的话肯定不会只局限于企业内部的数据,比如银行做征信,就不能只看银行系统里的交易数据和用户信息,还要到互联网上去拉取外部数据。
外部数据分为两类:
一类是要获取的外部数据本身提供API,可以调用API获取,比如微信;
另一类是数据本身不提供API,需要通过爬虫爬取过来。
这两类数据都不是我们可控制的,需要我们去获得,它的结构也可能跟我们企业内部数据的结构不一样,还需要进行转换,爬虫爬取的数据结构更乱,因此大数据平台里需要做ETL,由ETL进行数据提取、转换、加载,清洗、去重、去噪,这个过程比较麻烦。爬虫爬过来的数据往往是非结构性的、文档型的数据,还有视频、音频,这就更麻烦了。
结构化数据 & 非结构化数据
结构化和非结构化数据在存储时的选型完全不同,非结构化数据偏向于文件,或者选择NoSQL数据库;考虑到事务的一致性,我们也可能选择传统的数据库。
不变可添加数据
如果数据源的数据是不变的,或者只允许添加(通常,数据分析的事实表,例如银行交易记录等都不允许修改或删除),则采集会变得非常容易,同步时只需要考虑最简单的增量同步策略,维持数据的一致性也相对变得容易。
对于大数据分析来说,我们每天在处理的数据大部分是不可变更的。正如Datomic数据库的设计哲学就是数据为事实(fact),它是不可变的,即数据是曾经发生的事实,事实是不可以被篡改的,哪怕改一个地址,从设计的角度来说也不是改动一个地址,而是新增了一个地址。交易也是如此。
可修改可删除数据
银行的交易记录、保险单的交易记录,互联网的访客访问记录、下单记录等都是不可变的。但是数据源的数据有些可能会修改或删除,尤其是许多维表经常需要变动。要对这样的数据进行分析处理,最简单的办法就是采用直连形式,但直连可能会影响数据分析的效率与性能,且多数数据模型与结构可能不符合业务人员进行数据分析的业务诉求。如果采用数据采集的方式,就要考虑同步问题。
大数据量
针对大数据量,如果属于高延迟的业务,可以采用batch的处理方式,实时分析则需要使用流式处理,将两者结合就是Lambda架构,即有实时处理、又能满足一定的大数据量,这是现在比较流行的大数据处理方式。
三、数据存储的技术选型
大数据平台特征:相同的业务数据会以多种不同的表现形式,存储在不同类型的数据库中,形成一种poly-db的数据冗余生态。
先把数据源进行分类,然后根据其特点判断用什么方式采集,采集之后要进行存储。数据存储的技术选型依据有三点:
第一点取决于数据源的类型和采集方式。比如非结构化的数据不可能拿一个关系数据库去存储。采集方式如果是流失处理,那么传过来放到Kafka是最好的方式。
第二点取决于采集之后数据的格式和规模。比如数据格式是文档型的,能选的存储方式就是文档型数据库,例如MongoDB;采集后的数据是结构化的,则可以考虑关系型数据库;如果数据量达到很大规模,首选放到HDFS里。
第三点是分析数据的应用场景。根据数据的应用场景来判定存储技术选型。
场景一:舆情分析
做舆情分析的时候客户要求所有数据存放两年,一天600多万,两年就是700多天×600多万,几十亿的数据。而且爬虫爬过来的数据是舆情,做了分词之后得到的可能是大段的网友评论,客户要求对舆情进行查询,做全文本搜索,并要求响应时间控制在10s以内。
我们后来选择用ES,在单机上做了一个简单的测试,大概三亿多条数据,用最坏的查询条件进行搜索,保证这个搜索是全表搜索(基于Lucence创建了索引,使得这种搜索更高效),整个查询时间能控制在几秒以内。
如图所示,爬虫将数据爬到Kafka里,在里面做流处理,去重去噪做语音分析,写到ElasticSearch里。我们做大数据的一个特点是多数据库,会根据不同的场景选择不同的数据库,所以会产生大量的冗余。
场景二:商业智能产品
BI产品主要针对数据集进行的数据分析以聚合运算为主,比如求合、求平均数、求同比、求环比、求其他的平方差或之类的标准方差。我们既要满足大数据量的水平可伸缩,又要满足高性能的聚合运算。选择Parquet列式存储,可以同时满足这两个需求。
场景三:Airbnb的大数据平台
Airbnb的大数据来自两块:一是本身的业务数据,二是大量的事件。数据源不同,采集方式也不一样。日志数据通过发送Kafka事件,而线上数据则通过Sqoop同步。数据存储选择HDFS集群,然后通过Presto对Hive表执行即席查询。S3是一个独立的存储系统。
四、数据处理
数据处理分为三大类:
第一类是从业务的角度,细分为查询检索、数据挖掘、统计分析、深度分析,其中深度分析分为机器学习和神经网络。
第二类是从技术的角度,细分为Batch、SQL、流式处理、machine learning、Deep learning。
第三类是编程模型,细分为离线编程模型、内存编程模型、实时编程模型。
结合前文讲述的数据源特点、分类、采集方式、存储选型、数据分析、数据处理,我在这里给出一个总体的大数据平台的架构。值得注意的是,架构图中去掉了监控、资源协调、安全日志等。
左侧是数据源,有实时流的数据(可能是结构化、非结构化,但其特点是实时的),有离线数据,离线数据一般采用的多为ETL的工具,常见的做法是在大数据平台里使用Sqoop或Flume去同步数据,或调一些NIO的框架去读取加载,然后写到HDFS里面,当然也有一些特别的技术存储的类型,比如HAWQ就是一个支持分布式、支持事务一致性的开源数据库。
从业务场景来看,如果我们做统计分析,就可以使用SQL或MapReduce或streaming或Spark。如果做查询检索,同步写到HDFS的同时还要考虑写到ES里。如果做数据分析,可以建一个Cube,然后再进入OLAP的场景。
这个图基本上把所有的内容都涵盖了,从场景的角度来分析倒推,用什么样的数据源、采用什么样的采集方式、存储成什么样子,能满足离线、内存、实时、流的各种模型,都能从图中得到解答.
大数据时代的数据中心平台架构图