数据仓库-数仓优化小厂实践

一、背景

由于公司规模较小,大数据相关没有实现平台化,相关的架构都是原生的Apache组件,所以集群的维护和优化都需要人工的参与。根据自己的实践整理一些数仓相关的优化。

二、优化

1、简易架构图

2、ODS层优化

2.1 分段式解析

随着业务增长,数据量也不断增加,凌晨任务经常基线预警、破线,导致数据不能正常产出,影响运营人员分析数据。在不增加成本的情况尽可能的优化。

经过团队研究,发现 t-1 的日志解析占用非常长的时间,且集群资源空闲时间点比较多。

把日志的解析分成两段式,当天0点到22点数据可在22:15进行解析,22点到24点数据在00:15解析,大大节省了时间,还充分利用了集群的资源。有效的缓解了破线问题。

2.2 小文件合并
复制代码
    1.原因:a.读取的数据源文件本身就有大量的小文件
            b.动态分区插入数据,每个reduce产生的文件个数为动态分区的个数,产生文件个数=reduce个数*动态分区数
            c.reduce/Task个数较多(和文件数是一样的)
    
    2.影响:a.文件的数量决定了Mapreduce/Spark中Mapper/Task数量,小文件越多,Mapper/Task的任务越多,每个Mapper
              /task都会对应启动一个JVM/线程来运行,每个Task数据小,个数大,占用资源多,甚至这些任务初始化的时间
              可能比执行的时间还要多,影响性能,当然这个问题 可以通过CombinedInputFile和开启JVM重用来解决。
              
           b.文件存储在HDFS上,每个文件的元数据信息(位置、大小、分块信息)大约占150个字节,文件的元数据信息分别存储在
             内存和磁盘中。   
    
    3.解决方法:通过 DISTRIBUTE BY 控制文件的个数
    
            distribute by 1
            distribute by cast(rand()*10 as int)
            distribute by dt
            distribute by substr(udi,1,2)
2.3 提高数据压缩比率

1.问题描述 :使用 DISTRIBUTE BY INT(RAND()*300) 随机数的方式控制了文件的个数,但是使用的SNAPPY压缩,压缩比原则是十倍左右,目前只能达到两倍左右。

原因:每个文件里面的数据随机,数据的相似性较小,压缩比上不去

2.问题解决:DISTRIBUTE BY SUBSTR(udi,1,2) 使用文本字段进行文件数的控制,文件个数减少了,并且文件的大小也变小了,压缩比变大

说明:udi前两个为(字母+数字),截取前两个组合来作为文件的个数(最多36*36)

原理:将相似的数据放在同一个分区里,数据压缩比增大

2.4 分项目业务数据导入优化

1.问题描述:由于项目数量比较多,并且会持续增加,项目之间的业务表相同,按照sqoop传统导数据的脚本,会编写很多冗余的脚本,费时费力,且增加新项目时,开发成本较高

2.问题解决:将不同的数据库的配置信息(host、IP、账号、密码、脚本路径) 配置到mysql表中,编写相应的脚本,脚本根据给定的参数去读取相应的配置,进行对应项目的数据导入。

3、DWD层优化

3.1 缩减分区

1.问题描述:初始建立二级分区(项目+天),随着老项目的数据量增加,以及新项目上线数据量较少, 导致执行时造成数据倾斜,以及多级分区造成文件数以及分区数成倍增加,造成数据寻址时间过长。 执行时间较短,但是刷盘的时间过长,晚上流程的时间整体拖延。

2.问题解决:将二级分区改为一级分区

3.解决方法:a.建立同样的临时表

b.将历史数据mv导入到临时表中,此时进行核对数据量

c.通过命令修复临时表的分区

d.将旧表删除,建立新的分区表

e.将临时表的数据导入到新的表中,核对数据

相关推荐
莫叫石榴姐7 小时前
Doris为2.1版本,但json_each不可以用解决方法
数据仓库·json
老徐电商数据笔记1 天前
技术复盘第八篇:从“数据烟囱”到“能力引擎”:中型电商数仓重构实战手册
大数据·数据仓库·重构·数据中台·用户画像·技术面试
青木川崎1 天前
hive实战
数据仓库·hive·hadoop
是阿威啊1 天前
【第三站】本地虚拟机部署hive集群
linux·数据仓库·hive·hadoop·分布式
和光同尘20231 天前
一文讲透CentOS下安装部署使用MYSQL
linux·运维·数据库·数据仓库·mysql·centos·database
云器科技2 天前
无需CDP:基于现有数据仓库构建高效用户画像系统
数据仓库·湖仓一体·lakehouse·无需 cdp
xerthwis2 天前
HDFS:那座正在云化与解构的“古老高墙”
大数据·数据仓库·人工智能·hdfs·数据库开发·数据库架构
ghgxm5203 天前
EXCEL使用VBA代码实现按条件查询数据库--简单实用
开发语言·数据仓库·笔记·excel·数据库开发
喻师傅4 天前
Hive 中 NULL 值在逻辑判断中的“陷阱”(踩坑复盘)
数据仓库·hive·hadoop
涤生大数据4 天前
放弃Canal后,我们用Flink CDC实现了99.99%的数据一致性
大数据·数据仓库·flink·大数据开发·flink cdc·数据开发·实时数据