Flink实时电商数仓之Doris框架(七)

Doris框架

大规模并行处理的分析型数据库产品。使用场景:一般先将原始数据经过清洗过滤转换后,再导入doris中使用。主要实现的功能有:

  1. 实时看板
    • 面向企业内部分析师和管理者的报表
    • 面向用户或者客户的高并发报表分析
  2. 即席查询
  3. 统一数仓构建:替换了原来由Spark, Hive,Kudu, Hbase等旧框架
  4. 数据湖联邦查询:通过外表的方式联邦分析位于Hive,IceBerg,Hudi中的数据

Doris架构

  • 后端:C语言编写的,用于数据查询
  • 前端:Leader, Follower, Oberserver
    在这里插入图片描述

部署注意事项

  1. 磁盘空间按用户总数据量x3副本计算,然后再预留额外40%的空间。
  2. 所有部署节点关闭swap
  3. FE节点数据至少为1。一个Follower和一个Observer时,可以实现高可用
    在这里插入图片描述

参数修改

  1. 最大同时打开文件个数
  2. 设置最大虚拟块,sudo reboot重启后生效
  3. 根据自己需求下载对应的安装包,如果是苹果电脑下载arm包,否则选择x64. https://doris.apache.org/download/
  4. 解压安装fe, be,以及其他依赖,也就是下载的安装包里面的三个文件。
  5. 由于虚拟机有多张网卡,因此需要修改对应的网段信息,和NAT模式里面的网段对应。

在这里插入图片描述

  1. 如果参数配置错误,导致无法成功启动,直接删掉已经安装的文件,直接重新解压。

配置BE

  1. 修改web_server的端口号,改为7040
  2. 修改网段地址为NAT的网段
  3. 添加单台后端BEALTER SYSTEM ADD BACKEND "hadoop102:9050";
  4. /opt/module/doris/be/bin/start_be.sh --daemon启动后端
  5. SHOW PROC '/backends'\G查看后端状态

BE后台节点变更

  • 建议直接分发BE压缩包,因为Doris解压启动后就会产生底层数据,直接使用新的压缩包扩容会更为方便。在MySQL客户端,通过ALTER SYSTEM ADD BACKEND
  • 减少节点时需要先移动数据,然后再删除。ALTER SYSTEM DECOMMISSION BACKEND "be_host:be_heartbeat_service_port";

FE节点的变更

  1. 分发fe文件,注意删除元数据。hadoop102 发过来的元数据rm -rf /opt/module/doris/fe/doris-meta/*
  2. 启动FE:/opt/module/doris/fe/bin/start_fe.sh --daemon --helper hadoop102:9010
  3. 查看FE状态:show proc '/frontends';
  4. FE的缩容:ALTER SYSTEM DROP FOLLOWER[OBSERVER] "fe_host:edit_log_port";

群启群关脚本

  • 创建脚本为doris.sh
#!/bin/bash
case $1 in"start")for host in hadoop102 hadoop103 hadoop104 ; doecho "========== 在 $host 上启动 fe  ========="ssh $host "source /etc/profile; /opt/module/doris/fe/bin/start_fe.sh --daemon"donefor host in hadoop102 hadoop103 hadoop104 ; doecho "========== 在 $host 上启动 be  ========="ssh $host "source /etc/profile; /opt/module/doris/be/bin/start_be.sh --daemon"done;;"stop")for host in hadoop102 hadoop103 hadoop104 ; doecho "========== 在 $host 上停止 fe  ========="ssh $host "source /etc/profile; /opt/module/doris/fe/bin/stop_fe.sh "donefor host in hadoop102 hadoop103 hadoop104 ; doecho "========== 在 $host 上停止 be  ========="ssh $host "source /etc/profile; /opt/module/doris/be/bin/stop_be.sh "done;;*)echo "你启动的姿势不对"echo "  start   启动doris集群"echo "  stop    停止stop集群";;
esac
  • chmod +x doris.sh 添加脚本执行权限

数据表设计

  • row: 用户的一行数据
  • column:描述一行数据中的不同字段
    • key: 维度列
    • value:指标列
  • 分区分片
    • Tablet:数据分片,数据划分的最小逻辑单元
    • Partition:最小的管理单元,数据的导入与删除,都只能针对一个partition进行
  • 数据模型
    • Aggregate聚合模型
      • 一般用来存放事实表
      • 副本数不能高于be的个数
      • 没有幂等性,如果sum求和,多次插入同样数据时,结果会加起来
    • Unique唯一性模型
      • 使用unique key(k1, k2)来保证key的唯一
      • 底层其实也是使用聚合模型,非主键使用replace关键字
    • Duplicate重复模型
      • 一般用于收集日志
      • 数据会自动排序

建表语法

在这里插入图片描述

  1. olap是默认引擎,字段可以设置引擎,如果是其他的引擎,就表示远程连接其他数据库
  2. 尽量选择整型类型,整型长度遵循够用即可
  3. 分区方式,如果不分区时,会默认创建一个跟表名一致的分区
    • range分区,一般按照天数划分。一般使用value less than 的方式来指定上界,区间都是左闭右开的
    • list分区,一般按照城市划分。使用value in(一般是城市名称列表)
  4. 分桶:分桶字段一般是join时使用的关键字字段。建议桶的个数等于离线时划分的个数。一般为10~20.
  5. propertities属性
    • 副本数
    • 设定到期时间,到期后作为冷数据放到机械硬盘

动态分区

动态分区只支持Range分区,动态分区功能启动时,FE会启动一个后台进程,根据用户指定的规则创建或删除分区。
在这里插入图片描述

  1. 查看分区详情:show partition from 表名
  2. 如果分区不存在,则无法插入数据。并且会报错 no partition for this tuple

上卷

  1. desc 表名 all :查询表格的全部信息
  2. 上卷类似MR中的预聚合,提前创建好要查询的指标。后期查询该数据时,直接返回即可。也可以对于部分数据做排序。

物化视图

预先计算定义好的数据集,存储在Doris中的一个特殊的表。加快对固定维度进行分析查询。

  • 适用场景:
    • 查询仅涉及表中的很小一部分列或行
    • 查询包含一些耗时处理操作,比如,事件很久的聚合操作
    • 查询需要匹配不同的前缀索引
  • 使用
    • 创建物化视图

    • 检查物化视图是否构建完成desc sales_records all;

    • 检验当前查询是否匹配到了合适的物化视图EXPLAIN SELECT store_id, sum(sale_amt) FROM sales_records GROUP BY store_id;

create materialized view store_amt as 
select 
store_id, 
sum(sale_amt) 
from sales_records 
group by store_id;

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

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

相关文章

gRCP - 面向未来的第二代 RPC 技术,解析 HTTP2.0 和 Protobuf

目录 一、gRCP - 面向未来的第二代 RPC 技术 1.1、gRPC 简介 1.1.1、gRPC 是个啥? 1.1.2、gRPC 核心设计思路 1.1.3、gRPC 和 ThriftRPC 区别 1.1.4、为什么使用 gRPC?(好处) 1.2、HTTP2.0 协议 1.2.1、回顾 HTTP1.0 和 H…

自动化测试面试题及答案大全(上)

selenium中如何判断元素是否存在? 没有提供原生的方法判断元素是否存在,一般我们可以通过定位元素异常捕获的方式判断selenium中hidden或者是display = none的元素是否可以定位到? 不可以,想点击的话,可以用…

java数据结构与算法刷题-----LeetCode746. 使用最小花费爬楼梯

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只…

【C语言】函数

函数是什么? “函数”是我们早些年在学习数学的过程中常见的概念,简单回顾一下:比如下图中,你给函数 f(x)2*x3 一个具体的x,这个函数通过一系列的计算来返回给你一个结果(图示如下)。 这就是数学中函数的基本过程和作用。但是你…

AD教程 (二十四)PCB走线

AD教程 (二十四)PCB走线 信号层进行走线,对于信号走线尽量少打孔 电源层进行平面分割,电源层主要考虑载流,不太考虑信号的干扰 顶层不方便走线的可以在顶层打孔到底层走线,但是能少打孔就少打孔 交互式总…

因遭受“重大 DDoS 攻击”,官网及服务一度封停或崩溃

1月2日最新消息,Atomicals Market在社交媒体上发文表示,正遭受DDoS攻击,如果网站显示已被封锁,用户请勿担心。团队正在努力解决该问题,预计很快将会恢复正常。 开源建模软件 Blender 11月底也曾多次遭受严重 DDoS 攻击…

成为比开发硬气的测试人,我都经历了什么?

我的职业生涯很简单,可以说,我的测试生涯就是我的职业生涯。 大学的专业是计算机,当年是热门的学科,但自己的计算机知识不强悍,又加上学校的硬核是金融业,来学校校招的都是各大银行,且都是需要…

【Matlab】PSO-BP 基于粒子群算法优化BP神经网络的数据时序预测(附代码)

资源下载: https://download.csdn.net/download/vvoennvv/88689096 目录 【Matlab】BP 神经网络时序预测算法 【Matlab】CNN卷积神经网络时序预测算法 【Matlab】ELM极限学习机时序预测算法 【Matlab】基于遗传算法优化BP神经网络 (GA-BP)的数据时序预测 【Mat…

单机游戏数据自动保存方案

引言 单机游戏数据的自动保存方案 大家好,2023年还有最后的3天! 有小伙伴私信我,说: 总感觉一股脑的全盘定时保存不科学,也写过保存变化的玩家数据,但是改完数据就得手动标记一下字段变化,感觉不够智能&…

SpringBoot项目的三种创建方式

手动创建方式&#xff1a; ①&#xff1a;新建maven项目 ②&#xff1a;引入依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.10.RELEASE</version>&l…

学习Go语言Web框架Gee总结--上下文Context(二)

学习Go语言Web框架Gee总结--上下文Context context/go.modcontext/main.gocontext/gee/context.gocontext/gee/router.gocontext/gee/gee.go 学习网站来源&#xff1a;Gee 项目目录结构&#xff1a; context/go.mod module examplego 1.21.5require gee v0.0.0 replace gee…

电子邮件营销主题管理技巧:提升邮件打开率与转化率的实用指南

有效的沟通在于向正确的受众传递正确的信息。市场营销人员大部分时间都在寻找最佳方式。幸运的是&#xff0c;我们无需耗费太多精力才能找到答案。为什么不直接问问你的受众他们期望的是什么&#xff0c;然后根据他们的需求进行沟通呢&#xff1f; 由于社交媒体的出现&#xf…