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

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

目前已经更新到了:

  • 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.xdnf.cn/news/1551495.html

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

相关文章

永不失联!遨游双卫星三防手机成为高效应急关键所在

今年9月被戏称为“台风月”&#xff0c;台风“摩羯”、“贝碧嘉”以及热带气旋“普拉桑”接连来袭&#xff0c;极端天气不仅导致了电力中断、道路损毁&#xff0c;更使得传统的通信网络遭受重创&#xff0c;给应急通信保障工作带来了极大的压力。面对“三断”的实战难题&#x…

Web3 游戏周报(9.22 - 9.28)

回顾上周的区块链游戏概况&#xff0c;查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【9.22-9.28】Web3 游戏行业动态&#xff1a; Axie Infinity 将 Fortune Slips 的冷却时间缩短至 24 小时&#xff0c;从而提高玩家的收入。 Web3 游戏开发商 Darkbright Studios…

SV830C产品介绍

SV830C产品介绍 SV830C是一款由珠海亿智科技有限公司&#xff08;Zhuhai Eeasy Technology Co., Ltd.&#xff0c;品牌名为EEASYTECH&#xff09;倾力打造的专业AI系统级芯片&#xff08;SoC&#xff09;&#xff0c;专为视频编码产品而设计。这款芯片不仅集成了先进的神经网络…

了解客户支持的人工智能:人工智能如何改变客户服务

作者&#xff1a;来自 Elastic Elastic Platform Team 我们都经历过这种情况&#xff1a;走进商店时&#xff0c;看到人工收银台排着长队&#xff0c;而所有自助收银台都是空的。这就是所谓的便捷工具并不那么便捷的情况。曾经&#xff0c;许多客户服务 “解决方案” 也处于这种…

局部整体(七)利用python绘制圆形嵌套图

局部整体&#xff08;七&#xff09;利用python绘制圆形嵌套图 圆形嵌套图&#xff08; Circular Packing&#xff09;简介 将一组组圆形互相嵌套起来&#xff0c;以显示数据的层次关系&#xff0c;类似于矩形树图。数据集中每个实体都由一个圆表示&#xff0c;圆圈大小与其代…

如何选择合适的跨境网络专线?

选择合适的跨境网络专线对于保障企业的国际业务顺畅运行至关重要。以下是一些选择跨境网络专线时可以参考的关键点&#xff1a; 服务商的信誉和经验&#xff1a;首先考察服务商的市场声誉和行业经验。一个好的服务商应该拥有良好的客户评价和成功案例&#xff0c;这表明他们有能…

掌握自动化测试必要的几种技能?

1.自动化测试员技能——编程语言 当我开始担任手动测试人员时&#xff0c;我不喜欢编码。但是&#xff0c;当我逐渐进入自动化领域时&#xff0c;对我来说很清楚&#xff0c;如果没有对编程语言的一些基本了解&#xff0c;就无法编写逻辑自动化测试脚本。 对编程有一点了解&a…

记录|Modbus-TCP产品使用记录【德克威尔】

目录 前言一、德克威尔1.1 实验图1.2 DECOWELL IO Tester 软件1.3 读写设置1.4 C#进行Modbus-TCP读写 更新时间 前言 参考文章&#xff1a; 使用的第二款Modbus-TCP产品。 一、德克威尔 1.1 实验图 1.2 DECOWELL IO Tester 软件 这也是自带模块配置软件的。下图就是德克威尔的…

nlp任务之预测中间词-huggingface

目录 1.加载编码器 1.1编码试算 2.加载数据集 3.数据集处理 3.1 map映射&#xff1a;只对数据集中的sentence数据进行编码 3.2用filter()过滤 单词太少的句子过滤掉 3.3截断句子 4.创建数据加载器Dataloader 5. 下游任务模型 6.测试预测代码 7.训练代码 8.保…

Solidworks斜接法兰快速绘制钣金箱体

Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 0.5mm间距为钣金焊接的预留焊缝。

高标准农田灌区信息化:为农业可持续发展注入新动力

高标准农田灌区信息化&#xff0c;作为现代农业科技与信息技术深度融合的典范&#xff0c;正逐步成为推动农业可持续发展的关键力量。这一创新模式不仅提升了农业生产效率与资源利用率&#xff0c;还为保障国家粮食安全、促进农村经济转型升级以及实现环境友好型农业开辟了新路…

基于Springboot+Vue的视频点播系统设计与实现登录 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

小程序原生-数据的双向绑定

1. 通过model:实现数据的双向绑定 <input type"text" name"名称" model:value"{{name}}" /> <checkbox model:checked"{{isChecked}}"/> 是否同意该协议// pages/test/test.js Page({data: {name:wuk,isChecked:false}, }…

黑马头条day9 热点文章定时文章

bug 调度失败 刚开始以为是进程端口被占用了 Address already in use: bind【解决办法】-CSDN博客 ①先查询出占用端口的进程号 netstat -ano|findstr 8010②杀死该进程号的进程 taskkill -f -pid 21320发现关掉端口还是不行 解决了跨域问题也不行 解决办法 给的官方里…

png图片怎么转换成jpg?5个软件帮助你快速进行图片的格式转换

png图片怎么转换成jpg&#xff1f;5个软件帮助你快速进行图片的格式转换 将 PNG 图片转换为 JPG 是一种常见的需求&#xff0c;特别是当你需要减小图片文件大小或在不支持 PNG 格式的环境中使用时。以下五款软件能帮助你快速、简单地完成图片格式的转换&#xff0c;它们功能齐…

可以白嫖PPT模板的6个网站,赶紧收藏

推荐6个PPT模板网站&#xff0c;免费下载&#xff0c;绝对的高质量&#xff0c;赶紧收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库网有非常丰富的免费素材&#xff0c;像设计类、办公类、自媒体类等素材都很丰富。PPT模板种类很多&#xff0…

H5公众号调用微信扫一扫功能(vue)

1.引入微信sdk import wx from weixin-js-sdk 2.初始化微信sdk,构建扫一扫所需要的参数 async initWxConfig() { //首先获取当前url地址 let url await getSignUrl() let params { appid: this.$route.query.appid, url: url, } //调用后端接口获取公众号参数 const resp a…

湖州市自闭症寄宿学校:个性化关爱让每个孩子都能茁壮成长

在探索自闭症儿童教育的广阔领域中&#xff0c;湖州市的自闭症寄宿学校以其个性化的教育模式&#xff0c;为众多家庭点亮了希望之光。然而&#xff0c;当我们把视线转向中国南方的一座现代化大都市——广州&#xff0c;会发现另一所同样在自闭症儿童教育领域深耕细作、成果斐然…

推荐一个可以把PDF样本册转换为翻页电子书的网站

​随着互联网的普及&#xff0c;越来越多的企业和个人开始意识到线上展览的重要性。如何将实体样本册转化为线上版本&#xff0c;让更多人了解和欣赏自己的产品与服务&#xff1f; 一、网站简介 这款PDF样本册免费上传网站名为“FLBOOK”&#xff0c;致力于为广大用户提供便捷…

非关键尺寸的失效模式和效应分析(FMEA)是否有必要进行?

在追求极致的过程中&#xff0c;一个看似不起眼的细节——非关键尺寸的失效模式和效应分析&#xff08;FMEA&#xff09;&#xff0c;却常常被忽视或低估其重要性。本文&#xff0c;深圳天行健企业管理咨询公司旨在分享为何在非关键领域&#xff0c;FMEA同样不可或缺&#xff0…