Spark ThriftServer Sql 服务配置
一. 配置调度器
1. 配置调度器
$SPARK_HOME/conf/fairscheduler.xml
<allocations>
<!-- 线程池 名称 -->
<pool name="default">
<!-- 调度模式 FIFO 和 FAIR -->
<schedulingMode>FIFO</schedulingMode>
<!-- 权重: 控制线程池 比 其他线程池的优先级
默认情况下,池的权重均为 1.
例如,如果为特定池提供权重 2,则其资源将比其他活动池多2倍。设置高权重(例如1000)也可以在池之间实现 优先级 - 实质上,只要有活动作业,weight-1000池就会始终首先启动任务
-->
<weight>1</weight>
<!-- 最小保留核数资源
除了总体权重之外,每个池都可以获得管理员希望拥有的最小份额(作为许多CPU核心)。公平调度程序始终尝试满足所有活动池的最小份额,然后根据权重重新分配额外资源。minShare因此,该属性可以是另一种确保池可以始终快速达到一定数量的资源(例如10个核心)而不会为群集的其余部分赋予高优先级的方法。默认情况下,每个池 minShare 为0
-->
<minShare>2</minShare>
</pool>
<!-- 自定义 -->
<pool name="real_time">
<schedulingMode>FAIR</schedulingMode>
<weight>2</weight>
<minShare>4</minShare>
</pool>
</allocations>
2. JDBCServer 并发场景
1. spark-defaults.conf 配置
# 设置调度模式
spark.scheduler.mode = FAIR
# 设置使用的线程池
spark.scheduler.pool = real_time
2. 代码中配置(如果要在代码中配置线程池)
new SparkConf().set("spark.scheduler.mode", "FAIR")
new SparkContext(conf).setLocalProperty("spark.scheduler.pool", "real_time")
3. spark beeline 客户端
-- Spark Sql 指定线程池跑, 在 beeline 启动后手工设置, 若不设置则提交到默认线程池 default
SET spark.sql.thriftserver.scheduler.pool=real_time;
# BroadcastHashJoin 的最大的线程池个数,同一时间被广播的表的个数应该小于该参数值
# BroadCastHashJoin 使用多线程方式广播表,在多并发场景下,会有多个表同时在多线程中,一旦广播表的个数大于线程池个数,任务会出错,
# 因此需要在JDBCServer的 spark-defaults.conf 配置文件中或在命令行中执行 set spark.sql.broadcastHashJoin.maxThreadNum=value,调整线程池个数。
SET spark.sql.broadcastHashJoin.maxThreadNum = 128 (默认)
# BroadcastHashJoin 中广播表的超时时间,当任务并发数较高的时候,可以调高该参数值,或者直接配置为负数,负数为无穷大的超时时间。
# BroadCastHashJoin 有超时参数,一旦超过预设的时间,该查询任务直接失败,在多并发场景下,由于计算任务抢占资源,可能会导致 BroadCastHashJoin的Spark 任务无法执行,导致超时出现
# 因此需要在 JDBCServer 的 spark-defaults.conf 配置文件中调整超时时间
SET spark.sql.broadcastTimeout = 300(数值类型,实际为五分钟)
# 是否使用串行方式执行 BroadcastHashJoin。串行化 BroadcastHashJoin 会降低集群资源使用率,但对于高并发的重任务,可以解决超时的困扰
# 当并发任务非常重(例如全部完成时间超过2个小时),需要将 BroadcastHashJoin 设置为串行化,这样就能去除超时时间对并发任务的影响。
# 但是串行化相对于并行化,会降低集群资源的使用率,因此在轻量级任务并发时,不要开启该配置项
SET spark.sql.bigdata.useSerialBroadcastHashJoin = false
以上配置若添加添加到默认选项则放到 --conf 中 (待测试)
$SPARK_HOME/sbin/start-thriftserver.sh \
--master yarn \
--deploy-mode client \
--queue root.default \
--name test \
--driver-cores 4 \
--driver-memory 8192M \
--executor-cores 6 \
--executor-memory 12288M \
--conf spark.dynamicAllocation.enabled=true \