目录
(一)通用框架概述
(二)数据收集层
(三)数据存储层
(四)资源管理与服务协调层
(五)计算引擎层
(六)数据分析层
(七)数据可视化层
(一)通用框架概述
自底向上,与OSI类似,通用框架下的大数据体系有七层:数据源、数据收集层、数据存储层、资源管理与服务协调层、计算引擎层、数据分析层及数据可视化层。图示如下:
(二)数据收集层
数据收集层直接与数据源对接,负责采集产品使用过程中生成的日志,具有分布式、通用化等属性。由于实际场景中,大部分的数据源是零散的,因此采集到一起的难度较大,因而在设计上应该具备如下几个特点:
扩展性:能够配置多种不同的数据源,并且在遇到洪峰时不会成为系统瓶颈;
可靠性:数据在传输的过程中不能丢失(金融类数据尤其如此);
安全性:对于敏感数据,传输的过程要进行加密(密码、金钱等);
低延迟:由于数据源采集的日志通常规模庞大,因此应尽快的收集到存储系统中,不能产生积压。
在以Hadoop/Spark为代表的开源框架下,数据收集层通常有如下几种方案选择:
Sqoop:对于关系型数据库的全量导入比较通用;
Canal:对于关系型数据库的增量导入比较通用;
Flume:对于非关系型日志采集比较通用,例如文本日志等;
Kafka:分布式消息队列,类似于数据通道的概念,具有分布式高容错的特点。
(三)数据存储层
由于传统的关系型数据库在分布式、扩展性及高可用方面存在一定的瓶颈,因而很难适应大数据场景,不建议作为主要的存储和计算系统。数据存储层主要负责数据的落地和存储,包括了关系型数据和非关系型数据,并拥有中央化的调度体系。数据存储层主要有如下特点:
扩展性:作为数据落地的主要承载,数据的不断增长是长期的任务,因而集群的承载能力在一定时间内,总会达到瓶颈。因此,数据存储层需要考虑机器的扩展能力。
容错性:出于成本的考虑,数据存储层通常机器较多,因而需要建设在比较廉价的设备之上,这就要求系统自身有比较好的容错特性,在一台或多台机器出现故障时不会导致数据丢失。
存储模型:由于数据的多样性,数据存储层需要支持结构化、非结构化两种类型数据,因而需要支持文本、列存等多种数据模型。
由于分布式计算的概念由Google提出,在Google通常采用GFS、BigTable、MegaStore、Spanner等技术方案。在以Hadoop/Spark为代表的开源框架下,数据存储层通常有如下几种方案选择:
HDFS:分布式文件系统,GFS的开源实现,具有非常好的扩展性与容错性,并非常合适搭建在廉价设备上; Hbase:以HDFS为基础构建的分布式数据库,BigTable的开源实现,能够存储结构化与半结构化数据,支持行与列的无限扩展;
Kudu:Cloudera开源的运行在HDFS上的列式存储系统,具备扩展性与高可用性。
(四)资源管理与服务协调层
随着互联网技术规模的不断增长,不同技术与框架混用的情况越来越常见,对于运维、开发、资源利用等方面产生了巨大的挑战。为了将所有的技术框架部署在统一的平台上,共享机器资源,因而引入了资源管理与服务协调层。引入之后有如下几方面的优势:
资源利用高:能够有效的考虑程序数量与机器资源之间的平衡性,充分利用集群资源;
运维成本低:每种框架的运行情况都汇总到统一的运维平台上,对于人员的要求会更低;
数据能共享:同一份数据能够提供给不同计算框架进行计算,共享计算结果,降低存储与运算成本。
Google采用了Borg、Omega及Chubby三种方案来进行资源管理。在以Hadoop/Spark为代表的开源框架下,资源管理与服务协调层通常有如下几种方案选择:
Yarn:Hadoop框架中负责统一资源管理与调度的系统,能够集中管理机器资源(CPU、内存等),并且能够按照队列的方式调度任务;
Zookeeper:分布式协调服务,基于Paxos算法实现,提供分布式队列、分布式锁等复杂场景的解决方案。
(五)计算引擎层
计算引擎主要分为批处理和流处理两种场景:当数据量庞大并且实时性要求不高时,或者计算逻辑复杂时,采用批处理的方式计算数据,追求高吞吐量;当数据量适中且实时性要求高,且计算逻辑相对简单时,采用流处理方式计算数据,追求低延迟性。目前不存在实时处理复杂或庞大数据的计算框架。除了以上两种场景,近年来交互式处理方式越来越受欢迎,通过标准化的OLAP方式来组织和计算数据,在使用的便捷性上有巨大的优势。三种引擎的适用场景如下:
批处理:索引建立、数据挖掘、大规模复杂数据分析、机器学习;
流处理:广告推荐、实时报表、反作弊;
交互式:数据查询、报表计算。
Google提供了MapReduce、Dremel两种框架的实现原理,被开源框架采用并使用场景广泛。Pregel、Precolator、MillWheel也在开源场景下有所采用。目前Hadoop/Spark为代表的开源框架下常用的方案如下:
MapReduce:经典的批处理引擎,具有非常好的扩展和容错性;
Impala/Presto/Drill:分别由Cloudera、Facebook、Apache开源,使用标准SQL处理存储在HDFS上的数据,基于Google Dreml的开源实现;
Spark:通过DAG引擎,提供了基于RDD的数据抽象表示,主要利用内存进行快速的数据挖掘;
Storm/Spark Streaming/Flink:流式处理系统,都具备良好的容错和扩展性,实现的细节有所不同。
(六)数据分析层
直接产出结果的计算框架,但很多事情出于简化的考虑,可以通过计算引擎层的交互式框架来代替。通常情况下,出于平台端的技术考虑,该层采用Mysql、Oracle、Postgresql等关系型数据库的方案较多。按照通常的分类方式,有如下几种:
Impala/Presto/Drill:交互式计算引擎代替实现;
Mysql/Oracle/Postgresql:关系型数据库实现;
Hive/Pig:海量数据下的计算实现;
Mahout/MLlib:常用的机器学习和数据挖掘算法集合,最初基于MapReduce实现,现在大部分由Spark实现;
Beam/Cascading:统一了批处理和流式计算两种框架,提供了更高级的API来实现计算逻辑。
(七)数据可视化层
在大数据场景下,通常由前端插件来实现,如ECharts等,实现选择的方案较多。常见的展现方式有:折线图、柱状图、饼图、散点图、K线图、雷达图、热力图、路径图等。