目录
文章部分内容参考《大数据分析-数据仓库项目实战》一书,仅供学习,喜欢可购买正版书籍,如有不妥请联系删除。
基本概念
数据仓库
数据仓库是一个大型、集中式、长期存储系统,用于存储和管理企业或组织的数据。它整合了来自不同来源的数据,经过清洗、转换和加载,以支持决策分析和数据挖掘等高级数据处理需求。数据仓库中的数据按照业务主题进行组织,如销售、库存、财务等,而不是按照业务流程进行组织。数据仓库的特点包括面向主题、集成性、稳定性(不可更新)和时变性(会新增新数据和删除历史数据)。
数据仓库的原理主要包括数据提取、数据清洗、数据转换、数据加载、数据建模、数据存储、数据查询和分析以及数据维护和更新。数据提取是从多个来源系统中提取数据,并将其转换为数据仓库可以接受的格式。数据清洗是对提取的数据进行清理,包括去除重复数据、处理缺失值、校验数据准确性等。数据转换是对清洗后的数据进行转换和整合,使其适应数据仓库的结构和格式要求。数据加载是将转换后的数据加载到数据仓库中,通常采用批量加载或增量加载的方式。数据建模是根据业务需求和分析目的,对数据仓库进行建模,建立合适的维度模型和事实表。数据存储是将数据存储在数据仓库中的物理存储介质上,常用的存储方式包括关系数据库和多维数据库。数据查询和分析是通过数据仓库提供的查询和分析工具,对数据进行灵活的查询和多维分析,从而支持决策和业务分析。数据维护和更新是定期对数据仓库进行维护和更新,包括数据清理、数据变更追踪、数据仓库性能优化等。
数据仓库在多个领域都有广泛的应用,如电商运营、物流配送、金融行业和制造业等。在电商运营中,数据仓库能够整合来自各个渠道的用户数据、销售数据和库存数据等,通过对这些数据进行分析,企业可以了解用户的购买行为和偏好,进行精准的推荐和营销活动。在物流配送领域,数据仓库可以帮助企业整合来自不同渠道的数据,包括订单数据、物流数据、交通数据等,通过对这些数据进行深入分析,企业可以实现智能的路线规划和配送策略,提高配送效率,降低成本。在金融行业中,数据仓库可以帮助企业整合大量的财务数据和业务数据。在制造业中,数据仓库可以帮助企业整合生产数据、设备数据、库存数据等。
此外,数据仓库还可以通过对用户反馈数据进行挖掘,发现潜在的商业价值,优化企业的业务运营。随着大数据和人工智能技术的不断发展,数据仓库在未来将会发挥更加重要的作用,帮助企业更好地应对市场变化和竞争挑战。
数据仓库整体技术架构
数据仓库技术架构图1(取自《大数据分析-数据仓库项目实战》)
数据仓库的技术栈和实现涉及多个层面,包括数据采集层、数据计算层和数据分析应用层。以下是关于这三个层面的技术栈和实现的介绍:
数据采集层:
* 技术栈:数据采集层主要关注如何从各种数据源中收集数据,并将其转化为适合数据仓库处理的格式。常见的技术包括ETL(Extract, Transform, Load)工具、数据同步工具以及数据库链接功能。数据传输层的工具有Sqoop、Flume、DataX等,通过多种工具的配合使用,可以满足多种数据源的采集传输工作。同时数据传输层通常情况下还需要对数据进行初步的清洗、过滤、汇总、格式化等一系列转换操作,使数据转为适合查询的格式。
* 实现:在实际操作中,可以通过全量导入或增量导入的方式进行数据源的导入。全量导入将所有数据源数据导入到数据仓库中,而增量导入仅导入数据源中新增的数据。此外,数据采集还需要考虑数据清洗和转换,以确保数据的质量和一致性。
*面临问题:① 数据源多种多样。② 数据量大且变化快。③ 如何保证所采集数据的可靠性。④ 如何避免采集重复的数据。⑤ 如何保证所采集数据的质量。
数据计算层:
数据计算层可以划分为离线数据计算和实时数据计算。离线数据计算主要是指传统的数据仓库概念,数据计算可以以天为单位,还可以细分为小时或者汇总为以周和月为单位,主要以T+1的模式进行,即每天凌晨处理上一天的数据。实时计算的应用场景也越来越广泛,比如,电商实时交易数据更新、设备实时运行状态报告、活跃用户区域分布实时变化等。生活中比较常见的有地图与位置服务应用实时分析路况、天气应用实时分析天气变化趋势等
* 技术栈:数据计算层主要关注如何处理和分析数据仓库中的数据。常见的技术包括分布式计算框架(如Apache Spark)、SQL查询引擎、数据挖掘和机器学习算法等。
* 实现:数据计算层可以通过分布式计算框架对数据进行高效的并行处理和分析。同时,SQL查询引擎提供了灵活的数据查询和分析能力。此外,数据挖掘和机器学习算法可以帮助发现数据中的隐藏模式和趋势,为决策提供支持。
无论何种数据计算,进行数据计算的前提是规范合理地规划数据,搭建规范统一的数据仓库体系。通过搭建合理的、全面的数据仓库体系,尽量规避数据冗余和重复计算等问题,使数据的价值发挥到最大程度。为此,数据仓库分层理念被逐渐丰富完善,目前应用比较广泛的数据仓库分层理念将数据仓库分为4层,分别是原始数据层、明细数据层、汇总数据层和应用数据层。通过数据仓库不同层次之间的分工分类,使数据更加规范化,可以帮助用户需求得到更快实现,并且可以更加清楚明确地管理数据。
数据分析应用层:
当数据被整合计算完成之后,需要最终提供给用户使用,这就是数据应用层。不同的数据平台针对其不同的数据需求有各自相应的数据应用层的规划设计,数据的最终需求计算结果可以构建在不同的数据库上,比如,MySQL、HBase、Redis、Elasticsearch等。通过这些数据库,用户可以很方便地访问最终的结果数据。
最终的结果数据由于面向的用户不同,可能有不同层级的数据调用量,面临着不同的挑战。如何能更稳定地为用户提供服务、满足各种用户复杂的数据业务需求、保证数据服务接口的高可用性等,都是数据应用层需要考虑的问题。
* 技术栈:数据分析应用层主要关注如何将处理后的数据以可视化或API接口的形式提供给用户,以便进行业务决策和数据挖掘。常见的技术包括数据可视化工具、报表生成工具、API接口等。
* 实现:数据分析应用层可以通过数据可视化工具将处理后的数据以图表、报表等形式展示给用户,帮助用户更直观地理解数据。同时,API接口可以将数据提供给其他应用程序或服务,实现数据的共享和集成。
综上所述,数据仓库的技术栈和实现涵盖了数据采集、数据计算和数据分析应用三个层面。通过合理的技术选择和实现方式,可以构建一个高效、可靠的数据仓库系统,为企业的业务决策提供有力的支持。
数据仓库技术架构图2
数据仓库主题
数据仓库(Data Warehouse,简称DW或DWH)是一个面向主题的、集成的、非易失的且随时间变化的数据集合,用于支持企业的管理决策。下面将分别介绍数据仓库主题的基本概念和实现原理。
基本概念:
- 面向主题:数据仓库中的数据是面向主题进行组织的。主题是一个抽象的概念,指的是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它对应着企业中某一宏观分析领域所涉及的分析对象。数据仓库中的数据是按照主题进行划分的,每个主题对应着一个或多个数据分析的需求。
实现原理:
-
数据源集成:数据仓库的数据来源于多个异构的数据源,如关系数据库、文件、数据湖等。为了实现数据的集成,需要对这些数据源进行抽取、转换和加载(ETL)操作,将不同格式、不同结构的数据转换为统一的数据格式和结构,并加载到数据仓库中。
-
数据存储与管理:数据仓库通常采用关系型数据库或非关系型数据库进行数据的存储和管理。数据仓库中的数据通常被划分为多个事实表和维度表,以便于进行多维分析和查询。同时,数据仓库还需要对数据进行索引、分区、压缩等优化操作,以提高数据的查询性能和管理效率。
-
数据分析与查询:数据仓库中的数据主要用于支持企业的决策分析。因此,数据仓库需要提供强大的数据分析和查询功能,如OLAP(联机分析处理)、数据挖掘、报表生成等。这些功能可以帮助用户从多个角度、多个层次对数据进行深入的分析和挖掘,从而发现数据中的规律和趋势,为企业的决策提供有力的支持。
总之,数据仓库的主题的基本概念和实现原理涉及到数据的集成、存储、管理和分析等多个方面。通过面向主题的数据组织方式和强大的数据分析功能,数据仓库可以为企业提供一个全面、准确、高效的数据分析平台,帮助企业更好地理解和利用数据资源,提高决策水平和业务竞争力。
数据集市
数据集市(Data Mart)是一种面向特定部门或用户的数据仓库子集。它主要是为了满足特定业务部门的分析需求而设计的,可以从企业范围的数据仓库或其他数据源中提取数据。数据集市通常包含与特定主题或业务领域相关的数据,如销售、财务或人力资源等。
数据集市的主要特点是规模小、面向部门、有特定的应用,并且由业务部门定义、设计和开发。与大型数据仓库相比,数据集市的建设周期短,成本较低,且更容易维护和更新。此外,数据集市还提供了预先计算好的数据,从而满足了用户对性能的需求,并在一定程度上缓解了访问数据仓库的瓶颈。
数据集市中数据的结构通常被描述为星型结构或雪花结构。星型结构包含一个事实表和各种支持维表,而雪花结构则进一步分解了维表,形成了多个关联的表。这些结构有助于用户进行数据查询、分析和报告。
总的来说,数据集市是一种灵活、便捷、简单的数据集合,适用于小型企业或特定业务部门的数据分析需求。它可以帮助企业的决策者和业务人员更好地理解和利用数据,从而做出更明智的决策。
数据仓库的血缘关系
数据仓库的血缘关系,又称为数据血缘,是一个描述数据从源头到最终数据仓库表或视图之间的转换和依赖关系的概念。它主要跟踪数据的来源、转换和流向,以便更好地理解和管理数据。
数据血缘可以帮助我们回答以下问题:
-
**数据的来源**:一个数据仓库中的特定数据是从哪些原始数据源或中间表中获取的?
-
**转换过程**:数据在到达最终表之前经过了哪些转换或处理步骤?
-
**数据依赖关系**:哪些表或视图依赖于其他表或视图?
-
**影响分析**:如果一个数据源或中间表发生变化,哪些下游的表或视图会受到影响?
数据血缘通常通过元数据管理工具或数据治理平台来实现。这些工具可以捕获数据仓库中的ETL(Extract, Transform, Load)过程、数据流程、数据质量规则等,从而构建出一个完整的数据血缘图。
数据血缘的好处:
-
**增强数据可理解性**:通过数据血缘,可以更容易地理解数据的来源和转换过程,从而更容易地解释数据的含义。
-
**风险管理**:数据血缘可以帮助识别潜在的数据风险,如数据不一致、数据质量问题等,并采取相应的措施来管理这些风险。
-
**改进数据开发过程**:数据血缘可以揭示数据开发过程中的瓶颈和冗余步骤,从而优化数据流程,提高数据开发的效率。
-
**支持数据治理和合规性**:在数据治理和合规性方面,数据血缘可以确保数据的来源和转换过程符合相关法规和标准。
总之,数据仓库的血缘关系是一个强大的工具,可以帮助我们更好地理解和管理数据,从而更有效地利用数据仓库中的信息。
数据仓库元数据管理
数据仓库元数据管理是指对数据仓库中的元数据进行全面管理和维护的过程。元数据是描述数据仓库中各种数据对象(如表、视图、列等)的数据,它包含了数据的定义、结构、关系以及数据之间的依赖关系等重要信息。
数据仓库元数据管理的实现原理主要包括以下几个方面:
-
数据模式设计:这是构建数据仓库系统的元数据的一个重要步骤。它涉及确定数据仓库中的主题,设计每个主题下的表,以及定义表之间的关联和依赖。这个过程需要充分理解数据源的结构和含义,以便于将它们转换为适应数据仓库需求的数据模式。
-
数据映射和转换:由于数据源经常具有不同的数据结构和格式,这就需要通过数据映射和转换来将这些数据进行统一的转换,以便于在数据仓库中进行存储和检索。
-
数据质量管理:元数据管理需要包括对数据的清洗和预处理,以确保数据的质量和准确性。在从各种数据源获取数据的过程中,可能会存在一些问题,如数据的不完整、不一致、错误等。因此,元数据管理需要确保数据仓库中的数据定义准确无误,避免数据冗余和不一致,以提高数据质量和一致性。
-
数据存储和检索:在数据仓库中,如何有效地存储和检索数据是至关重要的。元数据管理需要提供一种机制,使数据能够被快速和准确地访问和查询。
总的来说,数据仓库元数据管理的实现原理是通过一系列的技术和方法,确保数据仓库中的元数据准确、一致、完整,并能够满足数据仓库的需求。元数据管理贯穿于数据仓库的整个生命周期,利用元数据带动数据仓库的发展,使数据仓库自动化、可视化。同时,元数据管理也是企业数据治理的基础,为企业级数据仓库的关键组成部分提供高质量、准确、易于管理的数据。
数据仓库的指标
数据仓库的指标是衡量数据仓库性能和质量的重要标准。以下是一些常见的数据仓库指标:
-
数据质量指标:数据质量是数据仓库中最重要的指标之一。这包括数据的完整性、准确性、一致性和唯一性等方面。高质量的数据能够确保分析结果的可信度和准确性。
-
数据可用性指标:数据仓库中的数据必须能够被用户及时、可靠地访问和使用。数据可用性指标包括数据的可访问性、可靠性和稳定性等方面。
-
数据处理效率指标:数据仓库需要处理大量的数据,因此处理效率是一个重要的指标。这包括数据的抽取、转换、加载(ETL)过程的效率,以及查询和数据分析的速度等方面。
-
数据安全性指标:数据仓库中的数据通常是企业的重要资产,因此数据安全性是非常重要的。这包括数据的加密、访问控制、备份和恢复等方面。
-
数据存储和管理指标:数据仓库需要管理大量的数据,因此存储和管理效率也是一个重要的指标。这包括数据的存储成本、存储容量、数据备份和恢复等方面。
这些指标可以帮助企业和组织评估和优化数据仓库的性能和质量,从而确保数据仓库能够为企业决策和业务发展提供有力的支持。
数据仓库维度概念
数据仓库的维度是数据仓库中的重要概念,主要用于数据的分类、组织、查询和分析。
维度是对事实指标进行过滤和重新组织提供指导的属性,通常具有层级结构,可以形成多维分析的基础。例如,时间维度可以包括年、季度、月、日等层次,产品维度可以包括产品类别、品牌、型号等层次。维度的元素指的是维度中的各个数据元素的取值,例如,地区维度中具体的成员可以有英国、法国、德国等。
在数据仓库中,维度和事实通常相关联。事实是可量化的数据,用于支持分析和决策,例如销售额、订单数量等。事实数据可以通过与维度的交叉组合进行多维分析,以满足不同层次的数据分析需求。
维度的实现原理主要涉及到数据仓库的物理设计和逻辑设计。在物理设计中,维度通常以较小的表的形式存在,这些表可以对前台用户的应用程序进行数据填充,或者引用其他数据仓库进行分析。在逻辑设计中,维度通常与事实表相关联,形成星型模型或雪花型模型等结构,以支持高效的数据查询和分析。
此外,维度还涉及到维度的操作,如钻取、切片、切块等。钻取是通过变换维度的层次,改变粒度的大小,从而得到不同详细程度的数据分析结果。切片和切块则是通过选择不同的维度和事实,对数据进行切片和切块操作,得到不同角度的数据分析结果。
总之,数据仓库的维度是数据仓库中的重要概念,通过对维度的合理设计和操作,可以实现高效的数据查询和分析,为企业决策提供支持。
HDFS
HDFS,即Hadoop分布式文件系统(Hadoop Distributed File System),是一个被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统。它具有高容错性,可以部署在廉价的机器上,并能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。
HDFS放宽了一部分POSIX约束,以实现流式读取文件系统数据的目的。它的体系结构采用了主从(Master/Slave)结构模型,由一个NameNode和若干个DataNode组成。其中,NameNode作为主服务器,管理文件系统的命名空间和客户端对文件的访问操作;而DataNode则管理存储的数据。
HDFS具有海量数据存储的能力,可以支持PB级别或更高级别的数据存储,并且具有高度的容错性,数据保存多个副本,当副本丢失后可以自动恢复。此外,它也可以运行在商用硬件上,不需要特别昂贵的机器,可以节约成本。
在应用场景方面,HDFS适合存储非常大的文件,如几百M、G、或TB级别的文件,并且适合采用流式的数据访问方式,即一次写入,多次读取。同时,它也可以为数据存储提供所需的扩展能力。但是,它不适合需要低延时的数据访问,以及对小文件进行处理的应用场景。
在文件存储方面,HDFS将大文件切分成多个数据块,并将这些数据块分散存储在集群中的不同机器上。每个数据块都会有多个副本,这些副本分布在不同的机架上,以提高数据的可靠性和容错性。同时,HDFS也通过复制数据块来提供容错性和高可用性,默认情况下,每个数据块会有三个副本。如果某个数据块的副本损坏或丢失,HDFS会自动从其他副本中选择一个进行复制,以确保数据的完整性和可用性。
总之,HDFS是一个高度容错性、适合大规模数据集应用的分布式文件系统,可以运行在商用硬件上,并提供高吞吐量的数据访问。它适合存储大文件、采用流式数据访问方式,以及为数据存储提供扩展能力的应用场景。
Flume
Flume是一个由Cloudera提供的高可用、高可靠、分布式的海量日志采集、聚合和传输的系统。它基于流式架构,可以灵活地处理数据。Flume支持在日志系统中定制各类数据发送方,用于收集数据,并提供对数据进行简单处理,然后写到各种数据接受方(可定制)的能力。
Flume的主要功能包括大数据采集、日志收集和数据传输。它可以用于从大量源(如数据源、应用程序、传感器)采集和传输数据到目标系统,例如Hadoop集群、Kafka、HBase等。此外,Flume还可以用于收集和聚合各种类型的日志,例如应用程序日志、服务器日志、安全日志等,将日志数据可靠地传输到中心化的日志存储和分析系统。
Flume的架构基于事务,保证了数据在传送和接收时的一致性。它有两个主要版本,Flume-og和Flume-ng。Flume-og采用了多Master的方式,并使用ZooKeeper来保存配置数据,保证配置数据的一致性和高可用。而Flume-ng则取消了集中管理配置的Master和ZooKeeper,变为一个纯粹的传输工具。
Flume的特点是功能强大,提供了大量的数据源和目标数据的接口,可以读取各种数据源的数据,将数据写入各种目标地。同时,它开发简单,用户只需要编写一个配置文件,定义从哪读数据,把数据写入到哪里去,然后运行这个文件就可以。此外,Flume还支持用户自定义接口开发,提供了实时性、稳定性等特性,可以水平扩展。
总的来说,Flume是一个强大而灵活的日志采集、聚合和传输工具,适用于大规模数据处理和分析的场景。
Hadoop
Kafka
Kafka在数据仓库领域的应用和原理如下:
Kafka是一种基于Apache Kafka构建的数据存储系统,具有实时性、高可靠性、高可扩展性和低延迟等特点。在数据仓库领域,Kafka的应用主要体现在以下几个方面:
-
实时数据处理:Kafka可以作为数据传输的中间件,将数据从源系统实时传输到目标系统,实现数据的实时同步和集成。这种特性使得Kafka非常适合处理大规模数据流,满足数据仓库对实时性的要求。
-
日志收集:Kafka可以作为日志收集的系统,将各个服务器的日志统一收集到Kafka中,方便后续的分析和处理。这对于数据仓库来说是非常有用的,因为它可以帮助数据仓库收集各种来源的数据,为后续的数据分析和挖掘提供基础。
-
运营指标记录:Kafka也经常被用来记录运营监控数据,包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告。这对于数据仓库来说非常有用,因为它可以帮助数据仓库监控系统的运行状态,及时发现和解决问题。
Kafka的原理主要基于消息队列和分布式存储。它将消息划分为多个分区,每个分区会复制给多个Kafka服务器,从而实现了消息的分布式存储和高可用性。消费者从分区中读取消息,可以采用广播方式将消息发送给多个消费者,实现消息的并行处理。同时,Kafka采用了"日志"的概念,将消息队列看作是一个持续增长的日志文件。发布者将消息追加到日志末尾,然后按照一定的策略将消息存储到不同的分区中。消费者从分区头部开始消费消息,消费后的消息将被标记为已消费,不会再次被消费。
总的来说,Kafka在数据仓库领域的应用和原理主要基于其高可靠性、高可扩展性和低延迟的特点,以及基于消息队列和分布式存储的原理。这使得Kafka成为数据仓库领域的重要工具之一,能够帮助数据仓库实现实时数据处理、日志收集、运营指标记录等功能。
数据仓库分层模型
数据仓库的分层概念主要是将数据按照不同的处理阶段和应用需求进行分层存储和管理。这样可以提高数据处理的效率,同时降低数据管理的复杂性。
数据仓库的分层原理主要包括以下几个方面:
-
**数据提取**:从多个来源系统中提取数据,并将其转换为数据仓库可以接受的格式。
-
**数据清洗**:对提取的数据进行清理,包括去除重复数据、处理缺失值、校验数据准确性等。
-
**数据转换**:对清洗后的数据进行转换和整合,使其适应数据仓库的结构和格式要求。
基于上述处理阶段,数据仓库通常可以划分为以下几个层次:
-
**原始数据层(ODS层)**:存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
-
**明细数据层(DWD层)**:结构和粒度与ODS层保持一致,对ODS层数据进行清洗,如去除空值、脏数据、超过极限范围的数据。
-
**服务数据层(DWS层)**:以DWD为基础,进行轻度汇总,通常聚集到以用户当日、设备当日、商家当日、商品当日等的粒度。
-
**数据应用层(ADS层)**:面向实际的数据需求,以DWD或DWS层的数据为基础,组成的各种统计报表。统计结果最终同步到RDS以供BI或应用系统查询使用。
此外,数据仓库的设计还需要考虑数据的存储和管理。存储方面,根据数据的访问频率和重要程度,可以采用分层存储技术,将数据存储在不同级别的存储设备中,如高速缓存、固态硬盘、传统机械硬盘、磁带和云存储等,以优化存储成本和维护成本。
总的来说,数据仓库的分层概念和原理是为了更有效地管理和利用数据,确保数据的质量、可访问性和可用性。通过合理的分层设计,可以提高数据处理的效率,满足不同的数据需求,并为业务决策和分析提供有力支持。
Superset
Superset是一个开源的数据可视化工具,由Airbnb开发和维护。它主要用于提供直观、可视化的方式来探索和展示数据。以下是关于Superset的详细介绍:
-
数据源连接:Superset可以与多种数据源进行连接,包括SQL数据库(如MySQL、PostgreSQL、Oracle等)、CSV文件、Pandas DataFrame等。这意味着用户可以轻松地从多个数据来源获取数据,并进行混合分析和可视化。
-
可视化图表:Superset提供了丰富的可视化图表类型,如和弦图、事件流图、热力图、视图表等。用户可以根据需要选择合适的图表类型来展示数据,从而更好地理解和分析数据。
-
交互式控件与过滤器:Superset提供了丰富的交互式控件,如下拉菜单、滑块和日期选择器等。这些控件可以帮助用户灵活地探索和过滤数据,快速筛选出感兴趣的部分。
-
自定义仪表盘和报告:Superset支持自定义仪表盘和报告,用户可以根据自己的需求和数据特点来呈现和分享数据发现。这使得Superset成为了一个强大的数据展示和分享工具。
-
灵活的数据连接:Superset可以与各种主流数据库和其他数据源进行无缝连接,支持多种数据格式和协议。这使得用户可以轻松地获取并整合来自不同数据源的数据。
总的来说,Superset是一个功能强大的数据可视化工具,适用于各种场景和需求。无论是数据分析师、数据科学家还是业务用户,都可以通过Superset来轻松地进行数据探索和可视化展示。然而,也需要注意到Superset在安装和使用过程中可能会遇到一些挑战,如依赖包版本不符、用户体验相对较差等问题。因此,在使用Superset时,建议仔细阅读官方文档并遵循相关指导进行操作。
即席查询
相关技术:Presto、Druid、Kylin
即席查询,也被称为Ad Hoc查询,是大数据领域中一个重要的概念。它允许用户根据自己的需求和当前的实际情况,灵活地选择和定义查询条件,然后系统会根据这些用户自定义的条件生成相应的统计报表。
与传统的定制开发的应用查询相比,即席查询的最大特点是其灵活性。在定制开发的应用查询中,查询的条件和逻辑通常在系统设计和实施阶段就已经确定,无法轻易更改。而即席查询则允许用户在任何时候根据自己的需求来定义查询条件,这使得查询过程更加符合用户的实际需求。
实现即席查询的基本原理通常涉及以下几个步骤:
-
数据映射:首先,需要将数据仓库中的维度表和事实表映射到语义层。这样,用户就可以通过语义层来选择和操作这些表。
-
用户定义查询条件:然后,用户可以根据自己的需求,通过语义层选择表,建立表间的关联,并定义查询条件。
-
生成SQL语句:在用户定义完查询条件后,系统会根据这些条件生成相应的SQL语句。这个过程中,系统会根据用户的选择和定义,自动构建出符合用户需求的查询逻辑。
-
执行查询并生成报表:最后,系统会执行生成的SQL语句,从数据仓库中检索出符合条件的数据,并根据用户的需要生成相应的统计报表。
总的来说,即席查询是一种非常灵活和强大的查询方式,它允许用户根据自己的需求随时调整查询条件和逻辑,从而得到最符合自己需求的数据和报表。这也是它在大数据领域中得到广泛应用的重要原因之一。
Sqoop
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(如MySQL、PostgreSQL等)之间进行数据传递。它可以将关系型数据库中的数据导入到Hadoop的HDFS中,也可以将HDFS中的数据导出到关系型数据库中。Sqoop项目始于2009年,最初作为Hadoop的一个第三方模块存在,后来独立成为一个Apache项目,以便用户快速部署和开发人员快速迭代开发。
Sqoop的工作原理如下:
-
连接数据库:Sqoop首先通过JDBC(Java数据库连接)连接到关系型数据库,如MySQL、Oracle或SQL Server。
-
选择数据:Sqoop允许用户选择要传输的数据。可以指定要导入或导出的特定表,也可以执行自定义的SQL查询来选择特定的数据。
-
划分数据:在传输大规模数据集时,Sqoop会将数据划分为多个块,以便并行处理数据并充分利用Hadoop集群的性能。
-
生成MapReduce任务:Sqoop为数据传输生成MapReduce任务。
-
数据传输:Sqoop使用MapReduce作业将数据从关系型数据库导入或导出到Hadoop集群。
-
数据合并:在所有Mapper任务完成后,Sqoop会将导入的数据合并为一个或多个输出文件。
通过以上步骤,Sqoop实现了在关系型数据库和非关系型数据库之间的数据转换和传递。
Atlas元数据管理
Atlas是一个可扩展的核心基础治理服务,主要用于Hadoop等大数据环境中的元数据管理和治理。它提供了开放的元数据管理和治理功能,帮助企业建立数据资产的目录,对这些资产进行分类和治理,并为IT团队、数据分析团队提供围绕这些数据资产的协作功能。
Atlas的核心组件包括元数据的收集、存储和查询展示。此外,它还有一个管理后台,可以对整体元数据的采集流程、元数据格式定义和服务的部署等各项内容进行配置管理。
在使用上,Atlas需要与各种数据存储和处理系统,如Hadoop、Hive、HBase、Kafka等进行配置连接,以便收集这些系统中的元数据信息。一旦配置完成,Atlas就可以开始收集各种数据系统中的元数据信息,包括数据表、列、分区等信息,以及相关的数据流程和血缘关系信息。
通过收集的元数据信息,Atlas可以实现数据血缘追踪,展示不同数据资产之间的血缘关系,帮助用户了解数据的来源和去向,方便数据分析和治理。此外,Atlas还提供了数据关系管理功能,可以在数据资产之间建立关联关系,方便进行数据查询和分析。
除了元数据管理和血缘追踪,Atlas还提供了数据质量监控功能,可以帮助用户监控数据的质量和完整性,及时发现和解决数据质量问题。此外,Atlas与Apache Ranger等安全工具集成,可以提供细粒度的访问控制和安全策略管理,帮助用户保护数据安全和合规性。
总的来说,Atlas是一个功能强大的元数据管理和治理工具,可以帮助企业更好地理解和管理数据资产,提高数据质量和安全性,降低数据追溯的成本和风险。
项目需求描述
系统目标
数据仓库系统需要实现的目标如下:
● 环境搭建完整,技术选型合理,框架服务分配合理;
● 信息流完整,包括数据生成、数据采集、数据仓库建模、数据即席查询;
● 能应对海量数据的分析查询;
● 实现元数据管理
产品描述
本数据仓库项目集合了数据采集、同步、分层搭建、需求实现、脚本编写、任务调度和元数据管理等功能,并提供数据展示页面。用户可通过此项目,将电子商务系统中的用户行为和业务交互数据同步到数据仓库,进行需求分析和计算,部分需求可通过Web页面展示。此外,项目还探索接入即席查询引擎,为用户提供即时查询服务。
系统功能结构
如图2-1所示,该数据仓库系统主要分为4个功能模块,分别是数据采集、数据仓库平台、数据可视化和即席查询。
数据仓库项目整合了数据采集、同步、搭建、实现、编写、调度和管理等功能,并提供数据展示页面。用户可通过此项目,将电子商务系统中的数据同步到数据仓库,进行需求分析和计算,部分需求可通过Web页面展示。此外,项目还探索接入即席查询引擎,为用户提供即时查询服务。数据采集模块负责采集用户行为和业务交互数据,分为两大体系:用户行为数据采集和业务交互数据采集。用户行为数据以日志文件形式存储,采用Flume实时监控采集;业务交互数据存储在MySQL中,采用Sqoop进行T+1采集。数据采集模块负责将原始数据采集到数据仓库中,合理建表,清洗、转义、分类、重组、合并、拆分、统计等,分层数据,减少重复计算。同时考虑固定长期需求和即席查询需求,提供即席查询接口,提高用户挖掘和使用数据效率,方便平台管理人员维护管理,建立元数据信息管理。数据可视化将最终需求结果数据导入MySQL中,供用户使用或Web页面展示。
系统流程图
数据仓库系统流程如图2-2。前端埋点收集用户行为数据,经Flume Agent和Kafka传输到消费层Flume Agent,再存储到HDFS。业务交互数据通过Sqoop采集到HDFS。在HDFS中,数据经Hive处理,提取转换后形成合理分层,最终得到需求结果数据。这些数据导出到MySQL,实现数据可视化和即席查询服务。
业务描述
采集模块业务描述
1.数据生成模块之用户行为数据基本格式
用户执行的一些操作会生成用户行为数据发送到服务器,数据分为公共字段和业务字段。
● 公共字段:基础共性信息。
● 业务字段:前端埋点上报的字段,有具体的业务类型。
数据生成模块之事件日志数据
商品列表页加载过程的事件名称为loading,产生的日志数据的具体字段名称及字段描述如表2-1所示。
广告点击的事件名称为ad,产生的日志数据的具体字段名称及字段描述如表2-4所示。
数据采集模块
采集日志内容,分类后发送到不同的Kafka主题。Kafka作为消息中间件,缓冲日志,防止大量读写请求影响HDFS性能。实时监控Kafka日志生产过程,避免Flume在HDFS中产生大量小文件,降低性能。采用压缩措施,节省存储空间,降低网络I/O。
业务数据采集要求按照业务数据库表结构在数据仓库中同步建表,并且根据业务数据库表性质指定对应的同步策略,进行合理的关系建模和维度建模。
数据仓库需求业务描述
数据仓库分为5层:
-
ODS层:存放原始数据,不做处理。
-
DWD层:清洗ODS层数据,去除空值、脏数据等。
-
DWS层:基于DWD层数据,进行轻度汇总,组成跨主题的宽表。
-
DWT层:按主题对DWS层数据进行进一步聚合,构建全量宽表。
-
ADS层:基于DWD、DWS和DWT层数据,组成统计报表,同步到关系型数据库供查询使用。
数据可视化业务描述
在MySQL中根据ADS层的结果数据创建对应的表,使用Sqoop工具定时将结果数据导出到MySQL中,并使用数据可视化工具对数据进行展示。
服务器资源
服务器资源规划
软件环境
1.技术选型
数据采集运输方面,本项目主要完成三个需求:实时采集服务器日志数据到大数据存储系统,防止数据丢失和堵塞;采集业务数据库数据到数据仓库;导出计算结果到关系型数据库进行展示。我们选用Flume、Kafka和Sqoop来实现这些需求。Flume是一个灵活的数据收集系统,可以从多种源采集、聚集和移动大量数据。Kafka是一个实时性高、可靠性强的消息队列平台,适用于流式数据存储和传输。Sqoop则用于在关系型数据库和HDFS之间传输数据,实现自动化数据采集。
数据存储方面,本项目主要存储原始数据和各层数据仓库中的数据,以及最终结果数据。我们选用HDFS来存储原始数据,因为它适合大规模数据集,能提高文件存储的可靠性。对于最终结果数据,由于数据量小且方便访问,我们选用MySQL。在数据计算方面,我们选用配置了Tez运行引擎的Hive。Hive能将结构化数据文件映射为数据库表,并提供SQL查询功能,解决非关系型数据查询问题。Tez运行引擎能减少中间计算过程的数据落盘次数,提升计算性能。
我们研究了三种流行的即席查询工具:Presto、Druid和Kylin。Presto基于内存计算,Druid擅长处理时序数据,而Kylin则基于预Cube进行计算。在处理大量数据时,元数据管理变得至关重要。为应对这一挑战,Hortonworks公司与其他厂商和用户于2015年提出了数据治理倡议,包括数据分类、集中策略引擎、数据血缘、安全和生命周期管理等方面。Apache Atlas项目是该倡议的成果,社区伙伴持续为其添加新功能和特性,用于管理共享元数据、数据分级、审计、安全性和数据保护等。
总结如下。
● 数据采集与传输:Flume、Kafka、Sqoop。
● 数据存储:MySQL、HDFS。
● 数据计算:Hive、Tez。
● 任务调度:Azkaban。
● 即席查询:Presto、Druid、Kylin。
● 元数据管理:Atlas。
用户行为数据采集
采集日志层Flume
采集日志层Flume主要需要完成的任务为将日志从落盘文件中采集出来,传输给消息中间件Kafka集群,这期间要保证数据不丢失,程序出现故障死机后可以快速重启,对日志进行初步分类,分别发往不同的Kafka Topic,方便后续对日志数据进行分别处理。
消息队列Kafka
通过Flume Agent程序将日志从落盘文件夹采集出来之后,需要发送到Kafka,Kafka在这里起到数据缓冲和负载均衡的作用,大大减轻数据存储系统的压力。在向Kafka发送日志之前,需要先安装Kafka,而在安装Kafka之前需要先安装Zookeeper,为之提供分布式服务。
消费Kafka日志的Flume
将日志从采集日志层Flume发送到Kafka集群后,接下来的工作需要将日志数据进行落盘存储,我们依然将这部分工作交给Flume完成,如图4-3所示。
业务数据采集
就是关系型数据库数据采集
数据同步策略
数据同步是指将数据从关系型数据库同步到大数据的存储系统中,针对不同类型的表应该有不同的同步策略。表的类型包括每日全量表、每日增量表、每日新增及变化表和拉链表。
● 每日全量表:存储完整的数据。
● 每日增量表:存储新增加的数据。
● 每日新增及变化表:存储新增加的数据和变化的数据。
● 拉链表:对新增及变化表进行定期合并。
数据同步策略有三种:
-
每日全量同步:每天存一份完整数据,适合数据量少、每天有新数据插入和旧数据修改的场景。维度表数据量小,适合这种策略。
-
每日增量同步:每天存一份新增数据,适合数据量大、每天只有新数据插入的场景。
-
新增及变化同步:只同步每天新增和变化的数据,适合数据量大、有新增和修改但修改频率不高的场景。这种策略可以避免数据冗余,同时反映数据变化。通过制作拉链表,可以方便地获取某个时间点的数据快照。
拉链表 是指在源表字段的基础上,增加一个开始时间和一个结束时间,该时间段用来表示一个状态的生命周期。制作拉链表,每天只需要同步新增和修改的数据即可,如表5-25所示,可以通过类似"select * from user where start =<'2019-01-02' and end>='2019-01-02'"的查询语句来获取2019-01-02当天的所有订单状态信息。
业务数据采集
业务数据存储在关系型数据库,需先生成数据,再选用采集工具。本项目用MySQL存数据,Sqoop来采集。
数据仓库搭建
关系模型与维度模型
数据处理主要分为联机事务处理(OLTP)和联机分析处理(OLAP)两种。OLTP用于日常的基本事务处理,如银行交易,是关系型数据库的主要应用。而OLAP则用于数据仓库系统,支持复杂的分析操作,提供直观、易懂的查询结果,侧重决策支持
关系模型示意如图6-1所示,严格遵循第三范式(3NF)。从图6-1中可以看出,模型较为松散、零碎,物理表数量多,但数据冗余程度低。由于数据分布于众多的表中,因此这些数据可以更为灵活地被应用,功能性较强。关系模型主要应用于OLTP中,为了保证数据的一致性及避免冗余,大部分业务系统的表都是遵循第三范式的。
维度模型示意如图6-2所示,其主要应用于OLAP中,通常以某一张事实表为中心进行表的组织,主要面向业务,其特征是可能存在数据的冗余,但用户能方便地得到数据。
关系模型虽然数据冗余程度低,但在大规模数据中进行跨表分析、统计、查询时,会造成多表关联,这会大大降低执行效率。所以通常我们采用维度模型建模,把各种相关表整理成事实表和维度表两种。所有的维度表围绕事实表进行解释。
星形模型、雪花模型与星座模型
在维度建模的基础上,有三种模型:星形模型、雪花模型与星座模型。当所有维度表都直接连接到事实表上时,整个图解就像星星一样,故该模型称为星形模型,如图6-3所示。星形模型是一种非正规化的结构,多维数据集的每个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余。例如,在地域维度表中,存在国家A省B的城市C及国家A省B的城市D两条记录,那么国家A和省B的信息分别存储了两次,即存在冗余。
星形模型建模示意
当有一张或多张维度表没有直接连接到事实表上,而通过其他维度表连接到事实表上时,其图解就像多个雪花连接在一起,故该模型称为雪花模型。雪花模型是对星形模型的扩展。它对星形模型的维度表进行进一步层次化,原有的各维度表可能被扩展为小的事实表,形成一些局部的"层次"区域,这些被分解的表都连接到主维度表而不是事实表上,如图6-4所示。雪花模型的优点是可通过最大限度地减少数据存储量及联合较小的维度表来改善查询性能。雪花模型去除了数据冗余,比较靠近第三范式,但无法完全遵守,因为遵守第三范式的成本太高。
雪花模型
星座模型与前两种模型的区别是事实表的数量,星座模型是基于多张事实表的,且事实表之间共享一些维度表。星座模型与前两种模型并不冲突。如图6-5所示为星座模型建模示意。星座模型基本上是很多数据仓库的常态,因为很多数据仓库都有多张事实表。
星座模型
目前在企业实际开发中,其不会只选择一种模型,而会根据情况灵活组合,甚至使各模型并存(一层维度和多层维度都保存)。但是,从整体来看,企业更倾向于选择维度更少的星形模型。尤其是对于Hadoop体系,减少join就是减少中间数据的传输和计算,可明显改善性能。
表的分类
在数据仓库建模理论中,通常将表分为事实表和维度表两类。事实表加维度表,能够描述一个完整的业务事件。例如,昨天早上张三在某电商平台花费200元购买了一个皮包,描述该业务事件需要三个维度,分别是时间维度(昨天早上)、商家维度(电商平台)和商品维度(皮包)。具体分类原则如下。
1.事实表事实表中的每行数据代表一个业务事件。"事实"这个术语表示的是业务事件的度量值。例如,订单事件中的下单金额。并且事实表会不断扩大,数据量一般较大。
1)事务性事实表 事务性事实表以每个事务或事件为单位,例如,以一笔支付记录作为事实表中的一行数据。
2)周期型快照事实表周期型快照事实表中不会保留所有数据,只保留固定时间间隔的数据,例如,每天或每月的销售额,以及每月的账户余额等。
3)累积型快照事实表累积型快照事实表(见表6-9)用于跟踪业务事实的变化。例如,数据仓库中可能需要累计或存储从下订单开始到订单商品被打包、运输和签收的各业务阶段的时间点数据来跟踪订单生命周期的进展情况。当这个业务过程进行时,事实表的记录也要不断更新。
维度表维度表一般是指对应业务状态编号的解释表,也可以称为码表。例如,订单状态表、商品品类表等,如表6-10和表6-11所示。
订单状态表
商品品类表
仓库分层
数据仓库分层可以简化复杂问题,减少重复开发,隔离原始数据,从而充分发挥数据仓库的作用。
表命名ODS层命名为ods_表名。DWD层命名为dwd_dim/fact_表名。DWS层命名为dws_表名。DWT层命名为dwt_购物车。ADS层命名为ads_表名。临时表命名为tmp_×××。用户行为表以.log为后缀。
数据仓库建模(重在理解)
在本项目中,数据仓库分为五层,分别为ODS层(原始数据层)、DWD层(明细数据层)、DWS层(服务数据层)、DWT层(主题数据层)和ADS层(数据应用层)。本节主要探讨五层架构中的数据仓库建模思想。
1.ODS层(原始数据的备份)
ODS层主要进行如下处理。
(1)数据保持原貌不进行任何修改,起到备份数据的作用。
(2)数据采用压缩格式,以减少磁盘存储空间(例如,100GB的原始数据,可以被压缩到10GB左右)。
(3)创建分区表,防止后续进行全表扫描。
2.DWD层 (最小颗粒度的事实表)
DWD层需要构建维度模型,一般采用星形模型,而呈现的状态一般为星座模型。维度建模一般按照以下四个步骤进行。
1)选择业务过程在业务系统中,若业务表过多,则可挑选我们感兴趣的业务线,如下单业务、支付业务、退款业务及物流业务,一条业务线对应一张事实表。小型公司的业务表可能比较少,建议选择所有业务线。
2)声明粒度数据粒度是指数据仓库中保存数据的细化程度或综合程度的级别。声明粒度意味着精确定义事实表中的一行数据所表示的内容,应该尽可能选择最细粒度,以此来满足各种各样的需求。典型的粒度声明如下。
● 将订单中的每个商品项作为下单事实表中的一行数据,粒度为每次。
● 将每周的订单次数作为一行数据,粒度为每周。
● 将每月的订单次数作为一行数据,粒度为每月。
如果在DWD层的粒度就是每周或者每月,那么后续就没有办法统计更细粒度(如每天)的指标了。所以建议采用最细粒度。
3)确定维度
维度的主要作用是描述业务事实,主要表示的是"谁、何处、何时"等信息,如时间维度、用户维度、地区维度等常见维度。
4)确定事实此处的"事实"一词指的是业务中的度量值。例如,订单表的度量值就是订单件数、订单金额等。在DWD层中,以业务过程为建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细数据层事实表。事实表可进行适当的宽表化处理 。通过以上步骤,并结合本数据仓库项目的业务事实,得出业务总线矩阵表,如表6-12所示。业务总线矩阵的原则主要是判断维度表和事实表之间的关系,若两者有关联,则使用√标记。
根据维度建模中的星形模型思想,将维度进行退化。如下图所示,地区表和省份表退化为地区维度表 ,SKU商品表、品牌表、SPU商品表、商品三级品类表、商品二级品类表、商品一级品类表退化为商品维度表 ,活动订单关联表和优惠规则表退化为活动维度表。至此,数据仓库的维度建模已经完毕,DWS层、DWT层、ADS层和维度建模已经没有关系了。DWS层和DWT层都是按照主题来创建宽表的,而主题相当于观察问题的角度,不同的维度表意味着不同的角度。
3.DWS层 (针对主题对象不同维度的最细粒度统计的宽表)
DWS层用于统计各主题对象的当天行为,服务于DWT层的主题宽表。如下图所示,DWS层的宽表字段是站在不同维度的视角去看事实表的,重点关注事实表的度量值,通过与之关联的事实表,获得不同事实表的度量值。
4.DWT层 (针对主题对象的全量各维度统计结果的宽表)
DWT层以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。DWT层主题宽表都记录什么字段?DWT层的宽表字段站在维度表的角度去看事实表,重点关注事实表度量值的累计值、事实表行为的首次时间和末次时间,如下图所示。例如,订单事实表的度量值是下单次数、下单金额。订单事实表的行为是下单。我们站在用户维度表的角度去看订单事实表,重点关注订单事实表至今的累计下单次数、累计下单金额和某时间段内的累计下单次数、累计下单金额,以及关注下单行为的首次时间和末次时间。