Inceptor 查询模式 Local/Cluster 介绍

  其他常见问题
内容纲要

概要描述


Inceptor Server 有两种执行模式:Local 和 Cluster。在编译 SQL 时系统会根据当前模式生成相应的执行计划。同时,不同的业务场景所适用的业务场景也不同。

详细说明


  • Cluster 模式

    Cluster 模式是 Inceptor Server 的默认执行模式,可以通过 SQL set ngmr.exec.mode; 查看;
    适用于批处理业务场景。它通过 Inceptor Server 将 SQL 转换成 InceptorJob 分发到各个节点的 Executor,并由 Task 具体处理,各个 Task 将结果汇总写入 HDFS 的结果目录,由 FetchTask 显示结果;
    如果执行的是 CTAS(CREATE TABLE…AS…)则将结果文件直接 Move 到对应表的数据存储目录下。

  • Local 模式

    Local 模式适用于一些低延时、高并发、参与计算数据量少的场景。
    Local 模式本身要求数据源检索有较快的速度,所以Local模式的优势是可以较快的返回结果,满足低延时需求。

    目前适合 Local 模式的场景有以下四种:

    1. 基于 Hyperbase 索引的精确查询或简单计算
    2. 通过 LookupJoin 实现 JOIN 的场景,适用于大表为 Hyperbase 表的情况。
    3. HBaseTransactionStorageHandler 的 CRUD 操作。
    4. ORC 事务表的 INSERT 或者 BatchInsert。

Local 模式为什么快?


如 Local 模式描述所说,是依赖数据源的较快的检索速度;因为 Local 模式将 SQL 的操作直接应用到数据源的(包含了谓词下推),所以 Local 模式的快慢主要取决于数据源的快慢;
所以 Local 模式多用在 hyperbase 、search 表等;

常见参数

  • ngmr.exec.mode

    根据自己的业务场景来选择合适的执行模式,用户可以通过 SQL SET ngmr.exec.mode = local; 或者 SET ngmr.exec.mode = cluster; 来切换执行模式;

  • ngmr.local.job.record.timeout.ms

    Local 模式下 SQL 返回的超时参数,当 Local 模式的任务时间超过这个值,会被直接 kill 掉;因为 Local 的适用场景为低延时,时间太久不符合该模式的设计;

  • ngmr.dd.local.mode.auto

    查询字典表的时候默认是用 Local 模式,默认是 true 开启的,当设置为 false 时 SET ngmr.dd.local.mode.auto = false; 查询字典表不再使用 Local 模式;

常见报错

常见报错类型主要分两类:

  1. 某些表类型的检索不适用 local 模式,会直接在语法解析的时候报错,此时只能使用 cluster;
  2. local 模式有一些限制条件,当不满足限制条件时,会在 sql 执行阶段报错;
/* Local 模式下当 sql 扫描行数超过 500W 时会强制报错,无参数控制
Caused by: org.apache.spark.SparkException: Local mode only can scan 5000000 records, current engine excceed this limitation.

/* Local 模式下当 sql 执行时间超过了 ngmr.local.job.record.timeout.ms 设置值,这会强制 kill task,抛如下异常: 
/* 可以通过参数修改,但是不建议修改,不符合 Local 模式设计
Caused by: org.apache.spark.TaskKilledException

/* 当使用 Local 模式查询不满足条件的表类型(比如 ORC 事务表)的时候,直接抛如下异常:
/* 如果没有显示的指定执行模式为 Local 时仍然报错这个,可以通过  SET ngmr.dd.local.mode.auto = false; 规避
Caused by: java.lang.Exception: Cannot enable local mode, please "set ngmr.exec.mode=cluster" to close it.

Caused by: java.io.IOException: The local job task for this iterator is cancelled(killed).

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。