【万字长文】电商离线数仓6.0学习笔记1:环境配置前(P1-P16)

架构篇

1.采集项目和数据仓库项目的区别

采集项目和数据仓库项目是企业中数据管理平台中的两个核心模块,两者具有独立性。

功能上,采集项目以数据的采集、传输为主,数仓项目以数据的计算为主,同时也能存储数据。

技术上,采集项目:flume、kafka、datax、maxwell,数仓项目:mysql、HDFS、Spark

2.数据库和数据仓库概念区分

名称上,数据库:database(基础、核心的数据)数据仓库:data warehouse

数据来源上,数据库:企业中基础核心的业务数据 数据仓库:数据库中的数据

数据存储上,数据库:核心作用就是查找业务数据(行式存储、索引、不能存储海量数据)数据太多查询性能下降 数据仓库:核心作用就是统计分析(列示存储、存储海量数据)数据量够多角度够多统计分析才准确

数据价值上,数据库:保证全企业全业务的正常运行 数据仓库:将数据的统计结果为企业的经营决策提供数据支撑

PS:数据仓库不是数据流转的终点,需要将统计结果通过可视化图表展现给客户。

3.数据流转的过程

(不完整,只记录涉及到的)

客户端——业务服务器(业务数据,用户行为数据)——数据存储(业务数据库,用户行为日志)——数据的统计分析(数据仓库)—— 数据可视化(可视化平台,图表)

4.数据仓库技术选择(Hive)

数据仓库:核心功能统计分析

可选计算框架:Spark(scala), MapReduce, Flink(实时)

本次是做离线数仓,故排除Flink。

Spark框架通常情况下比MapReduce性能更优

1. 内存计算优势

  • Spark:Spark 支持将数据加载到内存中进行计算,形成弹性分布式数据集(RDD),后续的计算任务可以直接基于内存中的数据进行,避免了频繁的磁盘 I/O 操作。例如,在迭代计算场景中,如机器学习算法(如迭代式的梯度下降算法),每次迭代的数据可以在内存中快速传递和处理,大大提高了计算速度。
  • MapReduce:MapReduce 是基于磁盘的计算框架,每一轮计算的中间结果都需要写入磁盘,下一轮计算时再从磁盘读取,磁盘 I/O 操作非常耗时,严重影响了整体性能。

2. 任务调度效率

  • Spark:Spark 的任务调度更为高效,它采用 DAG(有向无环图)调度器,能够对整个作业的依赖关系进行分析,将多个连续的操作合并成一个任务集,减少了任务启动和调度的开销。例如,在一个复杂的数据分析流程中,Spark 可以将多个转换操作(如过滤、映射、聚合等)优化成一个任务链,一次性完成处理。
  • MapReduce:MapReduce 的任务调度相对简单,每个 Map 任务和 Reduce 任务都需要单独进行调度和启动,增加了额外的时间开销,尤其是在处理复杂任务时,效率较低。

3. 数据处理速度

  • Spark:提供了丰富的高级算子,如 map、filter、reduceByKey 等,这些算子可以在内存中高效地对数据进行处理。同时,Spark 还支持多种数据格式和数据源,能够快速地进行数据读取和转换。例如,在处理实时流数据时,Spark Streaming 可以以毫秒级的延迟处理数据。
  • MapReduce:由于其基于磁盘的特性和相对简单的编程模型,在数据处理速度上明显不如 Spark。它需要编写复杂的 Map 和 Reduce 函数,并且在处理大规模数据时,磁盘 I/O 成为性能瓶颈。

如果直接用spark框架要学习scala,开发成本高,通过SQL方式实现比较好。

两种SQL实现Spark方式区别:谁解析SQL谁放前面

1. Spark On Hive Spark解析SQL
2. Hive On Spark Hive解析SQL

实际开发中其实两种方式都会选择,因为Hive基于Hadoop,国内开发用Hive On Spark的多一些,所以本项目采用Hive完成数仓的开发。

两种技术路线的比较:

  • Spark on Hive
    • Hive 角色:Hive 主要提供数据存储和元数据管理功能。它将数据存储在 HDFS 等分布式文件系统中,并通过元数据存储来记录表结构、数据位置等信息。
    • Spark 角色:Spark 负责 SQL 解析、优化和执行。Spark SQL 通过加载 Hive 的配置文件获取元数据信息,然后可以操作 Hive 表中的数据,底层基于 Spark RDD 进行计算。
  • Hive on Spark
    • Hive 角色:Hive 既负责数据的存储和管理,也负责 SQL 的解析、优化和编译。用户提交的 Hive SQL 语句由 Hive 进行处理,将其转换为可执行的任务。
    • Spark 角色:Spark 作为执行引擎,接收 Hive 解析优化后的任务并执行,将 Hive 查询作为 Spark 任务提交到 Spark 集群上进行计算。

执行流程

  • Spark on Hive
    • 用户使用 Spark SQL 编写代码或执行 SQL 语句来操作 Hive 数据。
    • Spark SQL 加载 Hive 配置,获取元数据,确定要操作的数据位置和表结构等12。
    • Spark 根据 SQL 语句进行逻辑规划和物理规划,将其转化为 RDD 操作并在 Spark 集群上执行。
  • Hive on Spark
    • 用户通过 Hive 客户端(如 Hive CLI、Hue 等)提交 Hive SQL 语句3。
    • Hive 对 SQL 语句进行解析、词法分析、语法分析、语义分析等,生成逻辑执行计划,再进行优化生成物理执行计划。
    • 将物理执行计划转换为 Spark 任务,提交到 Spark 集群上由 Spark 执行引擎执行。

性能特点

  • Spark on Hive
    • 由于 Spark 的优化器和执行引擎更先进,对于复杂的 SQL 查询和大规模数据处理,能更高效地利用内存和并行计算资源,性能通常较好。
    • 可以充分发挥 Spark 的分布式计算能力,对数据进行更灵活的处理和分析。
  • Hive on Spark
    • 相比 Hive 默认的 MapReduce 执行引擎,性能有显著提升,因为减少了中间结果写入磁盘的次数,更多地在内存中进行计算。
    • 但由于 Hive 自身的 SQL 解析和优化机制可能存在一定的局限性,整体性能可能略低于 Spark on Hive2。

使用场景

  • Spark on Hive
    • 适用于以 Spark 为主要开发框架,需要对 Hive 中的数据进行复杂分析、机器学习等任务的场景。
    • 当数据处理需求不断变化,需要更灵活的编程接口和强大的计算能力时,Spark on Hive 可以让开发者使用 Spark 的各种 API 进行数据处理。
  • Hive on Spark
    • 适合已经有大量 Hive SQL 脚本和任务,希望在不改变太多代码和操作习惯的前提下,提升执行效率的场景。
    • 对于一些传统的数据仓库任务,如定期的报表生成、数据 ETL 等,Hive on Spark 可以在 Hive 的生态下利用 Spark 的性能优势。

部署与配置难度

  • Spark on Hive
    • 部署相对简单,只需在 Spark 环境中配置好 Hive 的元数据连接信息等,即可使用 Spark 操作 Hive 数据。
  • Hive on Spark
    • 配置相对复杂,需要确保 Hive 和 Spark 的版本兼容,可能还需要额外的配置和调整,比如指定 Spark 相关的 JAR 包路径等。

5.统计分析的基本步骤

数据源——对接并加工数据——统计数据——分析数据

数据仓库也遵循这个步骤:

数据存储————数据可视化

6.数据仓库的数据源问题

如果将数据库直接作为数据仓库的数据源会出现的问题:

1.业务数据库为行式存储,而数据仓库是列式存储,数据不能直接对接——需要把行式数据转化为列式数据。

2.业务数据库中存储的数据不是海量,但数仓要求海量,所以直接对接数据量不够。

3.数据库不是为了数据仓库服务的,访问会对数据库造成性能影响。

所以数据仓库应该设计一个自己的数据源,为了代替和补充数据库。数据存储应和数据库是同步的。

7.数仓开发前的数据处理

数据仓库的开发用SQL语言进行处理,那么数据的处理步骤应该采用什么方法?

思考过程

1.数据处理需要将服务器中的数据转化为结构数据——表,且每一步(数据源、加工、统计、分析)都有表(应对多需求,类似缓存:某些表可以在不同需求中复用、无需每次从0到1开始加载。)

2.数据仓库的数据源数据需要从数据库中周期性同步,一般将这个同步过程称之为采集。

若数据采集时,如果想要将数据同步到数据仓库的数据源,那么就必须知道表结构

那么采集项目和数据仓库项目就会存在耦合性,但二者应有独立性

所以实际开发中,需要将采集项目和数仓项目解耦合(添加中间件),由于数仓采用Hive开发,故解耦合使用HDFS。

数据存储—— HDFS(解耦合)——数据仓库数据源

原理:Data&File——HDFS(File)—— Hive(Table)(Hive将磁盘文件管理成表)

PS:如果数仓开发不选择Hive,解耦合用HDFS就未必合适

具体过程:(见下图)

数据存储(MySQL)—— 数据采集(DataX、Maxwell(Data—File),Flume(File—File))——HDFS(解耦合)——数据仓库数据源;

数据仓库(Hive)— MySQL (解耦合)— 数据可视化

8.数据同步的两种方式

1.全量数据同步(DataX):表的全部数据

2.增量数据同步(Maxwell):表的新增及变化的数据

收集数据的目的是为了后续的统计分析做准备。

比如后期可能会遇到不同的需求:

当前电商网站所有注册用户的数量(更适合全量数据同步方式)

当前电商网站7天内新增注册用户的数量(更适合增量数据同步方式,性能更高)

采集篇

第1章 数据仓库概念

数据仓库( Data Warehouse ),是为企业制定决策,提供数据支持的。可以帮助企业改进业务流程、提高产品质量等。

数据仓库的输入数据通常包括:业务数据用户行为数据爬虫数据等。

业务数据:就是各行业在处理事务过程中产生的数据。比如用户在电商网站中登录、下单、支付等过程中,需要和网站后台数据库进行增删改查交互,产生的数据就是业务数据业务数据通常存储在MySQL、Oracle等数据库中。

在计算机系统中,特别是在数据库管理中,事务是指一组操作,这些操作被视为一个不可分割的工作单元。要么所有操作都成功执行,要么所有操作都不执行,以确保数据的一致性和完整性。比如在电商的下单支付过程中,从扣除库存、生成订单到更新用户账户余额等一系列操作就构成了一个事务。如果其中任何一个操作失败,整个事务都会回滚,即撤销之前已经执行的操作,以避免数据出现不一致的情况,如商品已经扣除库存但订单却未生成,或者用户账户余额已扣除但商品仍在库存中。

用户行为数据:用户在使用产品过程中,通过埋点收集与客户端产品交互过程中产生的数据,并发往日志服务器进行保存。比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在日志文件中。

“埋点” 是收集用户行为数据的关键技术手段。简单来说,埋点就是在产品的代码中插入特定的代码片段(埋点代码),用于捕捉用户的特定行为。当用户执行了这些被埋点的操作时,埋点代码就会被触发,收集相应的行为数据,并将其发送到服务器进行记录和分析。比如在一个新闻 APP 中,开发人员会在文章详情页的点赞按钮、评论输入框等位置埋点,当用户点击点赞按钮或发表评论时,埋点代码就会收集相关信息,如点赞时间、评论内容等,并上传到服务器。通过合理的埋点设计和数据收集,可以全面、准确地了解用户在产品中的行为轨迹和偏好,为产品优化、运营决策等提供有力的数据支持。

爬虫数据:通常是通过技术手段获取其他公司网站的数据。不建议这样去做。

第2章 项目框架(需求分析及架构设计)

2.1需求分析

2.1.1 采集平台

(1)用户行为数据采集平台搭建

(2)业务数据采集平台搭建

2.1.2 离线需求

电商离线指标体系

2.2架构设计

架构设计,需要思考:

(1)项目技术如何选型?

(2)框架版本如何选型(Apache、CDH、HDP)

(3)服务器使用物理机还是云主机?

(4)如何确认集群规模?(假设每台服务器16T硬盘)

2.2.1 技术选型

2.2.2 系统数据流程设计

数据输入

  • 业务交互数据:Web 或 App 业务交互数据经 Nginx 转发到业务服务器(Springboot),业务数据存储在 MySQL 中,通过 DataX 进行每日全量同步,通过 Maxwell 进行增量同步。
  • 用户行为数据:Web 或 App 前端埋点的用户行为数据,经 Nginx 到达日志服务器(Springboot)生成日志文件,由 Flume 采集后发送到 Kafka 集群进行消息缓存。

数据存储与处理

  • 实时数仓:Kafka 集群中的数据流入 Flink,Flink 处理后数据一部分存入 Phoenix + HBase 组成的维度数据存储中,一部分存入 ClickHouse 形成查询宽表。
  • 离线数仓:Kafka 集群的数据也会通过业务消费和日志消费的 Flume,进入 Hadoop 集群存储。数据在 Hive 中分为原始数据层(ODS 层)、公共维度层(DM 层)等多层结构,经过处理后通过 DataX 每日同步到结果数据 MySQL 中。

数据缓存与查询

  • 旁路缓存:使用 Redis 作为旁路缓存,加速数据查询。
  • 数据查询:Phoenix + HBase 提供维度数据查询,ClickHouse 用于查询宽表数据,通过 Spring Boot 数据接口服务提供对外数据访问。

数据可视化

  • 离线可视化:Hive 数仓处理后的数据通过 Superset 进行离线可视化展示。
  • 实时可视化:Flink 处
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值