初次接触OpenLookeng
openLooKeng是华为的一款性能强大的引擎,基于业界著名的开源SQL引擎Presto来提供交互式查询分析基础能力, openLooKeng用于支持数据探索、即席查询和批处理,具有100+毫秒至分钟级的近实时时延,而无需移动数据。openLooKeng还支持层次化部署,使地理上远程的openLooKeng集群能够参与相同的查询。利用其跨区域查询计划优化能力,涉及远程数据的查询可以达到接近“本地”的性能[1]。
重要概念:
- 连接器
openLooKeng中的连接器,用于访问不同数据源的数据,不同的数据库对应于不同的Connector。openLooKeng提供的连接器几乎支持市场上各个数据源:HBase、MySQL、SQL Server、CarbonData、Hive等等。
- SPI、presto-spi
SPI是JDK内置的服务提供/发现机制,它通过在ClassPath路径下的META-INF/services/目录中定义的文件,自动加载文件里所定义的类。
presto-spi是OpenLookeng的其中一个模块,定义了很多对外暴露的SPI接口。我们可以实现对应的接口,从而实现连接器、类型、函数、系统访问控制等的功能。
通过Maven导入依赖:
<dependency>
<groupId> io.prestosql </groupId>
<artifactId> presto-spi </artifactId>
<version>1.10.19</version>
<scope> provided </scope>
</dependency>
如果我们想做create、insert、drop表的权限校验,只需要实现presto-spi中的ConnectorAccessControl接口即可。
- openLooKeng REST API
openLooKeng使用REST进行openLooKeng安装中的所有通信。这也意味着,我们可以直接把SQL语句作为parameter,发送http请求给openLooKeng引擎,然后根据http请求response来得到要查询的结果。
节点资源 |
GET /v1/node |
查询资源 |
GET /v1/query GET /v1/query/{queryId} |
阶段资源 |
GET /v1/stage DELETE /v1/stage/{stageId} |
语句资源 |
POST /v1/statement |
任务资源 |
GET /v1/task |
- 协调节点
负责解析语句、规划查询和管理openLooKeng工作节点的服务器,也是客户端通过REST API连接的节点,提交SQL语句执行的节点
- 工作节点
负责执行任务和处理数据。工作节点从连接器获取数据,并相互交换中间数据。协调节点负责从工作节点获取结果,并将最终结果返回给客户端
SQL语法支持:
openLooKeng支持的SQL语法具体可以参考官网,需要注意的,openLooKeng SQL多了很多 Spark SQL不支持的SQL语法,比如SELECT中的offset、FETCH FIRST、TABLESAMPLE BERNOULLI等等。openLooKeng的SQL解析是在presto-parser中执行的。
通过Maven导入依赖:
<dependency>
<groupId> io.prestosql </groupId>
<artifactId> presto-parser </artifactId>
<version>1.10.19</version>
<scope> provided </scope>
</dependency>
io.prestosql.sql.parser中包含了解析SQL的工具,其中SqlParser. createStatement可以将sql解析成Statement,而openLooKeng支持的SQL语法又继承了Statement。
总结:
openLooKeng是基于presto来提供交互式查询分析基础能力的,想要更加的了解openLooKeng,建议可以从presto-spi、presto-parser、presto-plugin、presto-client等源码来了解。
参考文档:
- [1] openLooKeng官网: https://openlookeng.io/zh-cn/docs/docs/overview.html
- [2] hetu源码:https://github.com/openlookeng/hetu-core
- 点赞
- 收藏
- 关注作者
评论(0)