大数据开发-离线数仓项目(概述)
1. 项目背景
大数据开发离线数仓的项目背景是随着数据规模越来越庞大,传统的数据处理方式已经无法满足大规模数据处理的需求。因此,为了满足数据更加高效、精准、全面地展现和利用,离线数仓逐渐被广泛应用。离线数仓可以将数据从不同数据源(如关系型数据库、日志、传感器等)中提取出来,经过清洗、转换、加工等多种处理后,存储在数仓中,供后续的数据分析或挖掘使用。这样做的好处是可以将数据处理和存储分离,减轻单个系统的负荷,提高数据处理的效率和准确性,同时也能为企业提供更好的决策支持。
例如:随着公司的业务发展,公司中的业务功能和数据剧增,这些数据都是公司的数据资产,需要针对数据进行有价值的数据信息提取,比如,订单数,订单金额,用户在线时长,用户连续登录次数等;更精准的了解公司的运营情况,同时还可以指导公司的运营策略!
离线数仓项目: 分析处理的是历史数据,对结果要求的时效性低;一般是今天计算查看昨天的统计结果。
离线(offline): 通常是指离线批处理(batch processing)或离线数据处理(offline data processing)。离线数仓的离线也是指这个概念。离线数仓是指基于离线批处理技术构建的数据仓库。离线批处理是指一种数据处理方式,通过批量处理一定量的数据,将处理结果保存到数据仓库中。离线批处理通常是在数据量较大、处理时间相对较长的情况下使用的一种处理方式,通过预定时间段的批量处理,来减少数据处理的实时性要求,从而节省计算资源和成本。
在离线数仓中,离线指的是数据采集、数据处理和数据分析等过程是在一定时间间隔内批量进行的。这种批量处理方式可以降低对计算资源和网络带宽的要求,并且更加稳定和可靠。同时,由于离线数仓中数据的处理和分析是基于历史数据,因此可以提供更深入、更全面的数据分析结果。
**数仓: **数据仓库 ,不仅仅是为了存储,管理 , 计算数据, 根据业务构建仓库系统, 针对具体的业务需求设计 ,功能上数仓更加丰富 ,比如数据的 ETL。
ETL(Extract-Transform-Load): 是指数据集成过程中的三个主要步骤:Extract、Transform和Load。它是数据集成的基础,用于将不同的数据源中的数据抽取出来,并进行清洗、转换和加载到目标系统中。ETL技术主要应用于数据仓库、数据集市等数据集成场景。
- Extract(数据抽取)
数据抽取是ETL的第一步,主要目的是从各个数据源中提取数据。数据源可以是各种不同的数据系统、文件、API等。数据抽取需要考虑数据源的数据格式、数据量、数据质量、数据安全性等因素。数据抽取通常可以通过数据库、文件、API等方式来实现。
2. Transform(数据转换)
数据转换是ETL的第二步,主要目的是将抽取出来的数据进行清洗和转换,以适应目标系统的需求。数据转换通常包括数据清洗、数据合并、数据格式转换、数据计算等操作。数据转换需要考虑数据的质量、数据的精度、数据的一致性等因素。
3. Load(数据加载)
数据加载是ETL的第三步,主要目的是将转换好的数据加载到目标系统中。目标系统可以是数据仓库、数据集市、应用系统等。数据加载需要考虑数据的安全性、数据的完整性、数据的可用性等因素。数据加载通常可以通过各种不同的方式来实现,例如数据库、文件、API等。
ETL技术的重要性在于它可以实现不同数据源之间的数据集成,从而形成一个完整的、一致的数据集。在实际应用中,ETL技术还需要考虑很多因素,例如数据质量、数据的同步性、数据的安全性等,这些都是需要ETL技术人员注意的问题。
数据库(mysql , hbase , redis) DBMS :单一性, 通用性, 不针对某个业务 存储单纯的实体数据
2. 项目意义
总体意义
某APP上线后,由于业务模式新颖,市场需求量大,经过一段时间的精心运营后,逐渐积累起了上千万用户,以及三四百万的日活量,app的业务功能和产品种类、数量也急速膨胀;
随着规模的增长,逐渐凸显出大量的问题:
l 营销分析断层: 市场营销成本居高不下,投放拉新的效果追踪出现断层,无法追踪各渠道实际转化率,难以准确分析 ROI。
l 产品迭代无法量化: 缺少实时的用户行为分析能力,使得产品功能改版的效果无法量化衡量,核心流程优化点更多靠拍脑袋,bug问题的定位后知后觉造成长时间的损失。
l 用户运营不精准: “千人一面”的全量用户营销,投入产出难以把控,不精准的粗犷方式难以真正提升存量用户的长期活跃度。
l 全局运营指标监控不实时: 有运营的 BI 系统,但运营指标监控不及时,未形成核心的指标预警机制,决策滞后。
公司急需告别这种粗放的、严重依赖人力的运营状况,急需建设一套强大的数据运营平台,用于驱动营销渠道效果评估、用户精细化运营改进、产品功能及用户体验优化、老板看板辅助管理决策、产品个性化推荐改造、用户标签体系构建等应用场景,从各方面为公司的进一步发展提供强有力的数据支撑
电商领域
那么离线数仓在电商领域中具有重要的意义,主要有以下三个方面:
- 数据全面性: 离线数仓可以将来自不同数据源、不同格式的数据进行整合,使得数据变得更加全面,包含了不同业务线上的所有数据,如商品信息、用户行为、交易记录等,这样就可以进行更加全面的分析,提升数据分析的深度和广度。
- 数据准确性: 离线数仓可以对数据进行清洗、去重、转换等操作,确保数据的准确性和一致性。同时,通过对数据进行清洗和处理,可以避免数据出现重复、缺失等情况,使得数据质量更加可靠。
- 数据分析: 离线数仓可以提供更深入、更全面的数据分析结果,为企业提供更加准确的数据支持。例如,电商公司可以通过离线数仓对用户行为进行深入分析,包括用户购买行为、浏览行为等,了解用户的购买偏好、兴趣爱好等信息,为电商公司提供更加精准的营销策略和服务。
使用离线数仓的实际情况:
- 数据量大、多源异构: 电商公司的数据来源通常比较多,数据量也较大,需要对这些数据进行整合和处理,使用离线数仓可以满足这种需求。
- 数据需求稳定 :由于离线数仓是基于离线批处理技术构建的,因此在数据处理时会产生一定的延迟,这种延迟对于一些数据需求不是很实时的业务场景可以接受。
- 对数据质量要求高: 离线数仓可以对数据进行清洗、去重、转换等操作,确保数据的质量和一致性,可以满足数据质量要求较高的场景。
离线数仓解决了许多具体的问题,比如:
- 数据集成问题: 离线数仓可以将来自不同数据源、不同格式的数据进行整合,解决了数据集成的问题。
- 数据质量问题: 离线数仓可以对数据进行清洗、去重、转换等操作,解决了数据质量问题。
- 数据分析问题: 离线数仓可以提供更深入、更全面的数据分析结果,解决了数据分析问题。例如,在电商领域,离线数仓可以对用户行为进行深入分析,提供更加准确的用户画像和精准营销策略。
- 实时性问题: 离线数仓的建设是基于离线批处理技术的,因此实时性不如在线数仓。但是,通过离线数仓可以进行离线计算和数据预处理,为在线数仓提供更加准确、全面的数据支持。
- 节省成本问题: 离线数仓的建设相对较为简单和成本较低,可以帮助企业节省建设成本。
总的来说,离线数仓在电商领域的建设可以提高数据的全面性、准确性和分析能力,为企业提供更加准确的数据支持和决策依据,有助于企业提升竞争力和盈利能力。
3. 数据来源
- 采集业务系统的日志服务器上的用户行为日志数据
使用数据采集工具,如Flume,将 app端、小程序端、wed端的用户行为日志数据(登录时间、登录时长、点击了哪些内容、下的订单、游戏胜负局数、游戏签到情况、支付订单情况、浏览商品时长等等)采集到系统
- 抽取业务系统的联机业务库mysql中的业务表数据
例如你的vip等级,商品的详细信息,店铺信息,你购买商品的总订单数,游戏充值总金额等,即存放在公司数据库中的数据
- 从合作方通过数据接口获取外部数据
有些数据无法直接获取,例如各地区经纬度位置信息,需要从高德地图数据接口获取相关数据
- 用爬虫爬取数据
这种数据一般用的少,因为太可刑,太可拷了
爬虫数据一般为商家之间的竞争,爬取其他商家商品价格数据,然后自己比其他商家价格第一点从而获取顾客下单数
4. 项目需求
离线数仓的项目需求和技术栈与具体的业务场景和数据情况有关,下面以电商场景为例,介绍离线数仓的常见项目需求和相应的技术栈:
- 数据采集和迁移: 需要采集多种来源的数据,如订单数据、用户数据、商品数据、支付数据等,要求对数据进行抽取、转换、加载等处理操作。需要将业务数据进行迁移。
- 数据处理: 需要对原始数据进行清洗、加工、处理,例如:去除重复数据、缺失值处理、数据格式转换、数据合并等操作。
- 数据建模: 需要对处理后的数据进行建模和数据仓库设计,例如:范式建模(三范式)、维度建模、事实建模、数据仓库设计等。
- 主题分析: 页面, 用户,设备,地域,事件,订单,流量等各个主题分析
- 数据存储: 需要对处理后的数据进行存储,例如:HDFS、HBase、Cassandra、Kudu等。
- 数据集成: 需要将不同来源、不同格式的数据进行整合,例如:数据分层、数据集成等。
- 元数据管理、数据质量监控 :需要对数据进行质量监控和管理,例如:数据准确性、完整性、一致性等。
- 数据分析: 需要对离线数据进行分析,例如:销售分析、用户分析、市场分析、业务分析等。
- 任务调度、告警 :需要定时执行相关的任务,例如:凌晨1点计算前一天的数据等
5. 相关技术栈选择
本次离线数仓项目技术栈的选型:
- 数据采集系统: Flume , Sqoop
- 数据存储: Mysql , HDFS ,Hbase
- 数据计算: Hive ,Spark
- 资源调度系统: Yarn
- 快速查询: Presto 快速查询
- 数据看台: SuperSet 展示数据
- 任务调度: DolphinScheduler
- 元数据管理: Atlas
6. 项目架构和项目流程
离线数仓架构图
项目流程
- 用HDFS做存储系统,用Hive 做数仓整体管理,用spark(mapreduce)做底层计算引擎
- 数仓的分层:
- ODS层(贴源层,原始层):各个数据源(例如:数据库、日志、消息队列等)中采集的数据,没用进行加工处理的原始数据
- DWD层(数仓明细层):对采集的数据进行数据清洗、数据集成、数据加工、数据转换、数据归约等操作,使得数据能够符合业务需要,并保存到数据仓库中。即存储明细的数据。
- DWS层(数仓服务层):将明细数据根据业务需求,进行轻度聚合。
- ADS层(应用层):主要负责将存储在数据仓库中的数据进行分析和应用,例如进行OLAP分析、BI分析、报表展示、数据挖掘等。
3. 辅助系统
-
元数据管理系统 atlas
表的元数据的管理,查询
表的计算逻辑的血缘追踪
atlas自动获取各类数仓组件中的数据资产的技术元数据底层原理
比如获取hive中的数据资产的技术元数据- 表结构信息
通过请求hive的元数据服务获取 - 表的血缘关系
在hive上配置插件(钩子),获取hive上执行insert 语句,然后去解析这个sql的语法,就能得到表和表之间的血缘关系
- 表结构信息
-
任务调度系统 dolphinScheduler
自动化调度我们开发好的大量数据计算脚本 -
数据质量监测系统 (个性化开发)- griffin
监测各个表的数据质量并直观展示数据质量检查报告4 数据服务层
1:数据分析、可视化
查询特点
批量查询,查询逻辑高度复杂,运算量大,对响应速度要求不严苛(分钟级)
数据就放在hive中,然后用presto提供快速查询
2:支撑某些业务功能模块
查询特点
高并发,随机单条查询,查询逻辑简单,对响应速度要求极为严苛(毫秒级)
数据得从hive中迁移到hbase中提供查询
面试题:数仓分层的好处?
离线数仓采用分层架构的方式来设计和组织数据处理和管理流程,主要是为了实现以下几个方面的好处:
1. 数据隔离和管理方便: 不同的数据处理任务需要使用不同的数据集,采用分层架构可以将数据隔离开来,便于管理和维护。每一层都有明确的输入和输出,不同的处理任务可以在不同的层中进行。
2. 数据清洗和加工方便: 分层架构可以将数据清洗和加工操作分配到不同的层中进行,每一层都有专门的任务和工具,方便进行数据清洗、格式转换、数据加工等操作。每一层的处理结果也可以在下一层进行二次加工和处理。
3. 数据共享和重用方便 :采用分层架构可以实现数据共享和重用。数据仓库层中的数据可以被多个应用层使用,数据处理层中的数据清洗和加工方法也可以在不同的处理任务中重复使用。
4. 维护和扩展方便: 采用分层架构可以将不同的业务逻辑分配到不同的层中进行管理和维护,方便进行功能扩展和升级。每一层都可以独立进行维护和优化,不同层之间的接口和交互也比较清晰和简单。
5. 性能和稳定性优化方便: 采用分层架构可以实现对系统的性能和稳定性进行优化。例如可以将对数据的读取和写入操作分配到不同的存储层中进行,以提高系统的性能;也可以将数据清洗和格式转换等操作分配到不同的处理层中进行,以提高系统的稳定性和可靠性。
总之,采用分层架构可以使离线数仓系统更加灵活、稳定、可维护和可扩展,使得数据处理和管理过程更加高效和优化。
7. 核心概念
· 主题
在数仓开发过程中,有大量的需求统计(今天的总活跃人数、今天的总订单数、今天的总下单人数、今天的总成交金额... ...),成千上万的报表,各种需求的分析,需要各种表。如果不分类管理,后续根本不知道数据从哪里开始算,不知道所需要的表报是否做过,这就可能会增加表的重复使用,降低性能
举例:1. 统计新老用户的订单总金额 2.统计新老用户的在线时长 3. 统计新老用户下单总量
用户行为数据中 和 用户信息表中 没有新老标记 如果是各个需要独立计算 在各个需求中都要判断新老
计算逻辑是重复的** , 效率是低下的** ,模型是 不健壮的 *!
*可以根据具体的业务范围划分主题 , 方便数据的管理和数据的计算划分 , 有利于协调工作, 后续数仓维护
引入主题的用处:
在离线数仓中,引入主题的概念是为了更好地支持业务分析和决策。离线数仓是一个包含大量数据的数据仓库,其中包含了各种各样的数据,这些数据可能来自不同的来源,而且数据的质量和结构也可能各不相同。
为了更好地利用这些数据进行分析和决策,需要将数据进行分类和组织,将同一业务领域的数据组织到一起,形成一个有意义的数据集合,这个集合就是一个主题。
通过将数据组织成主题,可以使数据更具可读性和可操作性,也更方便进行数据分析和查询。此外,主题的建立还能帮助数据仓库管理员更好地管理数据,对数据进行维护和更新。
通过对主题进行设计和建模,可以更好地反映业务流程,把复杂的业务问题转化为简单的数据问题,更方便地进行数据分析和决策支持。因此,建立主题是离线数仓中非常重要的一环,它能帮助企业更好地理解业务,更好地管理数据,从而更好地支持业务决策。
如何进行主题的划分
- 按照业务领域进行划分: 主题可以按照业务领域进行划分,例如按照销售、采购、人事、财务等方面来划分主题。这样可以使得数据更加有意义,也更加符合实际业务。
- 按照数据来源进行划分: 主题也可以按照数据来源进行划分,例如按照不同的数据源(如ERP系统、CRM系统、网站等)来划分主题。这种划分方法可以将不同的数据源进行整合,使得数据更加全面,有利于综合分析和决策。
- 按照数据特点进行划分: 主题也可以按照数据的特点进行划分,例如按照数据的结构、粒度、周期、度量等方面来划分主题。这种划分方法可以使得数据更加易于分析和查询,也更加符合具体的业务需求。
- 综合考虑多种因素进行划分: 在实际情况中,通常需要综合考虑多种因素来进行主题的划分,例如考虑业务领域、数据来源和数据特点等多个方面。根据具体的业务需求和数据特点,采取不同的主题划分方法,能够使得离线数仓更好地支持业务分析和决策。
- 根据粒度和层次进行划分: 在数据仓库建设中,通常需要将主题进一步细化成维度和事实表。在维度表中,存储的是描述性信息,如时间、地点、产品、客户等,它们是数据分析的基础,可以用来划分主题。而在事实表中,存储的是度量值,如销售额、利润、订单数量等,它们可以根据粒度来进行划分,如按日、周、月、季度或年度等。通过将主题分解成多个维度和事实表,可以更好地支持复杂的数据分析和查询需求。
- 考虑数据集成和数据质量: 在进行主题划分时,需要考虑到数据集成和数据质量的问题。不同的数据源和系统中的数据格式和规范可能不同,需要进行数据转换和清洗,以确保数据的准确性和一致性。此外,需要进行数据集成,将来自不同数据源的数据进行整合,使得数据更加完整和全面。因此,在进行主题划分时,需要考虑到数据集成和数据质量的问题,以确保离线数仓的数据质量和可靠性。
- 灵活适应业务需求变化: 随着业务的发展和变化,离线数仓的主题也需要随之调整和优化。因此,在进行主题划分时,需要考虑到业务的可变性和灵活性,尽量避免过度设计和过于复杂的结构。同时,还需要采用灵活的架构和技术,能够快速适应业务需求的变化。
以电商为例,一个典型的电商离线数仓中可能包含多个主题,例如:
- 订单主题: 该主题包含订单相关的数据,包括订单编号、订单状态、订单金额、支付方式、下单时间、收货地址等信息。订单主题可以帮助企业分析订单的趋势和特征,例如不同时间段的订单量变化、订单金额的分布情况、订单取消率、订单配送情况等,从而对订单处理和管理进行优化。
- 商品主题 :该主题包含商品相关的数据,包括商品编号、商品名称、商品价格、商品分类、商品销量、库存情况等信息。商品主题可以帮助企业了解商品的销售情况和特征,例如热销商品、滞销商品、商品价格的变化趋势、商品分类的销售比例等,从而对商品管理和采购进行优化。
- 用户主题: 该主题包含用户相关的数据,包括用户编号、用户名称、用户地址、用户购买记录、用户评价等信息。用户主题可以帮助企业了解用户的行为和偏好,例如用户的购买次数、购买金额、购买渠道、购买频率、用户的满意度等,从而对用户服务和营销进行优化。
- 营销主题: 该主题包含营销相关的数据,包括营销活动名称、活动时间、参与人数、成交金额等信息。营销主题可以帮助企业了解不同营销活动的效果和影响,例如哪些营销活动效果最好、参与人数最多、成交金额最高等,从而对营销策略进行调整和优化。
· 维度
在离线数仓中,维度是指描述业务对象的属性或者特征的数据项,可以用来对事实数据进行分类和聚合。维度的值是固定的,通常用于对业务数据进行分析、统计和查询。维度的具体定义和设计需要根据业务需求进行确定,一般来说包括 事实表 和 维度表 两种表结构。
例如:在电商网站的离线数仓中,用户维度可以包括用户ID、性别、年龄、地域等属性。订单维度可以包括订单ID、下单时间、支付时间、支付方式、订单状态等属性。商品维度可以包括商品ID、商品名称、品牌、价格、类型等属性。 这些维度可以帮助业务人员对订单、用户和商品进行分析、统计和查询,如查看用户在不同时间段下单的情况,了解各种支付方式的使用情况,分析不同地域的销售情况等。
在数据仓库中,维度还可以被组织成层次结构,以便更好地支持多维数据分析。例如:在地域维度中,可以将省份、城市、区县等信息组织成一个层次结构,这样可以方便地进行跨级别的查询和汇总分析。
· 度量/指标
在离线数仓中,度量/指标是指描述业务对象状态或者变化的数据项,通常用于计算、统计和度量业务数据的特征和变化。度量/指标的值通常是可计算的,可以用于对业务数据进行聚合、比较和分析。
例如,在电商网站的离线数仓中,订单量、销售额、成交量、访问量等都是常见的度量/指标。这些指标可以用于度量和分析业务的运营效果、销售情况和用户活跃度等。例如,可以使用销售额度量来了解不同地域、时间段、用户群体和商品类型的销售情况,使用访问量指标来评估网站的流量质量和用户满意度等。
在数据仓库中,度量/指标还可以根据业务需求进行定义和计算,例如定义新的指标或者使用多个指标组合计算出新的指标。度量/指标还可以被组织成度量族,以便更好地支持多维数据分析。例如,在订单事实表中,可以定义一个度量族为“销售情况”,包括销售额、订单量、成交量等指标。这样可以方便地进行跨度量族的查询和分析。
· 业务
业务、业务系统和业务流程是数据仓库建设中经常涉及的概念,它们分别指业务活动、业务实现的计算机系统和业务执行的过程。下面分别详细说明:
- 业务: 业务是指组织或企业的活动或任务,是企业生产、经营的核心。在数据仓库中,业务常常被抽象为一种数据集合或实体,例如电商网站的订单、用户、商品、销售等。
- 业务系统: 业务系统是指用于支持业务活动的计算机系统,是实现业务的技术基础。业务系统通常包括各种软件系统、硬件设备、网络等,例如电商网站的订单系统、支付系统、仓储系统等。
- 业务流程: 业务流程是指业务活动的执行过程,是实现业务的方法论和规范。业务流程通常包括各种环节、步骤、流转和处理等,例如电商网站的下单流程、付款流程、发货流程等。
举例说明,以电商网站为例:
- 业务:电商网站的业务包括订单管理、用户管理、商品管理、促销管理等。其中,订单管理是核心业务之一,它包括下单、付款、发货等活动。
- 业务系统:电商网站的业务系统包括订单系统、支付系统、仓储系统、用户系统等。其中,订单系统是核心业务系统之一,它用于记录订单的创建、支付、发货等过程。
- 业务流程:电商网站的下单流程包括选择商品、确认订单、填写收货信息、选择支付方式等步骤;支付流程包括选择支付方式、输入支付信息、确认支付等步骤;发货流程包括收到订单、检查库存、准备发货、物流跟踪等步骤。这些业务流程通常需要结合业务系统来实现。
- 在数据仓库建设中,对业务、业务系统和业务流程的理解可以帮助数据仓库建设者更好地理解业务需求,确定数据仓库的数据源和数据模型,并设计合适的ETL流程和查询接口。
8. 数仓构建流程
数仓构建流程图
主题划分后: 一般主题的划分由产品经理决定, 一般公司不会超过10个大主题, 大主题下可能有很多小主题, 主题过多不利于后期的维护和开发!
数据域
- 业务数据域(Business Data Domain): 按照业务领域进行划分,每个业务领域对应一个业务数据域,如销售数据、采购数据等。在这个数据域中,可以对数据进行标准化、去重、清洗等处理,以便后续的数据挖掘和分析。
- 行为域(Behavioral domain) :主要是记录用户行为的数据,通常是通过网站、APP等渠道获取的,包括用户点击、购买、搜索、评论等行为。行为域的数据比较大,且通常需要进行实时处理和分析,以支持个性化推荐、用户画像等功能。
- 画像域(Portrait domain): 则是通过对用户数据进行分析、统计和建模得到的用户画像数据,通常包括用户的基本信息、偏好、习惯、行为特征等。画像域的数据相对较小,但对于用户画像、精准营销等功能至关重要。
- 时间数据域(Time Data Domain) :按照时间维度进行划分,每个时间段对应一个时间数据域,如每日销售数据、每周销售数据、每月销售数据等。在这个数据域中,可以对数据进行时间序列分析、趋势分析等处理,以便预测未来的业务趋势。
- 功能数据域(Functional Data Domain) :按照功能模块进行划分,每个模块对应一个功能数据域,如财务数据、人力资源数据等。在这个数据域中,可以对数据进行集成、关联、分析等处理,以便支持业务决策。
- 元数据域(Metadata Data Domain): 用于描述和管理数据仓库中的元数据,包括数据结构、数据定义、数据字典、数据文档等信息。在这个数据域中,可以对数据进行元数据管理、数据质量管理、数据访问管理等处理,以便支持数据管理和治理。
- 联邦数据域(Federated Data Domain): 将多个数据源整合到一个数据域中,可以进行跨域数据分析和处理。在这个数据域中,可以对数据进行集成、清洗、转换等处理,以便支持复杂的数据分析和决策。