Dremio架构分析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 一.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月前
|
安全 数据处理 数据安全/隐私保护
C/S架构与B/S架构的适用场景分析
C/S架构(客户端/服务器架构)与B/S架构(浏览器/服务器架构)在适用场景上各有特点,主要取决于应用的具体需求、用户群体、系统维护成本、跨平台需求等因素。
307 6
|
3天前
|
机器学习/深度学习 存储 人工智能
基于AI的实时监控系统:技术架构与挑战分析
AI视频监控系统利用计算机视觉和深度学习技术,实现实时分析与智能识别,显著提升高风险场所如监狱的安全性。系统架构包括数据采集、预处理、行为分析、实时决策及数据存储层,涵盖高分辨率视频传输、图像增强、目标检测、异常行为识别等关键技术。面对算法优化、实时性和系统集成等挑战,通过数据增强、边缘计算和模块化设计等方法解决。未来,AI技术的进步将进一步提高监控系统的智能化水平和应对复杂安全挑战的能力。
|
1月前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
1月前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
86 4
|
2月前
|
存储 SQL 分布式计算
湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
【10月更文挑战第7天】湖仓一体架构深度解析:构建企业级数据管理与分析的新基石
151 1
|
3月前
|
存储 监控 安全
SaaS业务架构:业务能力分析
【9月更文挑战第20天】在数字化时代,软件即服务(SaaS)模式逐渐成为企业软件解决方案的首选。SaaS 业务架构设计对于提供高效、可靠的服务至关重要。其核心业务能力包括:用户管理(注册登录、角色权限)、数据管理(存储备份、安全共享)、业务流程管理(设计定制、工作流自动化)、应用集成(第三方应用、移动应用)及客户服务(支持培训、反馈改进)。通过优化这些能力,可为企业提供更高效、可靠的 SaaS 服务。
71 11
|
4月前
|
消息中间件 负载均衡 Kafka
Kafka 实现负载均衡与故障转移:深入分析 Kafka 的架构特点与实践
【8月更文挑战第24天】Apache Kafka是一款专为实时数据处理和流传输设计的高性能消息系统。其核心设计注重高吞吐量、低延迟与可扩展性,并具备出色的容错能力。Kafka采用分布式日志概念,通过数据分区及副本机制确保数据可靠性和持久性。系统包含Producer(消息生产者)、Consumer(消息消费者)和Broker(消息服务器)三大组件。Kafka利用独特的分区机制实现负载均衡,每个Topic可以被划分为多个分区,每个分区可以被复制到多个Broker上,确保数据的高可用性和可靠性。
118 2
|
4月前
|
数据采集 存储 Java
Flume Agent 的内部原理分析:深入探讨 Flume 的架构与实现机制
【8月更文挑战第24天】Apache Flume是一款专为大规模日志数据的收集、聚合及传输而设计的分布式、可靠且高可用系统。本文深入解析Flume Agent的核心机制并提供实际配置与使用示例。Flume Agent由三大组件构成:Source(数据源)、Channel(数据缓存)与Sink(数据目的地)。工作流程包括数据采集、暂存及传输。通过示例配置文件和Java代码片段展示了如何设置这些组件以实现日志数据的有效管理。Flume的强大功能与灵活性使其成为大数据处理及实时数据分析领域的优选工具。
157 1
|
3月前
|
缓存 负载均衡 数据管理
深入探索微服务架构的核心要素与实践策略在当今软件开发领域,微服务架构以其独特的优势和灵活性,已成为众多企业和开发者的首选。本文将深入探讨微服务架构的核心要素,包括服务拆分、通信机制、数据管理等,并结合实际案例分析其在不同场景下的应用策略,旨在为读者提供一套全面、深入的微服务架构实践指南。**
**微服务架构作为软件开发领域的热门话题,正引领着一场技术革新。本文从微服务架构的核心要素出发,详细阐述了服务拆分的原则与方法、通信机制的选择与优化、数据管理的策略与挑战等内容。同时,结合具体案例,分析了微服务架构在不同场景下的应用策略,为读者提供了实用的指导和建议。
|
4月前
|
消息中间件 存储 大数据
大数据-数据仓库-实时数仓架构分析
大数据-数据仓库-实时数仓架构分析
167 1

热门文章

最新文章