大数据实战【千亿级数仓】项目总结

2021-01-27 16:16:07 浏览数 (1)

写在前面: 博主是一名软件工程系大数据应用开发专业大二的学生,昵称来源于《爱丽丝梦游仙境》中的Alice和自己的昵称。作为一名互联网小白,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于起步阶段的萌新。由于水平有限,博客中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!个人小站:http://alices.ibilibili.xyz/ , 博客主页:https://alice.blog.csdn.net/ 尽管当前水平可能不及各位大佬,但我还是希望自己能够做得更好,因为一天的生活就是一生的缩影。我希望在最美的年华,做最好的自己

前段时间做过一个大数据离线数仓的项目,前后花了有好几周的时间。一共是6个阶段,想关注阶段细节的朋友可以查看?大数据实战项目这个专栏。

现在项目结束了,理应对此进行一个总结,好好回顾一下这个项目中遗漏的细节…


项目架构

① 原始数据在mysql中存储

② 使用kettle将数据从mysql同步到数据仓库(hive)

同步分为全量同步 增量同步 增量同步需要使用到拉链表(目标:既能够保存历史数据,又不会有数据冗余)

③ 数据储存到hive

hive数仓内结构: ODS : 存储着数据源同步过来的数据 DW : 对ODS层数据机型预处理(数据过滤,数据填充),以及数据的拉宽,将业务中需要的字段,但是字段不在一个表里。使用拉宽(join)将这些字段拉到一个表中。 ADS:存储最终结果

④ 使用kylin对hive内的数据进行预计算,提高查询效率

⑤ 部分数据同步至mysql,使用sqoop/kettle同步


技术选型

★ 数据来源: MySQL

★ 数据存储: Hive

★ 数据同步: Kettle

★ 计算模型(数仓): ODS,DW,ADS三层

★ 结果存储: Hive的ads和Mysql

★ 加速查询的组件: Kylin

以为就这样技术选型就讲完了?不不不,既然在开头咱都谈到了需要深挖细节,那么接下来我们就要从结论反推,思考某个方面的技术为什么需要用到这个技术/组件,而不是其他类似的技术/组件。

数据来源

我们的数据来源为什么选择的是关系型数据库MySQL,而不是其他的非关系型数据库?

最主要的原因是因为 MySQL

■ 体积小,速度快,总体拥有成本低,开源;

■ 支持多种操作系统;

■ 是开源数据库,提供的接口支持多种语言连接操作;

而以MongoDB为例的非关系型数据库

□ 使用键值对存储数据;

□ 无需经过sql层的解析,读写性能很高;

□ 不提供SQL支持,学习使用成本较高;

□ 无事务处理,附加功能bi和报表等支持也不好;

综上所述,在该项目中,关系数据库MySQL更适合。


数据存储

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)。其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,hive可以理解为一个将SQL转换为MapReduce的任务的工具。

使用Hive的好处:

√ 操作接口采用类SQL语法,提供快速开发的能力。 √ 避免了去写MapReduce,减少开发人员的学习成本。 √ 功能扩展很方便。

通过Hive与传统RDBMS的对比

Hive

RDBMS

查询语言

HQL

SQL

数据存储

HDFS

Raw Device or Local FS

执行

MapReduce

Excutor

执行延迟

处理数据规模

索引

0.8版本后加入位图索引

有复杂的索引

总结:

hive具有sql数据库的外表,但应用场景完全不同 hive只适合用来做批量数据统计分析

数据同步

谈到关于数据同步的问题,相信很多好学的朋友有疑问了?

为啥这个项目不用Sqoop来进行数据的同步?

相信看完下面Kettle与Sqoop差异对比的表格就清楚了。

功能

Kettle

Sqoop

领域

数据抽取、转换、加载

关系型与非关系型数据库数据迁移

输入

关系型数据库、HDFS、Hbase、Excel、HL7、JSON、RSS、文本文件、等等

关系型数据库、非关系型数据库

输出

关系型数据库、Hbase、HDFS、Excel、CSV、等等

关系型数据库、非关系型数据库

Hadoop集成度

外部工具,需要安装对应版本的插件,仅支持流行的Hadoop发行版

属于Hadoop生态圈,启动即用

适用数据量

十万、百万、千万级

亿级

支持系统

Linux、Windows、Unix

Linux

交互

有图形界面

没有图形界面

底层

多线程提高效率

MapReduce

在这个项目阶段一开始的时候,就介绍了,咋们这个项目的每日订单量为10W,按照上图表格所述,确实不太适合 支持系统单一交互无图形化界面底层计算效率低的 Sqoop。

当然也并不是说Sqoop没用,当数据量真的达到亿级别之后,Kettle就无法发挥它的优势,这个时候我们就只能借助于Sqoop了。

计算模型

每个企业根据自己的业务需求可以分成不同的层次,但是最基础的分层思想,理论上数据分为三个层,数据运营层数据仓库层数据服务层。基于这个基础分层之上添加新的层次,来满足不同的业务需求。

数仓分层通过数据分层管控数据质量,需要对数据清洗等操作,不必改一次业务就需要重新接入数据,每一层数据都是单独的作用,同时规范数据分层,减少业务开发、直接抽取数据

其中

数据运营层ODS存储着数据源同步过来的数据

数据仓库层DW需要对ODS层数据进行预处理(数据过滤,数据填充)

数据服务层存储最终结果

结果存储

通过上面的分析,在Hive中ADS层负责存储着结果数据,可以根据用户需求,利用简易sql而查询出最终结果。而数据源来自MySQL,我们自然也可以选择将结果存储至MySQL当中。数据同步组件根据实际情况选择Kettle或者Sqoop。

加速查询

Kylin 是一个 Hadoop 生态圈下的 MOLAP 系统,是 ebay 大数据部门从2014 年开始研发的支持 TB 到 PB 级别数据量的分布式 Olap 分析引擎。其特点包括:

✔ 可扩展的超快的 OLAP 引擎

✔ 提供 ANSI-SQL 接口

✔ 交互式查询能力

✔ MOLAP Cube 的概念

✔ 与 BI 工具可无缝整合

Kylin 的核心思想是利用空间换时间,在数据 ETL 导入 OLAP 引擎时提前计算各维度的聚合结果并持久化保存。

在离线数仓项目中,我们使用Kylin对Hive的ADS层的数据进行预处理,并将结果写入到HBase,提高了实际应用场景对于Hive数据表的查询效率。


结语

关于大数据离线数仓项目的总结,暂时就先更到这里…后期博主可能会对此进行更详细的补充,敬请期待?

如果以上过程中出现了任何的纰漏错误,烦请大佬们指正?

受益的朋友或对大数据技术感兴趣的伙伴记得点赞关注支持一波?

0 人点赞