一,Spark Thrift Sever是什么
Spark借助Hive的Metadata Service可以实现通过命令行客户端工具执行Sql语句,就像是Hive或者Mysql的命令行工具一样,称之为Spark CLI。
Spark CLI适合做一些简单的测试,如Sql语法验证、查看表结构等等,使用起来比较方便。但其有一个限制,Spark CLI必须和HiveMeta Service在同一台服务器,这就限制了Spark CLI的使用范围,局限于开发人员使用。
Spark SQL有没有提供通过客户端(DBeaver)的方式操作SQL呢,就像Hive、Mysql一样可以通过客户端连接,在客户端执行SQL。
其实,Spark提供了这种方式,这就是Spark Thrift Sever,启动了Spark Thrift Sever后,就可以在客户端比如DBeaver使用用户、密码在指定端口下连接到Spark Thrift Sever,连接之后就可以在客户端执行SQL,客户端会将SQL发送到后台,有SparkSQL生成执行计划,交由Spark Core执行。
二,如何使用Spark Thrift Sever
要使用DBeaver连接SparkSQL连接SQL,按如下步骤:
- 1,在spark的conf目录下,创建hive-site.xml(见另一篇文章)
- 配置 hive metastore
- 配置客户端连接用的用户名密码
- 2,启动Spark Thrift Sever
./sbin/start-thriftserver.sh
- 3,DBeaver使用Hive的驱动连接SparkSql
三,Spark Thrift Sever的本质是什么
Spark Thrift Sever的本质是以client模式运行的Spark应用
查看系统进程,发现启动Spark Thrift Sever后,其以SparkSubmit的名称常驻进程中。
到这里,你就会发现,Spark Thrift Sever本质上就是一个Spark应用,和我们开发的Spark Application一样,只不过这个应用比较特殊:
- 一是它是一个常驻进程;
- 二是它本身是一个Server,可以接收Client端的请求。
所以,在启动Spark Thrift Sever时,也可以像启动其他Spark Application一样指定参数,比如指定其基于yarn,指定并行度,指定资源等等。如下,指定该应用有yarn进行资源管理:
./start-thriftserver.sh --master yarn
不过,这个应用只能使用client模式,即driver只能运行在本地
。
四,Spark Thrift Sever的局限
Spark Thrift Sever常驻进程的特点使得其很像Spark Standalone,一旦启动之后,不能动态的扩缩容,这个问题导致其使用受到了很大限制,因为在启动时无法确定该使用多大规模的资源,太大太小都不好。但另一方面,其又可以通过yarn分配资源,只不过是一次分配而已。
这是因为这个特点,使得Spark Thrift Sever并不适合通用场景。