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月前
|
缓存 网络协议 数据库连接
C/S架构中HTTP错误状态码原因分析及解决办法
HTTP(Hypertext Transfer Protocol)是用于在客户端和服务器之间传输数据的协议。当在浏览器或其他HTTP客户端中访问网页时,可能会发生各种访问报错。我们需要根据网页提供的错误状态码分析错误原因,以找到相对应的解决办法。
42 0
|
4月前
|
设计模式 前端开发 Java
KnowStreaming系列教程第二篇——项目整体架构分析
KnowStreaming系列教程第二篇——项目整体架构分析
42 0
|
4月前
|
人工智能 缓存 并行计算
技术改变AI发展:Ada Lovelace架构解读及RTX 4090性能测试分析(系列三)
简介:随着人工智能(AI)的迅速发展,越来越多的应用需要巨大的GPU计算资源。Ada lovelace(后面简称Ada)是NVIDIA最新的图形处理器架构,随2022年9月20日发布的RTX 4090一起公布。
135410 10
技术改变AI发展:Ada Lovelace架构解读及RTX 4090性能测试分析(系列三)
|
4月前
|
SQL 开发框架 安全
Linux系统中ARMv8架构u-boot启动流程分析
Linux系统中ARMv8架构u-boot启动流程分析
127 0
|
4月前
|
边缘计算 编译器 数据中心
X86架构与Arm架构的主要区别分析
X86架构与Arm架构的主要区别分析
470 0
|
27天前
|
设计模式 安全 Java
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
【分布式技术专题】「Tomcat技术专题」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
32 0
|
27天前
|
存储 Java 应用服务中间件
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
51 0
|
1月前
|
监控 JavaScript 安全
监控内网电脑软件设计与实现:基于Node.js的服务器端架构分析
在当今信息技术高度发达的时代,监控内网电脑的需求日益增长。企业需要确保网络安全,个人用户也需要监控家庭网络以保护隐私和安全。本文将介绍一种基于Node.js的服务器端架构,用于设计和实现监控内网电脑软件。
102 0
|
1月前
|
Web App开发 JavaScript 前端开发
分析网站架构:浏览器插件
分析网站架构:浏览器插件
44 1