一、背景:
大数据平台将HUE作为数据查询、数据分析的对外窗口,其可提供hiveSql,SparkSql作为分析工具。HUE连接SparkSQL主要通过在集群上启动一个jdbc服务(SparkThrfitServer)。SparkThrfitServer默认只有FIFO模式,即先进先出。
在生产环境不同用户使用HUE,大量客户下,FIFO模式下会出现任务pending的情况,这对某些简单SQL是不公平的,例如,我就查“select * from table limit 1” pengding了几分钟,这在客户体验上来说太差了。
类比Hadoop的多用户资源分配:FAIR(公平调度器),Spark为了解决多用户的这种问题,也提供了FAIR的调度策略。
二、配置
主要配置只需要更改两个配置文件
1)$SPARK_HOME/conf/spark-defaults.conf (以SparkThrfitServer实际加载的配置文件为准)
spark.scheduler.mode FAIR
spark.scheduler.allocation.file /app/spark/conf/fairscheduler.xml
2)$SPARK_HOME/conf/fairscheduler.xml
相关解释如下:
schedulingMode 指定为FAIR;
weight 相当于资源池权重,默认为1,多用户配置,即资源占比权重;
minShare 给每个调度池指定一个最小的shares值(也就是CPU的核数目)。公平调度器通过权重重新分配资源之前总是试图满足所有活动调度池的最小share。在没有给定一个高优先级的其他集群中,minShare属性是另外的一种方式来确保调度池能够迅速的获得一定数量的资源(例如10核CPU),默认情况下,每个调度池的minShare值都为0
在SparkTriftServer上,我只配置了一个队列,主要是因为,查询时候,还得指定队列,太麻烦了,当然,并发量大的查询,可以单独设置一个优先队列。
三、实现目标
避免资源几种,公平调度,包括小资源sql,提升客户体验