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

一、背景

        由于公司规模较小,大数据相关没有实现平台化,相关的架构都是原生的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 1distribute by cast(rand()*10 as int)distribute by dtdistribute 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.将临时表的数据导入到新的表中,核对数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多边形的填充算法的分析

多边形的填充 分析 思路一 我们之前已经实现了对直线的扫描转换,但是现在我们遇到了新的问题那就是如何对多边形进行填充,如图所示,如何对图示的多边形进行填充呢? 我所想到的第一个办法是这样的,那就是假设上顶点…

webRTC实时通信demo

参考文档: https://www.jianshu.com/p/f439ce5cc0be https://www.w3cschool.cn/socket demo流程示意图(用户A向用户B推送视频): #mermaid-svg-0KZaDQ5DBl28zjmZ {font-family:"trebuchet ms",verdana,arial,sans-seri…

总结—elasticsearch启动失败的几种情况及解决

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 摘要 本文主要梳理从ES初学以来所遇到的启动失败的几种情况。 1、使用root用户启动失败 在有一次搭建elasticsearch的时候&am…

【Linux】—— 匿名管道

前言: 接下来我将带大家探索 进程间通信 的方式。本期,要讲的就是管道其中之一“匿名管道”!! 目录 (一)进程间通信介绍 1、进程间通信目的 2、进程间通信发展 3、进程间通信分类 (二&…

文件分片上传(模拟网盘效果)

文件分片上传(模拟网盘效果) 文章说明简单模拟拖拽文件夹和选择文件的进度条效果效果展示结合后端实现文件上传效果展示加上分片的效果效果展示加上MD5的校验,实现秒传和分片的效果后续开发说明源码下载 文章说明 文章主要为了学习文件上传&a…

2024年【黑龙江省安全员C证】考试及黑龙江省安全员C证找解析

题库来源:安全生产模拟考试一点通公众号小程序 2024年黑龙江省安全员C证考试为正在备考黑龙江省安全员C证操作证的学员准备的理论考试专题,每个月更新的黑龙江省安全员C证找解析祝您顺利通过黑龙江省安全员C证考试。 1、【多选题】下列属于编制安全检查…

浅聊配置化-要不要实现动态表单

1、配置化的原则 配置化是一种抽象,把事物分成2类:不变的,可变的。 如果事物都是可变的,是无法实现配置化的。 配置化的根本在于找到不变的事物,基于不变的事物进行可变事物的配置。 所以,认为一切皆可…

[LLM]大模型训练(二)--DeepSpeed使用

安装DeepSpeed与集成 DeepSpeed可以通过pip安装,无需指定PyTorch和CUDA的版本。DeepSpeed内包含需要自定义的CUDA算子,将通过即时编译的方式在运行时构建。 pip install deepspeed DeepSpeed与HuggingFace Transformers直接集成。使用者可以通过在模型…

从入门到精通,30天带你学会C++【第十一天:二分查找】

目录 Everyday English 前言 二分查找 例题 50分做法 分析利弊 示例代码 示例截图 100分做法 二分查找是什么? 这题该怎么用二分查找? 示例代码 示例截图 结尾 Everyday English Look before you leap. 三思而后行 前言 今天是2024年的…

爬取糖豆视频

爬虫案例积累,以爬取糖豆视频为例: 爬取视频类型的数据一般步骤: 1.点击media,刷新,播放一个视频,会刷新一个包,点击发现是播放视频的包, 2.复制这个包url中的关键字,在搜索框中进…

在宝塔Linux中安装Docker

前言 帮助使用宝塔的用户快速上手docke的安装 📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​​ 🌟在这里,我要推荐给大家我的专栏《Docker》。🎯&#x1f3af…

[新版Hi3531DV200 性能强悍]

新版Hi3531DV200 性能强悍 Hi3531DV200是针对多路高清/超高清(1080p/4M/5M/4K)DVR产品应用开发的新一代专业SoC芯片。Hi3531DV200集成了ARM A53四核处理器和性能强大的神经网络推理引擎,支持多种智能算法应用。同时,Hi3531DV200还…

Spring Boot Admin健康检查引起的Spring Boot服务假死

问题现象 最近在spring boot项目中引入了 spring-boot-starter-actuator 后,测试环境开始出现服务假死的现象, 且这个问题十分怪异,只在多个微服务中的简称A的这个服务中出现,其他服务都没有出现这个问题, 之所以说…

按照故障码类型分类的API接口

随着汽车的普及,车辆故障也成为了一个不可忽视的问题。对于车主来说,及时了解故障码的含义以及解决方案十分重要。挖数据平台为解决这一问题,提供了一套按照故障码类型分类的API接口,用于查询车辆故障、故障码适用品牌以及提供相应…

STL——queue容器

1.queue基本概念 概念:queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。 队列容器允许从一端新增元素,从另一端移除元素。 队列中只有队头和队尾才可以被外界使用,因此队列不允许…

Java API 操作Docker浅谈

背景: 使用com.github.docker-java库可以很方便地在Java中操作Docker。下面是一个详细的教程,包括创建镜像、创建容器、启动容器、停止容器和删除容器的步骤以及每一步的说明。 前提: 首先,在你的Java项目中添加com.github.doc…

Linux之组管理和权限管理

组的概念 如图所示:test.txt是由tom创建的,所以tom是文件的所有者,tom归属于组A,组A就是文件的所在组;组B就是文件的其他组。 所有者 谁创建了文件,谁就是文件的所有者。 查看文件的所有者 指令&…

Django 学习教程- Hello world入门案例

系列 Django 学习教程-介绍与安装-CSDN博客 欢迎来到第Djagno学习教程第二章Hello World 入门案例。 在本教程中,我将引导您完成django的Hello World入门案例。 让我们开始吧! 版本 Django 5.0Python 3.10 创建项目 安装 Django 之后&#xff0…

信创之国产浪潮电脑+统信UOS Linux操作系统体验10:visual studio code中调试C++程序

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 老猿在CSDN的《信创之国产浪潮电脑统信UOS操作系统体验2:安装visual studio code和cmake搭建C开发环镜》介绍了在国产浪潮电脑统信UOS操作系统中安装visual studio code和cmake搭建C开…

css动态传参,attr的妙用

今天再做一个编辑器的功能的时候,发现有一段非常奇妙的代码,使用attr获取div标签的data-label值。 css的attr?What fuck?这又是什么鬼东西,emmm。 查询后官方是这么回答的: CSS 表达式 attr() 用来获取选择到的元素的某一 HTM…