更新时间:2022-12-14 GMT+08:00

多并发JDBC客户端连接JDBCServer

操作场景

JDBCServer支持多用户多并发接入,但当并发任务数量较高的时候,默认的JDBCServer配置将无法支持,因此需要进行优化来支持该场景。

操作步骤

  1. 设置JDBCServer的公平调度策略。
    Spark默认使用FIFO(First In First Out)的调度策略,但对于多并发的场景,使用FIFO策略容易导致短任务执行失败。因此在多并发的场景下,需要使用公平调度策略,防止任务执行失败。
    1. 在Spark中设置公平调度,具体请参考http://spark.apache.org/docs/3.1.1/job-scheduling.html#scheduling-within-an-application
    2. 在JDBC客户端中设置公平调度。
      1. 在BeeLine命令行客户端或者JDBC自定义代码中,执行以下语句,

        其中PoolName是公平调度的某一个调度池。

        SET spark.sql.thriftserver.scheduler.pool=PoolName;
      2. 执行相应的SQL命令,Spark任务将会在上面的调度池中运行。
  2. 设置BroadCastHashJoin的超时时间。
    BroadCastHashJoin有超时参数,一旦超过预设的时间,该查询任务直接失败,在多并发场景下,由于计算任务抢占资源,可能会导致BroadCastHashJoin的Spark任务无法执行,导致超时出现。因此需要在JDBCServer的“spark-defaults.conf”配置文件中调整超时时间。
    表1 参数描述

    参数

    描述

    默认值

    spark.sql.broadcastTimeout

    BroadcastHashJoin中广播表的超时时间,当任务并发数较高的时候,可以调高该参数值。

    -1(数值类型,实际为五分钟)