更新时间:2024-08-03 GMT+08:00

Spark ThriftServer接口介绍

简介

ThriftServer是Hive中的HiveServer2的另外一个实现,它底层使用了Spark SQL来处理SQL语句,从而比Hive拥有更高的性能。

ThriftServer是一个JDBC接口,用户可以通过JDBC连接ThriftServer来访问SparkSQL的数据。ThriftServer在启动的时候,会启动一个SparkSQL的应用程序,而通过JDBC连接进来的客户端共同分享这个sparkSQL应用程序的资源,也就是说不同的用户之间可以共享数据。ThriftServer启动时还会开启一个侦听器,等待JDBC客户端的连接和提交查询。所以,在配置ThriftServer的时候,至少要配置ThriftServer的主机名和端口,如果要使用Hive数据的话,还要提供Hive Metastore的URIs。

ThriftServer默认在安装节点上的10000端口起一个JDBC服务,可以通过Beeline或者JDBC客户端代码来连接它,从而执行SQL命令。

如果您需要了解ThriftServer的其他信息,请参见Spark官网:http://spark.apache.org/docs/1.5.1/sql-programming-guide.html#distributed-sql-engine

Beeline

开源社区提供的Beeline连接方式,请参见:https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

JDBC客户端代码

通过JDBC客户端代码连接ThriftServer,来访问SparkSQL的数据。

增强特性

对比开源社区,MRS还提供了两个增强特性,ThriftServer HA方案和设置ThriftServer连接的超时时间。

  • ThriftServer HA方案,当ThriftServer主节点发生故障时,备节点能够主动切换为主节点,为集群提供服务。Beeline和JDBC客户端代码两种连接方式的操作相同。

    连接HA模式下的ThriftServer,连接字符串和非HA模式下的区别在于需要将ip:port替换为ha-cluster,使用到的其他参数见表1

    表1 客户端参数列表

    参数名称

    含义

    默认值

    spark.thriftserver.ha.enabled

    是否启用HA模式,设置为true表示启用。如果启用了HA,需要在连接字符串中将host:port修改为“ha-cluster”。否则会自动退出HA模式。

    false

    spark.thriftserver.zookeeper.dir

    ThriftServer在ZooKeeper上存储元数据的路径,同服务端的同名参数,且需要和服务端配置一致。在此目录下存储命名为“active_thriftserver”的子目录,用于存储Hive ThriftServer的IP和端口号。

    /thriftserver

    spark.deploy.zookeeper.url

    ZooKeeper的URL路径,同服务端的同名参数,且需要和服务端配置一致。

    -

    spark.thriftserver.retry.times

    尝试连接服务端的最大次数。如果设置为负数或零,客户端将不会重新尝试连接服务端。

    5

    spark.thriftserver.retry.wait.time

    重连服务端时的尝试时间间隔,单位秒。

    10

    表1中的参数应配置在客户端classpath下的“hive-site.xml”文件中,例:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <configuration>
        <property>
            <name>spark.thriftserver.ha.enabled</name>
            <value>true</value>
        </property>
    </configuration>

    “spark.deploy.zookeeper.url”参数也可以通过在连接字符串中的“zk.quorum”代替,例:

    !connect jdbc:hive2://ha-cluster/default;zk.quorum=spark25:2181,spark
    26:2181,spark27:2181
  • 设置客户端与ThriftServer连接的超时时间。
    • Beeline

      在网络拥塞的情况下,这个特性可以避免beeline由于无限等待服务端的返回而挂起。使用方式如下:

      启动beeline时,在后面追加“--socketTimeOut=n”,其中“n”表示等待服务返回的超时时长,单位为秒,默认为“0”(表示永不超时)。建议根据业务场景,设置为业务所能容忍的最大等待时长。

    • JDBC客户端代码

      在网络拥塞的情况下,这个特性可以避免客户端由于无限等待服务端的返回而挂起。使用方式如下:

      在执行“DriverManager.getConnection”方法获取JDBC连接前,添加“DriverManager.setLoginTimeout(n)”方法来设置超时时长,其中n表示等待服务返回的超时时长,单位为秒,类型为Int,默认为“0”(表示永不超时)。建议根据业务场景,设置为业务所能容忍的最大等待时长。