set use.linac=true; set ngmr.windrunner.enabled=true; set ngmr.local.fast.enabled=true;
复制
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 模式,此时您需要同时设置以下参数:
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,不调用计算引擎。 -
功能参数
参数名称 | 默认值 | 参数说明 |
---|---|---|
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 |
参数名称 | 默认值 | 参数说明 |
---|---|---|
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 |
参数名称 | 默认值 | 参数说明 |
---|---|---|
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 |