1.前言
SparkThriftServer,简称STS,作为SparkSQL的JDBC/ODBC服务,启动STS服务结束后,您可以使用代码程序JDBC/ODBC的接口提交Spark SQL。
STS对标的是Hive的HiveServer2.代码内部实现也有很多参考HiveServer2。
STS计算引擎为Spark,而HiveServer2默认对应的MapReduce,因此STS任务的计算速度比HiveServer快很多(10-100倍)STS在生产环境中也有其局限性。
本文基于Spark3.1.3 部署STS on Yarn demo服务,Hadoop为HA的集群。
官网地址:Running the Thrift JDBC/ODBC server
2.SparkThriftServer架构及局限

SparkThriftserver结构以多线程为基础。
从上面的SparkThriftServer在基本结构中,我们可以看到它本质上是单一的Spark在响应数千个客户端的请求时,应用程序通常有明显的限制。
SparkThriftServer由于整个应用程序只有一个全球唯一的用户名,包括驱动程序端和执行程序端,因此不能完全支持多租户。因此,它必须通过租户访问所有用户的数据。
SparkThriftServer占据单个资源队列(YARN queue / Kubernetes Namespace),从资源隔离和共享的角度来看,很难细粒度或灵活地控制每个租户可用的资源池。没有人愿意重新启动服务器并停止其服务来调整某些池的权重或增加总计算资源。
过大的Spark任务会占用太多Spark ThriftServer其他任务延迟或卡住资源。
Spark Driver不仅要扮演Spark来自客户端的数千个连接和操作也是应用程序调度器的角色。在这种情况下,很可能会遇到瓶颈。Spark解决所有查询所依赖的分析器Hive metastore客户端是唯一的,访问HMS并发问题更为明显。
3.SparkThriftServer部署
3.1前置条件
JDK1.8,一个hadoop集群,HiveMetastore服务,一个Spark3.1.3 二进制包,能正常跑一个spark pi on yarn demo。
具体可参考Hadoop3.x介绍其他相关文章:
Hadoop3.x入门-Spark3.x部署_-小末的博客-CSDN博客
Hadoop3.x入门-Hive3.x部署_-小末的博客-CSDN博客
Hadoop3.x入门-搭建3节点Hadoop HA集群_-小末的博客-CSDN博客_hadoop3 ha搭建
3.2STS连接Hivemetastore元数据服务
STS和HiveServer一样,可以把Hivemetastore作为自己的元数据库。
只需需将hive-site.xml放到$SPARK_HOME/conf下即可,STS将自动读取hive-site.xml中的hivemetastore uri并连接。
注意hive-site.xml中需要配置hive.metastore.warehouse.dir不使用参数SparkSQL插入和查询创建的数据库会有一些问题。
3.3STS连接Hadoop集群
STS启动后,其实质作为Spark的一个常驻Application,时刻等待着SQL任务的到来。
STS连接Yarn和HDFS只需要将core-site.xml和hdfs-site.xml放到$SPARK_HOME/conf下即可。
3.4启动STS
STS只支持官网服务Spark Client模式。
cd $SPARK_HOME/sbin #生产环境需要更多的参数,可以通过--help检查启动参数 ./start-thriftserver.sh --master yarn #检查启动是否成功,STS默认是10000端口 netstat -ntlp | grep 10000
查看Yarn页面,会有一个Thrift JDBC/ODBC Server的Application:
3.5使用Beeline连接STS
# 代理用户为dev beeline -u jdbc:hive2://hd1:10000 -n dev
3.6简单的SQL测试
创建数据库 create database db_test; 创建表 use db_test; create table if not exists student(id int , name string); show create table student; 插入数据 insert into student values (1,'whh'); 查询数据 select count(1) from student;
3.7查看Spark History
注意只有sts进程关闭后,Spark History会显示这一点Application操作历史。
访问http://hd1.dev.local:18080/,如图:
如果要查看目前正在执行的任务,可以通过yarn页面点击ApplicationMaster:
跳转到Spark Job页面:
至此,SparkThriftServer Demo部署测试完成