1.3 数据仓库技术
数据仓库系统是一个信息提供平台,它从业务处理系统获得数据,主要以星形模型和雪花模型组织数据,并为用户从数据中获取信息和知识提供各种手段。
企业数据仓库的建设,是以现有企业业务系统和大量业务数据的积累为基础的。数据仓库不是静态的概念,只有把信息及时交给需要这些信息的人员,帮助他们做出改善其业务经营的决策,信息才能发挥作用,才有意义。而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。
在大数据飞速发展的几年中,已经形成了一个完备多样的大数据生态圈,如图1-2所示。从图1-2中可以看出,大数据生态圈分为7层,这7层可以概括归纳为数据采集层、数据计算层和数据应用层3层结构。
图1-2 大数据生态圈
1.数据采集层
数据采集层是整个大数据平台的源头,也是整个大数据系统的基石。当前许多公司的业务平台每天都会产生海量的日志数据,收集日志数据供离线和在线的分析系统使用是日志收集系统需要做的事情。除日志数据外,大数据系统的数据来源还包括来自业务数据库的结构化数据,以及视频、图片等非结构化数据。随着大数据的重要性逐渐凸显,大数据采集系统的合理搭建就显得尤为重要。
大数据采集过程中的挑战越来越多,主要来自以下几个方面。
(1)数据源多种多样。
(2)数据量大且变化快。
(3)如何保证所采集数据的可靠性。
(4)如何避免采集重复的数据。
(5)如何保证所采集数据的质量。
针对这些挑战,日志收集系统需要具有高可用性、高可靠性、可扩展性等特征。现在主流的数据传输层的工具有Sqoop、Flume、DataX等,多种工具的配合使用,可以满足多种数据源的采集传输工作。同时数据传输层在通常情况下还需要对数据进行初步的清洗、过滤、汇总、格式化等一系列转换操作,使数据转为适合查询的格式。在数据采集完成后,需要选用合适的数据存储系统,考虑到数据存储的可靠性,以及后续计算的便利性,通常选用分布式文件系统,比如HDFS和HBase等。
2.数据计算层
大数据仅仅被采集到数据存储系统是远远不够的,只有通过整合计算,数据中的潜在价值才可以被挖掘出来。
数据计算层可以划分为离线数据计算和实时数据计算。离线数据计算主要指传统的数据仓库概念,数据计算主要以天为单位,还可以细分为小时或者汇总为以周和月为单位,主要以T+1的模式进行,即每天凌晨处理前一天的数据。目前比较常用的离线数据计算框架是MapReduce,并通过Hive实现了对SQL的兼容性。Spark基于内存的计算设计使得离线数据的计算速度得到大幅提升,并且在此基础上提供了Spark SQL结构化数据的计算引擎,对SQL有很好的兼容性。
随着业务的发展,部分业务需求对实时性的要求逐渐提高,实时计算开始占有较大的比重,实时计算的应用场景也越来越广泛,比如电商实时交易数据更新、设备实时运行状态报告、活跃用户区域分布实时变化等。生活中比较常见的有地图与位置服务应用实时分析路况、天气应用实时分析天气变化趋势等。当前比较流行的实时计算框架有Storm、Spark Streaming和Flink。
大数据计算需要用的资源也是巨大的,大量的数据计算任务需要通过资源管理系统共享一个集群的资源,YARN便是资源管理系统的一个典型代表。通过资源管理系统可以使集群的利用率更高、运维成本更低。大数据的计算通常不是独立的,一个计算任务的运行很有可能依赖于另一个计算任务的结果,使用任务调度系统可以很好地处理任务之间的依赖关系,实现任务的自动化运行。常用的任务调度系统有Oozie和Azkaban等。整个数据仓库生命周期的全自动化,从源系统分析到ETL,再到数据仓库的建立、测试和文档化,可以加快产品化进程,降低开发和管理成本,提高数据质量。
无论何种数据计算,进行数据计算的前提是合理地规划数据,搭建规范统一的数据仓库体系。通过搭建合理的、全面的数据仓库体系,尽量规避数据冗余和重复计算的问题,数据的价值发挥到了最大限度。为此,数据仓库分层理念被逐渐丰富完善,目前应用比较广泛的数据仓库分层理念将数据仓库分为4层:原始数据层、明细数据层、汇总数据层和应用数据层。通过数据仓库不同层次之间的分工和分类,数据更加规范化,可以帮助用户需求得到更快实现,并且可以更加明确地管理数据。
3.数据应用层
当数据被整合计算完成之后,最终需要提供给用户使用,这就是数据应用层。不同的数据平台,针对其不同的数据需求有相应的数据应用层的规划设计,数据的最终需求计算结果可以构建在不同的数据库上,比如MySQL、HBase、Redis、Elasticsearch等。通过这些数据库,用户可以很方便地访问最终的结果数据。
最终的结果数据由于面向的用户不同,所以可能有不同层级的数据调用量,面临着不同的挑战。如何能更稳定地为用户提供服务、满足用户复杂的数据业务需求、保证数据服务接口的高可用性等,都是数据应用层需要考虑的问题。数据仓库的用户除希望数据仓库能稳定地给出数据报表外,还希望数据仓库可以满足随时给出一些临时提出的查询条件的结果,所以在数据仓库中我们还需要设计即席查询系统,满足用户即席查询的需求。此外,还有诸如对数据进行可视化、对数据仓库性能进行全面监控等,都是数据应用层应该考量的。数据应用层采用的主要技术有Superset、ECharts、Presto、Kylin和Grafana等。