架构介绍
Apache Drill 是一个低延迟的大型数据集的分布式查询引擎,包括结构化和半结构化数据/嵌套。其灵感来自于谷歌的 Dremel,Drill 的设计规模为上千台节点并且能与 BI 或分析环境互动查询。
在大型数据集上,Drill 还可以用于短,交互式的临时查询。Drill 能够用于嵌套查询,像 JSON 格式,Parquet 格式以及动态的执行查询。Drill 不需要一个集中的元数据仓库。
高级架构
Drill包括分布式执行环境,目的用于大规模数据处理。在 Apache Drill 的核心服务是 “Drillbit”,她负责接受来自客户端的请求,处理请求,并返回结果给客户端。
Drillbit 服务能够安装在并运行在 Hadoop 集群上。当 Drillbit 运行在集群的每个数据节点上时,能够最大化去执行查询而不需要网络或是节点之间移动数据。Drill 使用 ZooKeeper 来维护集群的健康状态。
虽然 Drill 工作于 Hadoop 集群环境下,但是 Drill 不依赖 Hadoop,并且可以运行在任何分布式集群环境下。唯一的先决条件就是需要 ZooKeeper。
Drill 客户端
你可以通过以下接口来访问 Drill:
- Drill Shell
- Drill Web Console
- ODBC/JDBC
- C++ API
动态发现 Schema
在开始执行查询处理的时候,Drill 不需要为规范数据的 Schema 和类型。Drill 开始处理数据是在记录批处理的时候,在处理过程中去发现 Schema。Drill 利用动态查询的时间,去自己描述数据的格式,例如 Parquet,JSON,AVRO 和 NOSQL 数据库,将它们指定为数据本身的格式。因为 Schema 可以在查询过程中变化,所以可以很好的去拥抱 Schema 的变化,能够重新调整来应对 Schema 的变化。
灵活的数据模型
Drill 允许数据属性嵌套,并提供了直观的扩展,而且很容易去操作它们。从架构的角度来看,Drill 提供了灵活的柱状数据模型,她能够呈现复杂的,高动态的和不断变化的数据模型。关系型数据在 Drill 中能够被转化为特殊的或是复杂/半结构化的数据。
无集中式的元数据
Drill 没有集中式的元数据要求。你不需要创建和管理表和视图在元数据仓库中,或是以来数据库管理员组这样的功能。Drill 的元数据来源于对应的存储插件。存储插件提供了一系列的元数据,如 Hive 的元数据,HBase 部分的元数据,或是非中心化的元数据文件。去集中化的元数据意味着 Drill 不依赖单个 Hive 仓库。你可以去查询多个 Hive 仓库,将 HBase 表或是分布式文件系统当中,将数据结果进行整合。你也可以在 Drill 中使用 SQL 的 DDL 语句创建元数据,使她看上去更像传统的数据库。Drill 的元数据可以通过 ANSI 标准 INFORMATION_SCHEMA 数据库。
可扩展
Drill 提供了一个可扩展的体系结构,包括存储插件,查询,查询优化/执行,以及客户端接口层。你能够按需自定义一个层,也可以将该层根据使用情况扩展的更加广泛。Drill 使用路径扫描来查找和加载插件,并添加额外的存储插件,功能,和最小的配置操作。