Why openLooKeng?

跨数据中心数据分析

统一的SQL接口访问跨数据中心、跨云的数据源

极简的跨源数据分析体验

统一的SQL接口访问多种数据源

易扩展数据源

可以通过增加Connector来增加数据源

采集变连接、数据零搬迁

openLooKeng社区活力

贡献者

用户

社区会员

博客

  • OmniRuntime:为下一代分析提供动力

    gravitys169 | August 6, 2021

    在数据规模和多样性爆炸式增长的过程中,现代分析引擎在为企业提供低延迟和低成本的实时分析方面发挥着至关重要的作用。此外,当今的应用程序希望这些分析系统提供高并发查询和高吞吐量,同时支持对结构化和非结构化数据的查询。 为了满足这些要求,现代分析引擎和数据库通常依赖于将查询计划编译为本机代码。手动编写算子的方式,如filter,join和group by,通常包含处理不同参数和数据类型所需的控制流。本机代码生成的目的是通过消除不必要的代码并将其专门用于底层平台,从而最大限度地减少指令数量。 这些技术被广泛用于许多分析引擎,如Spark、Flink,以优化类似的功能。然而,当前的解决方案在功能开发的易用性和异构硬件的支持方面往往存在局限性。我们设计了通用数据分析加速器OmniRuntime,以解决这一限制,以进一步改进当下流行的分析引擎,如openLooKeng、Spark和Hive。 为了提供这些功能,OmniRuntime提供了五个核心组件,如下图所示: ​ 图1. OmniRuntime核心组件示意图 OmniJit:一个透明、易于使用的即时编译框架,不需要对任何低级代码生成框架(如LLVM或Janino)的了解。 OmniVec:一种列式内存格式,提供高性能内存访问、全内存生命周期管理和内置SIMD操作。它还支持所有常用的数据类型,如int、double、varchar和decimal等。 OmniOperator:native 算子库,充分利用当今异构计算环境中可用硬件的计算能力。当与OmniJit结合使用时,OmniOperators能够动态地适应工作负载、参数和数据配置文件,以实现最佳性能。 OmniCache:一种关系型缓存,性能优于传统的面向块的缓存,命中率极高。 OmniData:快速数据访问和协作层,提供数据层和计算层之间的双向通信和数据传输。 在下一节中,我们将提供每个组件的说明。 OmniJIT OmniJit组件是Omniruntime的核心,对分析工作负载的整体性能提高做出了重大贡献。 OmniJit旨在为普通开发人员提供即时编译支持。它提供了一个易于使用的高级语言框架,如C/C++。OmniJit自动识别运算符中最关键的性能代码部分并优化它们。生成的运算符是专门使用查询、运行时和硬件特定的计算机代码的。OmniJit依赖于运行时信息来基于查询上下文应用最佳优化。这可以是数据集基数、列大小、数据类型、可用硬件(SIMD、加速器等)以及许多其他信息,以产生最佳运算符优化。 通过使用OmniJit,分析引擎开发人员将不再需要与LLVM或Janino等系统提供的复杂低级API交互,以提取最佳性能。 ​ 图2. OmniJit分支裁剪和循环展开优化 OmniOperator OmniOperator表示处理特定查询数据的计算逻辑代码。SQL查询可以由许多不同的算子组成,OmniJit负责动态优化它们。OmniJit优化了C++算子,以生成具有最小执行指令计数的可执行文件。 算子接口的结构与火山模型相似,因为它遵循类似的接口生命周期:实例化、AddInput、GetOuput和Close。所有OmniOperators都提供相同的标准接口,实现对分析引擎不透明。 通过利用标准接口,我们可以轻松地将这些运算符暴露给上层计算引擎。此外,它还帮助我们提供一致的开发生命周期体验,同时允许跨各种分析平台的可移植性。开发人员可以让OmniJit使用自动化方法优化运算符。或者,他可以指导优化策略,如参数固定、循环开发和代码中特定核心方法的矢量化自适应执行。 与本机平台运算符相比,生成的OmniOperators执行的指令计数更少,资源消耗更低,开发开销也更低。下图显示了Java Analytics平台中的整体OmniOperator生命周期。由于大多数分析引擎都是用Java编码的,我们还提供了一个JNI接口来促进集成。 ​ 图3. OmniOperator引擎与Native Operator的交互 OmniVector OmniVector是OmniRuntime的另一个组件。OmniVector定义了标准的列式内存格式。OmniVector设计为可移植的、独立于列的内存数据格式。OmniVector支持丰富的数据类型系统,旨在满足各种分析数据系统的需求。这种内存数据格式为数据密集型应用程序提供高性能和高可扩展性。 OmniVector的核心代码是在C++中实现的,带有高级语言绑定,以实现交叉兼容性。它提供了一个异步接口,允许读取和写入操作由各种组件并行进行。这允许我们在写入或持久化操作被继续时公开OmniVector的内容。 下图显示了OmniVec的整体架构。 ​ 图4. OmniVec Binging和Native架构 基于作用域的全生命周期管理的OmniVector不仅消除了内存泄漏的可能性,而且提供了高性能的内存访问。每个OmniVector在其生命周期中都会经历几个步骤。每个步骤都由OmniVctor操作触发: 作用域创建:为了进行有效的内存管理并避免页面故障开销,向量在特定的执行作用域内分配。这允许高效的内存池,从而最大限度地减少内存管理开销。 OmniVector分配:通过使用上面创建的范围,开发人员现在可以分配新的向量。 OmniVector 修改:API支持Set和Put操作。前者在特定对应的索引位置操作单个值。后者是批处理put方法,在该方法中,数组插入到指定的开始位置。 OmniVector读取:与修改一样,我们支持单值检索或批处理操作。 OmniVector释放:一旦不使用向量,就可以将其释放到作用域内存池 作用域释放:释放所有向量后,我们可以释放作用域和关联的内存池。

  • openLooKeng 的AI能力实践 : 学生开发者在WAIC黑客马拉松

    余扬、丁海杰 | July 24, 2021

    关于WAIC 黑客马拉松 世界人工智能大会(WAIC) 是经国务院批准,国家发展改革委、科技部、工业和信息化部、国家互联网信息办公室、中国科学院、中国工程院等部委与上海市政府共同举办的顶级人工智能会议。而 黑客马拉松是 WAIC 期间唯一的一场黑客松,由世界人工智能大会组委会办公室作为指导单位,机器之心,MindSpore 开源社区,Waston Build 创新中心,六七八九集团主办,此次黑客松设计多道赛题,聚焦 AI 技术与应用热点问题,吸引了数十个团队参加。 7月10日,经过一天的开发挑战,「万有引力」团队获得了「openLooKeng 机器学习库支持算法扩展挑战赛」的冠军。据了解,该团队虽然仅有2人,但开发思路与逻辑非常清晰,配合上也十分默契。本期,小助手邀请到该团队队长余杨,来跟我们聊聊此次的参赛经历与体会。 ▲ 大赛颁奖现场 团队介绍 团队成员: 余扬 重庆交通大学计算机科学专业,研二学生 研究方向: 基于深度学习的大规模图像检索、技术栈主要是后端开发涉及到的,擅长编程语言为Java和python。 团队成员: 丁海杰 南京邮电大学计算机科学专业,研二学生 研究方向: 基于深度学习的自然语言生成,擅长编程语言为Python和Java。 我们是2021 WAIC黑客松的“万有引力”团队,很荣幸在openLooKeng赛道的“openLooKeng 机器学习库支持算法扩展”赛题获得冠军,以下是我们团队对本次比赛的一些分享,希望对其他小伙伴有帮助。 ▲ 左:导师刘松灵、队员余扬、丁海杰 赛题:openLooKeng机器学习库支持算法扩展挑战 一、赛题分析 题目为:在这道赛题中,挑战者需要在 openLooKeng 现有已经支持的机器学习算法上,扩展支持常见常用的两个聚类算法——DBSCAN 和 KMeans 以及两个个分类算法——KNN 和朴素贝叶斯。 题目要求扩展的这两类算法属于机器学习里面比较经典的算法了,算法原理还是蛮简单的,实现的时候需要考虑一下如何设计一个数据结构来组织和保存训练之后的模型即可。 而我们觉得主要难点还是如何将实现好的算法扩展到openLooKeng里面,即如何在sql语句里面即可调用对应的算法进行模型训练与预测。 二、实现思路 由于openLooKeng支持SPI扩展,于是我们想把每个算法封装为一个自定义函数插件,然后提供给openLooKeng即可。每个算法需要训练和预测两个模块,于是一个聚合函数用于训练,一个标量函数用于加载模型然后预测; 训练完成之后将模型序列化,然后在预测的时候将序列化结果输入给预测函数,执行反序列化得到对应的模型,然后进行预测; 例如下表鸢尾花数据集部分数据: lk> select * from mysql.gaoxi.hackday1 limit 100; id | dim1 | dim2 | dim3 | dim4 | label | label_name ----+------+------+------+------+-------+------------ 1 | 5.

更多...

新闻

  • openLooKeng v1.4.0 正式发布

    openLooKeng | October 15, 2021

    金秋10月, openLooKeng 新版本 v1.4.0 正式发布。基于社区用户和开发者的体验和建议,新版本在原基础上进行了一些优化,以提升引擎性能。

  • openLooKeng v1.3.0 正式发布

    openLooKeng | June 30, 2021

    2021年6月底,openLooKeng将迎来新版本 v1.3.0。基于社区用户和开发者的体验和建议,openLooKeng 新版本 v1.3.0 在原基础上进行特性优化,并提供新功能,以提升引擎性能。

更多...