核心模块
下列流程图呈现的是 Drillbit 的各个组件:
以下是描述一个 Drillbit 关键组件的清单,如下所示:
RPC endpoint:Drill 提供了一个与客户端交互的,低消耗的基于 ProtoBuf 的 RPC 协议。此外,也提供了 C++,Java API 层用于与客户端进行交互。在提交查询之前,客户端可以与一个指定的 Drillbit 直接或者通过一个 ZooKeeper 集群去发现一个可用的 Drillbit 服务。建议客户端使用 ZooKeeper 去管理集群的复杂性,例如添加或移除节点。
SQL 解析器:Drill 使用了Calcite,这是一个开源的 SQL 解析框架,解析接收到的查询。该解析器的组件是语言无关性的,能够友好的表示逻辑查询计划。
存储插件接口:Drill 在数据源的顶层提供一个查询层。存储插件在 Drill 中使用一个抽象层来与数据源做交互。存储插件提供以下信息:
- 可用的元数据
- 用于读取和写入数据源的接口
- 数据的位置和优化规则,能够高效,快速的帮助指定的数据源完成查询。
在 Hadoop 上下文中,Drill 提供一个存储插件用于分布式文件和 HBase。当然, Drill 也集成了 Hive 的存储插件。
当用户在 Drill 中查询文件和 HBase时,如果存在元数据定义,它们可以直接去处理或者通过 Hive 去处理。Drill 与 Hive 集成的仅仅是元数据。它的任何请求都不会调用 Hive 的执行引擎。