前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大数据实战【千亿级数仓】项目总结

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

作者头像
大数据梦想家
发布2021-01-27 16:16:07
7720
发布2021-01-27 16:16:07
举报

写在前面: 博主是一名软件工程系大数据应用开发专业大二的学生,昵称来源于《爱丽丝梦游仙境》中的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数据表的查询效率。


结语

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目架构
  • 技术选型
    • 数据来源
      • 数据存储
        • 数据同步
          • 计算模型
            • 结果存储
              • 加速查询
              • 结语
              相关产品与服务
              对象存储
              对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档