Doris实战——美联物业数仓

目录

一、背景

1.1 企业背景

1.2 面临的问题

1.3 需求

1.4 首期目标

二、早期架构

三、新的架构及方案

3.1 业务架构

3.2 数据模型

3.2.1 纵向分域

3.2.2 横向分层

3.2.3 增量策略

3.2.4 全量策略

四、实践经验

  原文大佬的这篇Doris数仓的实战文章写的挺全面(跟本人目前所负责的数仓项目,有些分析场景 很相似),这里直接摘抄下来用作学习和知识沉淀。

一、背景

1.1 企业背景

     美联物业目前数仓主要服务和面向内部客户为主,如后勤、行政、开发人员、更多的是房产经纪,这部分在全国约上万人,无需面向C端用户,因此计算方面和面向C端用户的企业(类似贝壳)相比并不算大。

1.2 面临的问题

 (1)没有统一的数据管理体系和数据治理,数据质量较差,如多部门,多系统,多字段,命名随意,表结构混乱等。

(2)没有统一的分析处理平台,关系数据库的分库分表操作无法做到上亿数据的秒级分析查询。

(3)没有充分利用数据驱动业务,数据需求流程冗长+烟囱式开发。

(4)没有数据资产管理体系,无法实现数据的降本提效。

(5)部门之间严重依赖文本文档的处理工作,效率低下。

1.3 需求

  • 业务部门的数据报表需求

  • app的数据接口需求

  • 快速的自助分析场景等

1.4 首期目标

  • 建立初期的数据管理体系,搭建美联数据仓库
  • 建设业务报表平台和开发流程体系
  • 实现报表、分析需求能够快速响应的交付

二、早期架构

   和大部分公司的数仓不同的是,我们摒弃了之前使用的Hadoop、Hive、Spark体系建立的传统数仓,改用 Doris作为数仓核心底座进行开发,摒弃Hadoop生态圈主要有已下几个原因:

(1)传统数据架构组件繁多,维护复杂,运维难度非常高。

(2)数据处理链路过长,导致查询延迟变高

(3)数据时效性低:只可满足T+1的数据需求,导致数据分析效率低下

(4)传统公司的计算量和数据量不大,搭建Hadoop生态组件显得杀鸡用牛刀。

  在此背景下,需要构建⼀个“极速、易用、实时”的数据架构来解决这些痛点。

改用Apache Doris主要有几个方面原因:

(1)多表Join能力强悍,业务报表分析需求可实现快速响应(极速)

    因为无需面对C端群体,不需要要求系统有很高的并发特性和PB级存储,业务需求要快速响应,数据实时交付和分钟级交付的场景繁多。

(2)整体架构简洁易用,极简运维,弹性伸缩,功能完备(易用)

   大部分传统公司对数据人员的要求除了数据开发之外,也要兼顾一些运维和架构规划的工作, Doris的组件架构FE+BE理解起来简单,运维工作相对轻松。

 (3)健壮活跃

    公司没有自研方面的预算,但要求选择的开源产品一定是要有健壮性,不能产生严重的生产故障。Doris在百度内部已经深耕多年,这一点有保障,另外Doris社区的大佬们非常热情和活跃,遇到问题会积极响应。

三、新的架构及方案

3.1 业务架构

  • 业务模型是最常见的分钟级调度ETL
  • 离线数据利用DataX批量同步,通过Flink CDC将RDS的数据实时同步到Doris,利用Doris的物化视图或者Aggregate模型表进行实时汇总处理。
  • 所有层级表模型大部分采用Unique key主键模型,可以有效保证数据脚本的幂等性,解决下游数据重复的问题
  • ETL脚本通过Dolphinscheduler(简称DS)进行编排和统一调度
  • 帆软BI进行自助取数和分析

一些截图:

   DS中的ETL脚本可以进行版本控制,有效控制生产环境发生错误,及时回滚。

   发布ETL脚本后导入数据,借助帆软系统进行页面制作,例如:针对数仓的权限管理,可以利用SQL控制到表级别、甚至行级别权限。

   在新的架构体系,新增的数据需求直接利用帆软BI进行自助取数和分析,最快可在当天响应交付

3.2 数据模型

3.2.1 纵向分域

  房地产中介行业的数据主题大致如下,围绕这些主题进行数仓建模,构建对应的事实表和维表。

3.2.2 横向分层

   主要Dolphinscheduler进行调度任务的编排和管理。例如:早上8点到晚上12点基本采用增量策略,凌晨执行全量策略,目标是为了补数和修正历史状态变化数据。

层级备注存储策略
ODS利用datax doris write进行数据的本地导入要注意参数设置exec_mem_limit参数大小,部分全量数据较大超过限制会导致stream load 失败08:00-00:00:00增量策略;凌晨全量策略一次
DWD部分事实表涉及缓慢变化维,需要进行拉链存储08:00-00:00:00增量策略;凌晨执行全量策略,部分表拉链存储
DWS和ADS注意数据校验问题,加入审计时间,如etl_time,last_etl_time,create_time等字段,方便后续故障排查08:00-00:00:00增量策略;凌晨全量策略一次
DIM维度表存放层,如客户,房源,职员,职级,岗位等每小时整点全量策略一次

3.2.3 增量策略

  • where >=业务时间 -1 天

  为什么不是where = 业务时间来增量当天数据呢,是为了避免数据漂移的情况。

  • 每次跑增量脚本前,需要将表中最大的主键ID存入辅助表,where >= 辅助表记录ID

    这种自增策略用在什么场景?比如Doris表如果是Unique key模型,且是组合主键的情况下,主键组合在源表发生了变化,这时候where >= 业务时间-1天会将这种同一记录,但是主键发生了变化的数据给load进来,造成数据重复。

    这种自增策略局限性在于,源表需要自带业务自增主键

  • 表分区

     如日志表的历史数据和状态基本不会变更,由于数据量非常大,建表时,增量数据进行分区替换操作即可。

3.2.4 全量策略

  • Truncate Table清空表插入

       如果是面向C端用户的公司和白天调度时间千万别这么做,否则会导致一段时间没有数据,Truncate Table适合数据量较小的表,凌晨没有用户使用系统的公司。

  • ALTER TABLE tbl1 REPLACE WITH TABLE tbl2  表替换

    这种方式是一种原子操作,可以每次执行脚本前先create 一张相同的临时表,把全量数据load进去临时表,再执行表替换操作,可以无缝衔接。适合数据量大的全量表。

四、实践经验

  • 内存一直不释放

     Doris的BE节点在旧版本是开启PageCache 和 ChunkAllocator 的,目的是为了减少查询的延迟,这两个功能会占用一定比例的内存,并且一直不会释放,长此以往就会导致be计算资源越来越紧张。新版本直接禁用了这两个配置,但美联物业数仓是开启了这2项配置,并且每天凌晨进行be滚动重启的,既能保证be内存及时释放,也能降低查询延迟。

  • 数据导入和 Catalog Doris

      Catalog方式:利用Mysql JDBC类型的连接方式来对Doris生产集群数据进行读取,这样方便生产数据直接load进测试服务器。

    但这种方式对FE节点的压力会很大,在导入过程中可明显观察FE节点CPU资源被拉满,如果Fe资源并不充足的情况下,建议选择Stream load的方式进行数据导入,如Datax。

   在数据导入方式上,大部分返回结果是异步操作,即在Doris里该导入任务状态有可能是失败的,而Dolphinscheduler会误以为该脚本已经执行成功,因此在bash等脚本里执行Doris的导入操作逻辑时,还需要判断上游任务状态是否成功,可以在脚本里执行show load,再用正则去过滤状态进行判断。

  • 前缀索引

     尽量把非字符类型的,如int类型的、where条件中最常用的字段放前排36个字节内,在点查场景下,过滤这些字段返回的结果基本可在毫秒级别实现。

  • 数据备份

     目前Doris的备份依赖Broker load,只能基于BOS、HDFS 等文件系统,对于没有安装HDFS这类的服务器基本用不了。

  • 数据字典

     利用Doris自带的information_schema元数据可以制作简单的数据字典,这一点对公司还未建立数据治理体系前是非常重要的一步,方便低成本管理数仓人员的操作规范。

参考文章:

美联物业基于Apache Doris数仓实践

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

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

相关文章

基于springboot实现的海鲜销售系统

一、系统架构 前端:html | bootstrap | vue | js | css 后端:springboot | springdata-jpa 环境:jdk1.8 | mysql | maven | redis 二、代码及数据库 三、功能介绍 01. web端-注册 02. web端-登录 03. web端-首页 04. web端-…

2024-02-23(Spark)

1.RDD的数据是过程数据 RDD之间进行相互迭代计算(Transaction的转换),当执行开启后,代表老RDD的消失 RDD的数据是过程数据,只在处理的过程中存在,一旦处理完成,就不见了。 这个特性可以最大化…

Tomcat 下部署若依单体应用可观测最佳实践

实现目标 采集指标信息采集链路信息采集日志信息采集 RUM 信息会话重放 即用户访问前端的一系列过程的会话录制信息,包括点击某个按钮、操作界面、停留时间等,有助于客户真是意图、操作复现 版本信息 Tomcat (9.0.81)Springboot(2.6.2)JDK (>8)DDT…

微信小程序-全局配置

个人笔记,仅供参考。 1.entryPagePath 代码: "entryPagePath": "pages/index/index" 具体用法: 2.pages 小程序中新增/减少页面,都需要对 pages 数组进行修改。 代码: "pages": [&…

VBA技术资料MF122:状态栏显示程序进度百分比

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的工作效率,而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套,分为初级、中级、高级三大部分,教程是对VBA的系统讲解&#…

现代信号处理学习笔记(二)参数估计理论

参数估计理论为我们提供了一套系统性的工具和方法,使我们能够从样本数据中推断总体参数,并评估估计的准确性和可靠性。这些概念在统计学和数据分析中起着关键的作用。 目录 前言 一、估计子的性能 1、无偏估计与渐近无偏估计 2、估计子的有效性 两个…

【机器学习】简单认识无监督学习

Unsupervised learning 引言分类聚类算法聚类算法的应用Goole news聚类遗传客户信息数据库 监督学习和无监督学习的区别 “在学习监督学习之后,使用最广泛的机器学习形式是无监督学习。” 引言 在实际工作中,我们经常会遇到这样一类问题:给机…

Facebook的虚拟社交愿景:元宇宙时代的新起点

在当今数字化时代,社交媒体已经成为人们生活中不可或缺的一部分。而随着科技的不断进步和社会的发展,元宇宙已经成为了人们关注的热点话题之一。作为社交媒体的领军企业之一,Facebook也在积极探索虚拟社交的未来,将其视为元宇宙时…

MATLAB环境下基于随机游走拉普拉斯算子的快速谱聚类方法

古人有云,物以类聚,在面临信息爆炸问题的今天,对信息类别划分的价值日益显现,并逐步成为学者们的研究热点。分类和聚类是数据挖掘的重要工具,是实现事物类别划分的左右手,聚类又是分类一种特殊的方式。所谓…

详解顺序结构滑动窗口处理算法

🎀个人主页: https://zhangxiaoshu.blog.csdn.net 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️,如有错误敬请指正! 💕未来很长,值得我们全力奔赴更美好的生活&…

酷开科技,让酷开系统成为现代生活的变革者

电视,从问世就一直受到人们的追捧。还记得小时候一家人围坐在电视机前的场景,小小的黑白屏幕,牢牢的吸引着大家的目光。随着科技的不断进步,我们的生活也发生了翻天覆地的变化。而电视,也从笨重的黑白电视变成了轻薄的…

YOLOv9中的“RepNCSPELAN4”结构!

RepNCSPELAN4结构出炉啦,收藏起来写论文用! 1.代码: 代码路径:yolov9-main->models->common.py,代码如下: class RepNCSPELAN4(nn.Module):# csp-elandef __init__(self, c1, c2, c3, c4, c51): # …