Dremio架构分析

简介: 一.Dremio架构 Dremio是基于Apache calcite、Apache arrow和Apache parquet3个开源框架构建,结构其核心引擎Sabot,形成这款DaaS(Data-as-a-Service)数据即服务平台;整体体验风格与其公司开源的Apache Drill非常接近。

一.Dremio架构

Dremio是基于Apache calcite、Apache arrow和Apache parquet3个开源框架构建,结构其核心引擎Sabot,形成这款DaaS(Data-as-a-Service)数据即服务平台;整体体验风格与其公司开源的Apache Drill非常接近。

Ⅰ).架构图


Ⅱ).参考API

Ⅲ).参考SQL

二.Apache Arrow

Apache Arrow是基于Apache Drill中的Value Vector来实现的,而使用Value Vector可以减少运算时重复访问数据带来的成本,其特点:

  1. 零拷贝共享内存和基于RPC的数据移动
  2. 读写文件格式(如CSV,Apache ORC和Apache Parquet)
  3. 内存分析和查询处理

Ⅰ).公共数据层

Apache Arrow的功能设计思路有点类似于适配器模式,将不同系统的数据源进行统一适配。

a).不使用Arrow

  1. 每个系统都有自己的内部存储器格式
  2. 在序列化和反序列化上浪费了70-80%的计算量
  3. 在多个项目中实现的类似功能

b).使用Arrow

  1. 所有系统都使用相同的内存格式
  2. 没有跨系统通信的开销
  3. 项目可以共享功能

Ⅱ).列式存储

传统的内存数据格式是以每一行作为各个字段的分布,相同字段没有被集中在一起,造成了计算时的不必要浪费;Apache Arrow通过列式存储格式约束,将相同字段集中排列在一起,提高了过滤查询的响应

如下例子:

a).数据

people=[
    {
        "name": "mary",
        "age": 30,
        "placed_lived": [
            {
                "city": "Akron",
                "state": "OH"
            },
            {
                "city": "Bath",
                "state": "OH"
            }
        ]
    },
    {
        "name": "mary",
        "age": 31,
        "placed_lived": [
            {
                "city": "Lodi",
                "state": "OH"
            },
            {
                "city": "Ada",
                "state": "OH"
            },
            {
                "city": "Akron",
                "state": "OH"
            }
        ]
    }
]

b).存储结构

placed_lived offsets: 存储的起始位置是0,其中第一个人有2个city,所以为0~2;第二个人有3个city,所以为3~5
city offsets: 存储的起始位置是0,其中第一个人的第一个city是Akron,所以为0~5,以此类推,即可知offsets位置
city Data: 即为实际数据存储位置

三.Apache Parquet

Apache Parquet是一种面向分析的、通用的列式存储格式,兼容各种数据处理框架比如 Spark、Hive、Impala 等,同时支持 Avro、Thrift、Protocol Buffers 等数据模型。

Ⅰ).Parquet主要模块

  1. parquet-format定义了所有格式规范,以及由 Thrift 序列化的元数据信息
  2. parquet-mr实现读写 Parquet 文件的功能模块,与其他组件的适配工具,如Hadoop Input/Output Formats、Pig loaders 、Hive Serde 等
  3. parquet-cpp用于读写Parquet文件的C ++库
  4. parquet-rs用于读写Parquet文件的Rust 库
  5. parquet-compatibility验证不同语言之间读写 Parquet 文件的兼容性测试

Ⅱ).数据存储格式

Parquet文件结构

  1. File一个 Parquet 文件,包括数据和元数据
  2. Row group数据在水平方向上按行拆分为的单元
  3. Column一个行组中的每一列对应的保存在一个列块中
  4. Page每一个列块划分为多个数据页,同一个列块的不同页可能使用不同的编码格式

Ⅲ).元数据

元数据包括如下3部分

  1. file metadata
  2. column (chunk) metadata
  3. page header metadata

四.Apache Calcite

Apache Calcite 是一款开源SQL解析工具, 可以将各种SQL语句解析成抽象语法术AST(Abstract Syntax Tree), 之后通过操作AST就可以把SQL中所要表达的算法与关系体现在具体代码之中

Ⅰ).Calcite 主要组件

  1. Catelog: *定义SQL语义相关的元数据与命名空间
  2. SQL parser: 主要是把SQL转化成AST
  3. SQL validator: 通过Catalog来校证AST
  4. Query optimizer: 将AST转化成物理执行计划、优化物理执行计划
  5. SQL generator: 反向将物理执行计划转化成SQL语句

Ⅱ).Calcite 主要功能

  1. SQL 解析
  2. SQL 校验
  3. 查询优化
  4. SQL 生成器
  5. 数据连接

五.Apache Drill

Apache Drill是用于大规模数据集的低延迟分布式SQL查询引擎,包括结构化和半结构化/嵌套数据

Ⅰ).Drill核心模块

  1. RPC端点Drill公开了一个低开销的基于protobuf的RPC协议,以与客户端进行通信
  2. SQL解析器Drill使用开源SQL解析器框架Calcite来解析传入的查询
  3. 存储插件界面Drill充当多个数据源之上的查询层,存储插件为Drill提供以下信息
  • a).数据源的的元数据
  • b).Drill用于读取和写入数据源的接口
  • c).数据的位置和一组优化规则,以帮助在特定数据源上高效,快速地执行Drill查询

Ⅱ).Drill查询

  1. 客户端或应用程序会以SQL语句的形式将查询发送到Drill集群中的Drillbit,Drill无主从概念
  2. 接受查询的Drill节点成为Foreman,Foreman驱动整个查询
  3. Foreman解析器解析SQL,并根据SQL运算符形成逻辑计划
  4. Foreman优化器使用各种类型的规则把操作符和函数重新排列为最佳计划后,将逻辑计划转换为执行查询的物理计划
  5. Foreman中的并行化程序将物理计划转换为多个片段,片段创建了一个多级执行树
  6. 查询根据执行树在数据源并行执行,并将结果发送回客户端或应用程序

Ⅲ).Drill特点

  1. 低延迟SQL查询
  2. 动态查询文件(如JSON,Parquet,AVRO和NoSQL)和HBase表中的自描述数据,无需Hive Metastore中的元数据定义
  3. 嵌套数据支持
  4. 与Apache Hive集成(对Hive表和视图的查询,对所有Hive文件格式和Hive UDF的支持)
  5. 使用标准JDBC / ODBC驱动程序进行BI / SQL工具集成

六.使用案例

a).hive数据分析

Dremio案例_Hive数据分析

b).hdfs数据分析

Dremio案例_HDFS文件数据分析

c).本地Json文件数据分析

Dremio案例_本地Json文件数据分析

d).Elasticserch数据分析

Dremio案例_Elasticserch数据分析

目录
相关文章
|
3月前
|
人工智能 API 数据安全/隐私保护
Apifox 与 Apipost 的 API 文档引擎对比:底层架构、性能与可扩展性分析
深入探索市场上两大主流API工具——Apifox和Apipost的文档能力时,发现了令人惊讶的差距。这不仅仅是功能多寡的问题,更关乎开发效率与团队协作的质变。
|
8天前
|
Java API 开发工具
灵码产品演示:软件工程架构分析
本演示展示灵码对复杂软件项目的架构分析与文档生成能力。通过Qwen3模型,结合PlantUML,自动生成系统架构图、微服务时序图,并提取API接口文档,实现高效、智能的代码理解与文档输出。
|
6天前
|
存储 JSON 数据处理
ClkLog埋点与用户行为分析系统:架构升级与性能全面提升
随着越来越多企业在实际业务中使用 ClkLog,数据规模和分析需求也不断提升,部分用户日活已经超过10万,为了顺应这一趋势,ClkLog 秉持 “开放透明、持续演进”的理念,推出了迄今为止最重要的一次性能优化升级。新版本在大规模数据处理与复杂查询场景中,性能表现实现了跨越式提升。经过多轮研发与严格测试,新版本现已正式上线:在原有付费版 1.0 的基础上架构全面升级,并同步发布全新的 2.0 版本。为用户带来更强的性能与更广的适用场景。
|
5月前
|
人工智能 自然语言处理 数据可视化
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
两大 智能体框架 Dify vs Langchain 的全面分析,该怎么选?资深架构师 做一个彻底的解密
|
1月前
|
存储 前端开发 JavaScript
如何开发设备管理系统中的经验分析报表板块 ?(附架构图+流程图+代码参考)
设备管理系统(EMS)助力企业高效管理设备生命周期,涵盖采购、维护到报废全流程。本文详解经验分析报表模块设计与开发,涵盖动态看板、点检、巡检、维修、保养及库存统计功能,提供代码示例与架构设计建议,提升设备管理效率与决策水平。
|
4月前
|
机器学习/深度学习 人工智能 算法
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
该研究系统梳理了大型多模态推理模型(LMRMs)的技术发展,从早期模块化架构到统一的语言中心框架,提出原生LMRMs(N-LMRMs)的前沿概念。论文划分三个技术演进阶段及一个前瞻性范式,深入探讨关键挑战与评估基准,为构建复杂动态环境中的稳健AI系统提供理论框架。未来方向聚焦全模态泛化、深度推理与智能体行为,推动跨模态融合与自主交互能力的发展。
277 13
大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
|
8月前
|
机器学习/深度学习 安全 算法
十大主流联邦学习框架:技术特性、架构分析与对比研究
联邦学习(FL)是保障数据隐私的分布式模型训练关键技术。业界开发了多种开源和商业框架,如TensorFlow Federated、PySyft、NVFlare、FATE、Flower等,支持模型训练、数据安全、通信协议等功能。这些框架在灵活性、易用性、安全性和扩展性方面各有特色,适用于不同应用场景。选择合适的框架需综合考虑开源与商业、数据分区支持、安全性、易用性和技术生态集成等因素。联邦学习已在医疗、金融等领域广泛应用,选择适配具体需求的框架对实现最优模型性能至关重要。
1574 79
十大主流联邦学习框架:技术特性、架构分析与对比研究
|
3月前
|
运维 监控 数据可视化
一文详解:工业软件“低代码开发平台”技术架构研究与分析
本文围绕工业软件低代码开发平台的机遇与挑战,提出基于自动化引擎的技术架构,由工具链、引擎库、模型库、组件库、工业数据网关和应用门户组成。文章分析了其在快速开发、传统系统升级中的应用模式及价值,如缩短创新周期、降低试错成本、解决资源缺乏和提升创新可复制性,为我国工业软件产业发展提供参考和支持。
|
3月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
485 0
|
安全 数据处理 数据安全/隐私保护
C/S架构与B/S架构的适用场景分析
C/S架构(客户端/服务器架构)与B/S架构(浏览器/服务器架构)在适用场景上各有特点,主要取决于应用的具体需求、用户群体、系统维护成本、跨平台需求等因素。
946 6