Dremio架构分析
一.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可以减少运算时重复访问数据带来的成本,其特点:
- 零拷贝共享内存和基于RPC的数据移动
- 读写文件格式(如CSV,Apache ORC和Apache Parquet)
- 内存分析和查询处理
Ⅰ).公共数据层
Apache Arrow的功能设计思路有点类似于适配器模式,将不同系统的数据源进行统一适配。
a).不使用Arrow
- 每个系统都有自己的内部存储器格式
- 在序列化和反序列化上浪费了70-80%的计算量
- 在多个项目中实现的类似功能
b).使用Arrow
- 所有系统都使用相同的内存格式
- 没有跨系统通信的开销
- 项目可以共享功能
Ⅱ).列式存储
传统的内存数据格式是以每一行作为各个字段的分布,相同字段没有被集中在一起,造成了计算时的不必要浪费;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主要模块
- parquet-format:定义了所有格式规范,以及由 Thrift 序列化的元数据信息
- parquet-mr:实现读写 Parquet 文件的功能模块,与其他组件的适配工具,如Hadoop Input/Output Formats、Pig loaders 、Hive Serde 等
- parquet-cpp:用于读写Parquet文件的C ++库
- parquet-rs:用于读写Parquet文件的Rust 库
- parquet-compatibility:验证不同语言之间读写 Parquet 文件的兼容性测试
Ⅱ).数据存储格式
Parquet文件结构
- File:一个 Parquet 文件,包括数据和元数据
- Row group:数据在水平方向上按行拆分为的单元
- Column:一个行组中的每一列对应的保存在一个列块中
- Page:每一个列块划分为多个数据页,同一个列块的不同页可能使用不同的编码格式
Ⅲ).元数据
元数据包括如下3部分
- file metadata
- column (chunk) metadata
- page header metadata
四.Apache Calcite
Apache Calcite 是一款开源SQL解析工具, 可以将各种SQL语句解析成抽象语法术AST(Abstract Syntax Tree), 之后通过操作AST就可以把SQL中所要表达的算法与关系体现在具体代码之中
Ⅰ).Calcite 主要组件
- Catelog: *定义SQL语义相关的元数据与命名空间
- SQL parser: 主要是把SQL转化成AST
- SQL validator: 通过Catalog来校证AST
- Query optimizer: 将AST转化成物理执行计划、优化物理执行计划
- SQL generator: 反向将物理执行计划转化成SQL语句
Ⅱ).Calcite 主要功能
- SQL 解析
- SQL 校验
- 查询优化
- SQL 生成器
- 数据连接
五.Apache Drill
Apache Drill是用于大规模数据集的低延迟分布式SQL查询引擎,包括结构化和半结构化/嵌套数据
Ⅰ).Drill核心模块
- RPC端点: Drill公开了一个低开销的基于protobuf的RPC协议,以与客户端进行通信
- SQL解析器: Drill使用开源SQL解析器框架Calcite来解析传入的查询
- 存储插件界面: Drill充当多个数据源之上的查询层,存储插件为Drill提供以下信息
- a).数据源的的元数据
- b).Drill用于读取和写入数据源的接口
- c).数据的位置和一组优化规则,以帮助在特定数据源上高效,快速地执行Drill查询
Ⅱ).Drill查询
- 客户端或应用程序会以SQL语句的形式将查询发送到Drill集群中的Drillbit,Drill无主从概念
- 接受查询的Drill节点成为Foreman,Foreman驱动整个查询
- Foreman解析器解析SQL,并根据SQL运算符形成逻辑计划
- Foreman优化器使用各种类型的规则把操作符和函数重新排列为最佳计划后,将逻辑计划转换为执行查询的物理计划
- Foreman中的并行化程序将物理计划转换为多个片段,片段创建了一个多级执行树
- 查询根据执行树在数据源并行执行,并将结果发送回客户端或应用程序
Ⅲ).Drill特点
- 低延迟SQL查询
- 动态查询文件(如JSON,Parquet,AVRO和NoSQL)和HBase表中的自描述数据,无需Hive Metastore中的元数据定义
- 嵌套数据支持
- 与Apache Hive集成(对Hive表和视图的查询,对所有Hive文件格式和Hive UDF的支持)
- 使用标准JDBC / ODBC驱动程序进行BI / SQL工具集成
六.使用案例
a).hive数据分析
b).hdfs数据分析
c).本地Json文件数据分析
d).Elasticserch数据分析
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
初探云原生应用管理之:聊聊 Tekton 项目
【编者的话】“人间四月芳菲尽,山寺桃花始盛开。” 越来越多专门给 Kubernetes 做应用发布的工具开始缤纷呈现,帮助大家管理和发布不断增多的 Kubernetes 应用。在做技术选型的时候,我们需要给业务选择一个最好的工具、最稳的底座。那我们又该如何比较和衡量这些工具的呢?在这篇文章中阿里一线工程师给大家分享自己独特的体验。洗尽铅华,一起品味这“山寺桃花”。 背景 近年来,伴随着云原生社区(CNCF Community)的迅猛发展,越来越多的应用跑在了 Kubernetes 上。慢慢地,大家的关注点也逐渐从资源层转移到应用层。一方面,我们看到在有越来越多新的 Kubernetes Operators 出现,用来自动化应用的部署和运维。另一方面,随着各路大型云厂商入场,Kubernetes 服务以后就会像家里的水和电一样随心所欲可
- 下一篇
省钱之道 | 阿里云黑科技产品隐藏的十个上云最佳姿势
随着云计算浪潮的推进,技术架构云化已经成为大势所趋。特别是最近由CNCF推动的云原生概念,将符合云原生标准的各种开源技术方案推向了前所未有的高度。在这一波浪潮的推动下,越来越多的企业开始了自身的数字化征程,逐步将自己的IT基础设施往云上迁移。Web应用托管服务(Web+) 正是在这一波浪潮下应运而生的黑科技产品——以应用为中心,为应用编排所需的云资源,并将中间件团队支持近千家企业客户上云时遇到各类问题的解决办法,形成一套最佳实践沉淀到这个产品中呈现给大家。这篇文章,就将逐一向大家揭秘隐藏在这个产品背后的十个最佳实践。 产品体验地址:点击,永久免费 基础设施即代码(Infrastructure As Code) 基础设施即代码,简言之就是用代码或配置文件来声明应用系统使用的基础设施资源。云计算技术发展到现在,基础设施即服务(IaaS)能力
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2全家桶,快速入门学习开发网站教程