Spark ThriftServer Sql 服务配置

一. 配置调度器

1. 配置调度器

  1. $SPARK_HOME/conf/fairscheduler.xml
  2. <allocations>
  3. <!-- 线程池 名称 -->
  4. <pool name="default">
  5. <!-- 调度模式 FIFO 和 FAIR -->
  6. <schedulingMode>FIFO</schedulingMode>
  7. <!-- 权重: 控制线程池 比 其他线程池的优先级
  8. 默认情况下,池的权重均为 1.
  9. 例如,如果为特定池提供权重 2,则其资源将比其他活动池多2倍。设置高权重(例如1000)也可以在池之间实现 优先级 - 实质上,只要有活动作业,weight-1000池就会始终首先启动任务
  10. -->
  11. <weight>1</weight>
  12. <!-- 最小保留核数资源
  13. 除了总体权重之外,每个池都可以获得管理员希望拥有的最小份额(作为许多CPU核心)。公平调度程序始终尝试满足所有活动池的最小份额,然后根据权重重新分配额外资源。minShare因此,该属性可以是另一种确保池可以始终快速达到一定数量的资源(例如10个核心)而不会为群集的其余部分赋予高优先级的方法。默认情况下,每个池 minShare 为0
  14. -->
  15. <minShare>2</minShare>
  16. </pool>
  17. <!-- 自定义 -->
  18. <pool name="real_time">
  19. <schedulingMode>FAIR</schedulingMode>
  20. <weight>2</weight>
  21. <minShare>4</minShare>
  22. </pool>
  23. </allocations>

2. JDBCServer 并发场景

  1. 1. spark-defaults.conf 配置
  2. # 设置调度模式
  3. spark.scheduler.mode = FAIR
  4. # 设置使用的线程池
  5. spark.scheduler.pool = real_time
  6. 2. 代码中配置(如果要在代码中配置线程池)
  7. new SparkConf().set("spark.scheduler.mode", "FAIR")
  8. new SparkContext(conf).setLocalProperty("spark.scheduler.pool", "real_time")
  9. 3. spark beeline 客户端
  10. -- Spark Sql 指定线程池跑, beeline 启动后手工设置, 若不设置则提交到默认线程池 default
  11. SET spark.sql.thriftserver.scheduler.pool=real_time;
  12. # BroadcastHashJoin 的最大的线程池个数,同一时间被广播的表的个数应该小于该参数值
  13. # BroadCastHashJoin 使用多线程方式广播表,在多并发场景下,会有多个表同时在多线程中,一旦广播表的个数大于线程池个数,任务会出错,
  14. # 因此需要在JDBCServer的 spark-defaults.conf 配置文件中或在命令行中执行 set spark.sql.broadcastHashJoin.maxThreadNum=value,调整线程池个数。
  15. SET spark.sql.broadcastHashJoin.maxThreadNum = 128 (默认)
  16. # BroadcastHashJoin 中广播表的超时时间,当任务并发数较高的时候,可以调高该参数值,或者直接配置为负数,负数为无穷大的超时时间。
  17. # BroadCastHashJoin 有超时参数,一旦超过预设的时间,该查询任务直接失败,在多并发场景下,由于计算任务抢占资源,可能会导致 BroadCastHashJoin的Spark 任务无法执行,导致超时出现
  18. # 因此需要在 JDBCServer 的 spark-defaults.conf 配置文件中调整超时时间
  19. SET spark.sql.broadcastTimeout = 300(数值类型,实际为五分钟)
  20. # 是否使用串行方式执行 BroadcastHashJoin。串行化 BroadcastHashJoin 会降低集群资源使用率,但对于高并发的重任务,可以解决超时的困扰
  21. # 当并发任务非常重(例如全部完成时间超过2个小时),需要将 BroadcastHashJoin 设置为串行化,这样就能去除超时时间对并发任务的影响。
  22. # 但是串行化相对于并行化,会降低集群资源的使用率,因此在轻量级任务并发时,不要开启该配置项
  23. SET spark.sql.bigdata.useSerialBroadcastHashJoin = false
  24. 以上配置若添加添加到默认选项则放到 --conf (待测试)
  25. $SPARK_HOME/sbin/start-thriftserver.sh \
  26. --master yarn \
  27. --deploy-mode client \
  28. --queue root.default \
  29. --name test \
  30. --driver-cores 4 \
  31. --driver-memory 8192M \
  32. --executor-cores 6 \
  33. --executor-memory 12288M \
  34. --conf spark.dynamicAllocation.enabled=true \