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