联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
9.12 Linac 引擎
更新时间:11/28/2024, 3:27:28 AM

Inceptor 是一款创新型分布式数据库,旨在为用户提供超大规模的数据处理能力、高效的性能表现、稳定的运行环境以及极简的使用体验。广泛应用于 Teradata、Oracle、CDH 等产品的替换场景中,成为众多企业的首选解决方案。为进一步提升计算效率和性能稳定性,Inceptor 9.3.3 正式推出了基于 C++ 语言实现的高性能 Linac 计算引擎。

Linac 介绍

优势

Linac 引擎目前已经在多个用户生产中落地应用,实现了对 Impala、Oracle、Inceptor 业务的改造和上线,能实现数倍的性能提升。区别于 Inceptor 传统 JAVA 引擎,Linac 是基于 C++ 语言改写的高性能计算引擎,对比原 JAVA 引擎有如下优势:

  • 兼容适配:支持 Inceptor、Oracle、Teradata 三种语法兼容,提供 Inceptor、Oracle、Teradata、Impala 各引擎的 UDF兼容性。

  • 内存管理:Linac 引擎自通过灵活的内存管理方式,任务执行结束后能够迅速释放占用的内存资源,缓解多进程高负载集群的内存压力。

  • 性能领先:大幅度提升算子性能,针对存储引擎和数据存储格式进行改造,同时优化了执行计划、任务调度、算子识别等场景。保证了任务提交后不回退,以及性能稳定提升。

Linac 引擎已经实现常见算子的本地化,且实现了算子的性能提升,其中性能提升最大的如下:

  • Group by:性能提升接近10倍,聚合率越高(Pre-Group by 效果好),性能提升越大

  • Filter( UDF):在 SQL 中使用了较多 UDF 进行字段的处理和聚合时,性能有超过10倍的提升

  • Join:对于所有 Join 类型,性能都有很大幅度的提升,甚至可以依靠 Linac 强行计算出数据倾斜的 Cross Join。

对于一些大数据量的 Order By/Sort By/窗口函数(Rand、row_number)等,由于对内存的开销比较大,Linac 在计算时仍会有部分数据落盘以保证稳定性,因此性能提升幅度与数据量及内存配置相关。在使用时,我们一般建议保留足够的堆内内存空间,可以适当地调小堆外的内存。

执行模式

Linac 引擎支持 Cluster、Localfast 和 OLAP 模式,不支持 Local 模式。对应在 DBA Service 中依次显示为 linac-cluster、linac-localfast、linac-olap 三种模式。

使用 Linac 模式时,若为单机本地读场景,建议使用 Localfast 模式,此时您需要同时设置以下参数:

set use.linac=true;
set ngmr.windrunner.enabled=true;
set ngmr.local.fast.enabled=true;
复制

SQL 执行模式的更多信息请参考章节:SQL 执行模式

使用 Linac

开启 Linac

Linac 引擎作为 Inceptor 高性能计算引擎,支持通过参数控制功能的开启

当启动 Linac 引擎总开关 use.linac =true 后,为了保证计算任务能够正常使用 Linac 引擎,且任务逻辑能够自洽,Inceptor 后台会自动配置以下参数:

set hive.merge.nway.joins = false;
set inceptor.filterjoin.enabled = false;
set windrunner.aggregate.check = false;
set windrunner.nlssort.check = false;
set ngmr.windrunner.nonquery.enabled = true;
set ngmr.windrunner.session.subquery.enabled = true;
set inceptor.winfunc.collapse.optimize = false;
set inceptor.winfunc.transform.enabled = false;
set inceptor.withas.material.fileformat = holodesk_performance;
复制
限制条件

Linac 计算引擎针对 Holodesk 列式存储进行计算,可以兼容不同存储格式和 SQL 语法,但仍然存在以下限制边界,当开启 Linac 引擎但遇到不支持的场景时,则会自动回退至 Windrunner 引擎进行执行计算。

  • 存储格式

    Linac 引擎兼容 Holodesk 列存格式,目前仅支持 Holodesk 性能表Holodesk 宽表(可支持 1000+ 列的高性能查询),暂不支持其他存储格式,会自动回退至 Windrunner 引擎。

  • SQL 查询类型

    对于以上支持的存储类型,Linac 引擎执行 SQL 操作时 Linac 的支持情况如下:

    • 支持 DML 中的插入、更新、删除数据操作 INSERT/UPDATE/DELETE。但不支持 MERGE INTO,会自动回退至 Windrunnenr 引擎。

      支持使用 INSERT INTO SELECT 的方式插入数据至非分区分桶 Holodesk 表,和指定分区的单值分区非分桶表。

    • 支持 DQL 查询操作 SELECT

    DCL 操作,以及 DDL 操作中的 创建、删除、清空表操作 CREATE/DROP/TRUNCATE TABLE、修改表或字段名称操作 ALTER TABLE/COLUMN RENAME,不调用计算引擎。

功能参数

表 14. Linac 优化参数
参数名称 默认值 参数说明

use.linac

false

Linac 引擎总开关,设置为 true 后即使用 Linac 引擎,且会开启一系列 Linac 优化参数,具体请参考 Linac 引擎自动优化参数

quark.linac.fail.no.retry

false

控制 Linac 引擎总的任务重试机制,开启后对性能有一定影响

inceptor.filterjoin.enabled

true

控制是否开启 FilterJoin 优化。FilterJoin 是基于 MapJoin 的优化,适用于语句中有多个级联 MapJoin 的场景,加快这类语句的执行速度。

hive.merge.nway.joins

true

控制是否将相邻的 JOIN 连接操作合并为一个多路连接(n-way JOIN)。

inceptor.withas.material.fileformat

AUTO

设置物化 with-as 表的默认文件格式。可选项为 auto, orc, holodesk, holodesk_performance

表 15. 业务测试场景参数
参数名称 默认值 参数说明

quark.ignore.linac.error

true

默认编译时 Linac 不支持的任务会自动回退至 Java 引擎,设置成 false 后,则会产生会报错,适合业务兼容性验证测试时使用

quark.qtrace.enabled

false

开启后,会在 Quark Server 日志目录生成 Qtrace 日志文件,可以帮助分析每个算子和计算节点的性能开销

inceptor.log.level

warn

Inceptor 9.3.3 版本的默认日志级别已经修改为 warn,如果需要查看更细节的日子信息,可将参数设置为 info,如果测试高并发性能,则将参数设置为 error

表 16. 兼容性参数
参数名称 默认值 参数说明

character.literal.as.string

false

Inceptor 5.x 之后,字符串常量的默认类型为 CHAR(n),此时 '' 等于 NULL。开启此参数后,字符串常量默认类型为 STRING。

inceptor.udf.compatible.with.oracle

false

开启此参数后,UDF 函数行为将与 Oracle 兼容

plsql.server.dialect

oracle

支持 PLSQL 的方言,当开启 Linac 模式时不支持 db2 方言。

server.dialect.parser.oracle

false

设置是否在编译阶段使用 Oracle 方言,用于多方言存储保证解析行为的统一性

linac.udf.compatible.mode

quark

设置 Linac 模式下,UDF 函数的兼容模式,可选项有 quark,oracle,impala,td