Dremio架构分析

北斗云 2019-08-19

云栖社区 架构 SQL Apache drill Hive metadata 存储 数据存储 Parquet Arrow dremio Carcite

一.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数据分析

登录 后评论
下一篇
冒顿单于
5345人浏览
2019-08-28
相关推荐
Dremio简述
522人浏览
2019-08-09 18:08:34
Dremio案例_HDFS文件数据分析
288人浏览
2019-08-13 09:29:09
Dremio案例_Hive数据分析
283人浏览
2019-08-21 15:33:54
Apache Zookeeper常用命令
2208人浏览
2019-08-22 17:00:07
Dremio使用Execl可视化数据
3767人浏览
2019-08-23 15:16:36
Dremio与Drill的对比
250人浏览
2019-09-09 10:41:53
0
0
0
415