⼤数据平台架构组件选择与运⽤场景
⼀、⼤数据平台
在⼯作中的应⽤有三种:
与决策相关,数据科学的领域,了解统计学、算法,这是数据科学家的范畴;
与⼯程相关,如何实施、如何实现、解决什么业务问题,这是数据⼯程师的⼯作。
数据⼯程师在业务和数据科学家之间搭建起实践的桥梁。本⽂要分享的架构技术选型及场景运⽤偏向于⼯程⽅⾯。
如图所⽰,⼤数据平台第⼀个要素就是数据源,我们要处理的数据源往往是在业务系统上,数据分析的时候可能不会直接对业务的数据源进⾏处理,⽽是先经过数据采集、数据存储,之后才是数据分析和数据处理。
从整个⼤的⽣态圈可以看出,要完成数据⼯程需要⼤量的资源;数据量很⼤需要集;要控制和协调这些资源需要监控和协调分派;⾯对⼤规模的数据怎样部署更⽅便更容易;还牵扯到⽇志、安全、还可能要和云端结合起来,这些都是⼤数据圈的边缘,同样都很重要。
⼆、数据源的特点
数据源的特点决定数据采集与数据存储的技术选型,我根据数据源的特点将其分为四⼤类:
第⼀类:从来源来看分为内部数据和外部数据;
第⼆类:从结构来看分为⾮结构化数据和结构化数据;
第三类:从可变性来看分为不可变可添加数据和可修改删除数据;
第四类,从规模来看分为⼤量数据和⼩量数据。
内部数据
来⾃企业内部系统,可以采⽤主动写⼊技术(push),从⽽保证变更数据及时被采集。
外部数据
企业要做⼤数据的话肯定不会只局限于企业内部的数据,⽐如银⾏做征信,就不能只看银⾏系统⾥的交易数据和⽤户信息,还要到互联⽹上去拉取外部数据。
外部数据分为两类:
⼀类是要获取的外部数据本⾝提供API,可以调⽤API获取,⽐如;
另⼀类是数据本⾝不提供API,需要通过爬⾍爬取过来。
这两类数据都不是我们可控制的,需要我们去获得,它的结构也可能跟我们企业内部数据的结构不⼀样,还需要进⾏转换,爬⾍爬取的数据结构更乱,因此⼤数据平台⾥需要做ETL,由ETL进⾏数据提取、转换、加载,清洗、去重、去噪,这个过程⽐较⿇烦。爬⾍爬过来的数据往往是⾮结构性的、⽂档型的数据,还有视频、⾳频,这就更⿇烦了。
结构化数据 & ⾮结构化数据
结构化和⾮结构化数据在存储时的选型完全不同,⾮结构化数据偏向于⽂件,或者选择NoSQL数据库;考虑到事务的⼀致性,我们也可能选择传统的数据库。
不变可添加数据
如果数据源的数据是不变的,或者只允许添加(通常,数据分析的事实表,例如银⾏交易记录等都不允许修改或删除),则采集会变得⾮常容易,同步时只需要考虑最简单的增量同步策略,维持数据的⼀致性也相对变得容易。
对于⼤数据分析来说,我们每天在处理的数据⼤部分是不可变更的。正如Datomic数据库的设计哲学就是数据为事实(fact),它是不可变的,即数据是曾经发⽣的事实,事实是不可以被篡改的,哪怕改⼀个地址,从设计的⾓度来说也不是改动⼀个地址,⽽是新增了⼀个地址。交易也是如此。
可修改可删除数据
银⾏的交易记录、保险单的交易记录,互联⽹的访客访问记录、下单记录等都是不可变的。但是数据源的数据有些可能会修改或删除,尤其是许多维表经常需要变动。要对这样的数据进⾏分析处理,最简单的办法就是采⽤直连形式,但直连可能会影响数据分析的效率与性能,且多数数据模型与结构可能不符合业务⼈员进⾏数据分析的业务诉求。如果采⽤数据采集的⽅式,就要考虑同步问题。
⼤数据量
针对⼤数据量,如果属于⾼延迟的业务,可以采⽤batch的处理⽅式,实时分析则需要使⽤流式处理,将两者结合就是Lambda架构,即有实时处理、⼜能满⾜⼀定的⼤数据量,这是现在⽐较流⾏的⼤数据处理⽅式。
三、数据存储的技术选型
⼤数据平台特征:相同的业务数据会以多种不同的表现形式,存储在不同类型的数据库中,形成⼀种p
oly-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的场景。
大数据etl工具有哪些这个图基本上把所有的内容都涵盖了,从场景的⾓度来分析倒推,⽤什么样的数据源、采⽤什么样的采集⽅式、存储成什么样⼦,能满⾜离线、内存、实时、流的各种模型,都能从图中得到解答。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论