1.前言
SparkThriftServer,简称STS,作为SparkSQL的JDBC/ODBC服务,启动了STS服务后,就可以使用代码程序通过JDBC/ODBC的接口提交Spark SQL。
STS对标的是Hive的HiveServer2,其中代码内部实现也大量参考了HiveServer2。
STS计算引擎为Spark,而HiveServer2默认对应的MapReduce,因此STS的任务的计算速度要比HiveServer2快很多(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和HiveServer2一样,可以把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部署测试完毕