大数据-155 Apache Druid 架构与原理详解 数据存储 索引服务 压缩机制

news2024/9/30 12:30:33

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(正在更新…)

章节内容

上节我们完成了如下的内容:

  • Apache Druid 基础架构 详解
  • Apache Druid 架构演进 详解

在这里插入图片描述

数据存储

  • Druid中的数据存储在被称为DataSource中,DataSource类似RDBMS中的Tablet
  • 每个DataSource按照时间划分,每个时间范围成为一个Chunk(比如按天分区,则一个Chunk为一天)
  • 在Chunk中数据被分为一个或多个Segment,Segment是数据实际存储结构,Datasource、Chunk只是一个逻辑概念
  • Segment是按照时间组织称Chunk,所以在按照时间查询数据时,效率非常高。
  • 每个Segment都是一个单独的文件,通过包含几百万行的数据

在这里插入图片描述

数据分区

  • Druid处理的是事件数据,每条数据都会带有一个时间戳,可以使用时间进行分区
  • 上图指定了分区粒度为天,那么每天的数据都会被单独存储和查询

Segment内部存储

  • Druid采用列式存储,每列数据都是在独立的结构中存储
  • Segment中的数据类型主要分为三种:
  • 类型1 时间戳:每一行数据,都必须有一个TimeStamp,Druid一定会基于事件戳来分片
  • 类型2 维度列:用来过滤Fliter或者组合GroupBY的列,通过是String、Float、Double、Int类型
  • 类型3 指标列:用来进行聚合计算的列,指定的聚合函数 sum、average等

在这里插入图片描述
MiddleManger节点接受到Ingestion的任务之后,开始创建Segment:

  • 转换成列式存储格式
  • 用bitmap来建立索引(对所有的dimension列建立索引)
  • 使用各种压缩算法
  • 算法1:所有的使用 LZ4 压缩
  • 算法2:所有的字符串采用字典编码、标识以达到最小化存储
  • 算法3:对位图索引使用位图压缩

Segment创建完成之后,Segment文件就是不可更改的,被写入到深度存储(目的是为了防止MiddleManager节点宕机后,Segment丢失)。然后Segment加载到Historicaljiedian,Historical节点可以直接加载到内存中。
同时,Metadata store 也会记录下这个新创建的Segment的信息,如结构、尺寸、深度存储的位置等等
Coordinator节点需要这些元数据来协调数据的查找。

索引服务

索引服务是数据导入并创建Segment数据文件的服务
索引服务是一个高可用的分布式服务,采用主从结构作为架构模式,索引服务由三大组件构成:

  • overlord 作为主节点
  • MiddleManage作为从节点
  • peon用于运行一个Task

索引服务架构图如下图所示:
在这里插入图片描述

服务构成

Overlord组件

负责创建Task、分发Task到MiddleManger上运行,为Task创建锁以及跟踪Task运行状态并反馈给用户

MiddleManager组件

作为从节点,负责接收主节点分配的任务,然后为每个Task启动一个独立的JVM进程来完成具体的任务

Peon(劳工)组件

由 MiddleManager 启动的一个进程用于一个Task任务的运行

对比YARN

  • Overlord 类似 ResourceManager 负责集群资源管理和任务分配
  • MiddleManager 类似 NodeManager 负责接收任务和管理本节点的资源
  • Peon 类似 Container 执行节点上具体的任务

Task类型

  • index hadoop task:Hadoop索引任务,利用Hadoop集群执行MapReduce任务以完成Segment数据文件的创建,适合体量较大的Segments数据文件的创建任务
  • index kafka task:用于Kafka数据的实时摄入,通过Kafka索引任务可以在Overlord上配置一个KafkaSupervisor,通过管理Kafka索引任务的创建和生命周期来完成Kafka数据的摄取
  • merge task:合并索引任务,将多个Segment数据文件按照指定的聚合方法合并为一个segments数据文件
  • kill task:销毁索引任务,将执行时间范围内的数据从Druid集群的深度存储中删除

索引及压缩机制

Druid的查询时延低性能好的主要原因是采用了五个技术点:

  • 数据预聚合
  • 列式存储、数据压缩
  • Bitmap索引
  • mmap(内存文件映射方式)
  • 查询结果的中间缓存

数据预聚合

  • Druid 通过一恶搞RollUp的处理,将原始数据在注入的时候就进行了汇总处理
  • RollUp可以压缩我们需要保存的数据量
  • Druid会把选定的相同维度的数据进行聚合操作,可以存储的大小
  • Druid可以通过queryGranularity来控制注入数据的粒度,最小的queryGranularity是millisecond(毫秒级别)

Roll-Up

聚合前:
在这里插入图片描述
聚合后:
在这里插入图片描述

位图索引

Druid在摄入的数据示例:
在这里插入图片描述

  • 第一列为时间,Appkey和Area都是维度列,Value为指标列
  • Druid会在导入阶段自动对数据进行RollUp,将维度相同组合的数据进行聚合处理
  • 数据聚合的粒度根据业务需要确定

按天聚合后的数据如下:
在这里插入图片描述
Druid通过建立位图索引,实现快速数据查找。
BitMap索引主要为了加速查询时有条件过滤的场景,Druid生成索引文件的时候,对每个列的每个取值生成对应的BitMap集合:
在这里插入图片描述

索引位图可以看作是:HashMap<String, BitMap>

  • Key就是维度的值
  • Value就是该表中对应的行是否有该维度的值

在这里插入图片描述

SQL查询

SELECT sum(value) FROM tab1
WHERE time='2020-01-01'
AND appkey in ('appkey1', 'appkey2')
AND area='北京'

执行过程分析:

  • 根据时间段定位到Segment
  • appkey in (‘appkey1’, ‘appkey2’) and area=‘北京’ 查到各自的bitmap
  • (appkey1 or appkey2)and 北京
  • (110000 or 001100) and 101010 = 111100 and 101010 = 101000
  • 符合条件的列为:第一行 & 第三行,这几行 sum(value)的和为40

GroupBy查询

SELECT area, sum(value)
FROM tab1
WHERE time='2020-01-01'
AND appkey in ('appkey1', 'appkey2')
GROUP BY area

该查询与上面的查询不同之处在与将符合条件的列:

  • appkey1 or appkey2
  • 110000 or 001100 = 111100
  • 将第一行到第四行取出来
  • 在内存中做分组聚合,结果为:北京40、深圳60

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

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

相关文章

详解DNS工作原理及实例分析

DNS概述 互联网上的主机能够互相识别、访问&#xff0c;通过分配IP地址的方式进行的。全球主机数量众多&#xff0c;人们要记住像202.12.23.203这样的IP地址&#xff0c;不仅记不住&#xff0c;而且容易出错&#xff0c;于是&#xff0c;人们采用域名的形式&#xff0c;如网易…

详解 Spring Boot 的 RedisAutoConfiguration 配置

引言 带大家分析 Spring Boot 内置的有关 Redis 的自动配置类【RedisAutoConfiguration】。 1. Spring Data Redis Spring Data Redis 是 Spring Data 家族的一部分&#xff0c;它提供了从 Spring 应用程序中轻松配置和访问 Redis 的功能。 我们来看看官方介绍的特性&#xff…

速通数据结构与算法第七站 排序

系列文章目录 速通数据结构与算法系列 1 速通数据结构与算法第一站 复杂度 http://t.csdnimg.cn/sxEGF 2 速通数据结构与算法第二站 顺序表 http://t.csdnimg.cn/WVyDb 3 速通数据结构与算法第三站 单链表 http://t.csdnimg.cn/cDpcC 4 速通…

基于springboot+小程序的医院核酸检测服务管理系统(医院2)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于springboot小程序的医院核酸检测服务管理系统实现了管理员、用户管理、普通管理员、医护人员。 1、管理员实现了首页、用户管理、医护人员管理、普通管理员、通知公告管理、疫苗接种…

【Postgresql】安装新手教程

在以下postgresql官网下载软件 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads下载完成后安装&#xff0c;找个记事本记录下安装过程中填写的数据库管理原的password和port 在所有程序目录中打开pgadmin 输入刚才的数据库管理员密码 自动跳转到以下…

Redis一些简单通用命令认识常用数据类型和编码方式认识Redis单线程模型

通用命令 get() / set() 这是Redis中两个最为核心的命令。 set插入 这里的key 和 value都是字符串&#xff0c;我们可以加双引号 或者单引号&#xff0c;或者不加。 get查找 如果查询的key值不存在&#xff0c;那么会返回一个 nil &#xff0c;也就是代表空 在Redis中命令…

Hadoop搭建及Springboot集成

文章目录 环境说明下载安装配置单机伪集群配置hadoop-env.sh配置core-sit.xml配置hdfs-site.xml配置 yarn-site.xml配置mapred-site.xml 启动访问web界面 Windows电脑远程调用springBoot 集成 环境说明 使用Hadoop的前提是linux服务器上必须安装java&#xff0c;这里不赘述怎么…

一天学习开发一个APP!PDF转Word文档,Power Platform也能搞定

之前&#xff0c;给大家分享了微软Power Platform开发课程——手把手教你搭建二维码识别器&#xff0c;大家都很感兴趣。听说&#xff0c;很多小伙伴对于PDF转Word文档有困扰&#xff0c;这期我们继续为大家分享Power Platform的开发能力与技巧&#xff0c;怎么通过Power Platf…

[ RK3566-Android11 ] 关于移植 RK628F 驱动以及后HDMI-IN图像延迟/无声等问题

问题描述 由前一篇文章https://blog.csdn.net/jay547063443/article/details/142059700?fromshareblogdetail&sharetypeblogdetail&sharerId142059700&sharereferPC&sharesourcejay547063443&sharefromfrom_link&#xff0c;移植HDMI-IN部分驱动后出现&a…

什么是 JWT?它是如何工作的?

松哥最近辅导了几个小伙伴秋招&#xff0c;有小伙伴在面小红书时遇到这个问题&#xff0c;这个问题想回答全面还是有些挑战&#xff0c;松哥结合之前的一篇旧文和大伙一起来聊聊。 一 无状态登录 1.1 什么是有状态 有状态服务&#xff0c;即服务端需要记录每次会话的客户端信…

什么牌子的护眼台灯质量好?五款护眼台灯性价比高又好用

如今&#xff0c;市场上的护眼台灯琳琅满目&#xff0c;种类繁多。家长们为了孩子们的视力健康&#xff0c;都会精心挑选合适的台灯。什么牌子的护眼台灯质量好&#xff1f;然而&#xff0c;市面上仍存在一些质量不过关的产品&#xff0c;可能会出现频闪、线路短路、底盘过热、…

生产环境升级mysql流程及配置主从服务

之前写到过mysql升级8.4的文章, 因此不再介绍mysql的安装过程 避免服务器安装多个mysql引起冲突的安装方法_安装两个mysql会冲突吗-CSDN博客 生产环境升级mysql8.4.x流程 安装mysql 参考之前文章: 避免服务器安装多个mysql引起冲突的安装方法_安装两个mysql会冲突吗-CSDN博客…

无界购物:线上商城开启便利与智能新潮流-亿发

随着科技的不断进步&#xff0c;线上购物已经成为现代消费者日常生活的重要组成部分。无论是在繁忙的工作间隙&#xff0c;还是在闲暇的周末时光&#xff0c;消费者都能通过线上商城轻松实现购物的愿望。而这一切的背后&#xff0c;是线上商城打破了地理界限&#xff0c;开启了…

【SpringBoot详细教程】-06-Restful风格【持续更新】

点个关注&#xff0c;不迷路 ⾸先&#xff0c;回顾并详细说明⼀下在SSM中使⽤的 Controller 、 RestController 、 RequestMapping 注解。如果您对SpringMVC不熟悉并且还没有尝试过快速⼊⻔案例&#xff0c;建议先看⼀下SSM与Restful相关的内容。 Controller &#xff1a;修饰…

Zynq7000系列中的Quad-SPI(四线制串行外设接口)Flash控制器编程指南

Zynq7000系列中的Quad-SPI&#xff08;四线制串行外设接口&#xff09;Flash控制器是一个功能强大的组件&#xff0c;它支持高速数据传输和多种配置模式。以下是基于Zynq7000系列的Quad-SPI Flash控制器编程指南&#xff0c;旨在帮助开发者了解如何配置和使用该控制器。 编程指…

医院配电系统谐波的分析及治理

七次谐波&#xff0c;流入电网。 4.计算机及UPS 目前大部分医院都是通过计算机实现运营和管理工作&#xff0c;计算机数量众多&#xff0c;计算机服务器配有UPS等备用电源&#xff0c;加之个人电脑的开关电源&#xff0c;都是产生谐波的电源。 3医院配电系统谐波设备的治理方…

【Golang】Go语言中时间time相关处理方法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

微信广告任务平台 ajax_upload 任意文件上传漏洞

0x01 漏洞描述&#xff1a; 微信广告任务平台ajax_upload接口处存在任意文件上传漏洞&#xff0c;攻击者可利用该漏洞将恶意文件上传至服务器&#xff0c;进而可能实现远程代码执行、篡改网站内容或发动其他形式的攻击&#xff0c;严重危及系统与数据安全。 位于控制器中IndexC…

x-cmd pkg | tokei - 代码统计利器,助你快速了解项目进度

目录 简介首次用户技术特点竞品和相关项目进一步阅读 简介 tokei 是一个使用 Rust 编写的显示有关代码统计信息的命令行工具&#xff0c;可以分门别类的统计目录内的代码行数。 tokei 具有良好的跨平台性&#xff0c;可以在 Linux、macOS、Windows 等多种平台上安装运行。 首…

SU03T(语音识别播报模块)

SU03T&#xff08;语音识别播报模块&#xff09; 注意&#xff1a;学习模块的方法是最重要的 目录 SU03T&#xff08;语音识别播报模块&#xff09; 查找资料 - SU03T 配置固件 1、进入智能公元&#xff0c;并注册登入 2、点击对应的模块&#xff0c;创建产品 3、随便选…