首页 理论教育 HiveThriftServer2类解析

HiveThriftServer2类解析

时间:2023-07-02 理论教育 版权反馈
【摘要】:下面是HiveThriftServer2的UML类图,如图7-3所示。其中,cliService服务是SparkSQLCLIService对象的实例;thrift-CLIService服务在实例化时,会根据HiveConf参数进行判断,如果传输模式是HTTP,就使用ThriftHttpCLIService对象,否则使用ThriftBinaryCLIService对象。ThriftHttpCLIService和ThriftBinaryCLIService都是ThriftCLIService的子类,无论是哪个ThriftCLIService对象,都传入了SparkSQLCLIService的引用,Thrift只是一个封装。在main方法中,主要处理逻辑是:创建HiveThriftServer2实例,以及创建HiveThrift-Server2Listener监听器。

HiveThriftServer2类解析

通过7.2.1一节的学习,我们输入start-thriftserver.sh命令,Spark SQL Thrift Server启动时调用org.apache.spark.deploy.SparkSubmit,SparkSubmit向服务器集群提交一个class为HiveThriftServer2的应用程序,HiveThriftServer2类是一个Spark应用程序,也是main方法的入口类,因此,很有必要对其进行解析。

下面是HiveThriftServer2的UML类图,如图7-3所示。

978-7-111-59197-9-Chapter07-27.jpg

图7-3 HiveThriftServer2UML类图

伴生对象object HiveThriftServer2继承至Logging,是Spark SQL中连接HiveServer2的主入口点,启动SparkSQLContext和HiveThriftServer2thrift server服务。伴生类class HiveThrift-Server2继承至HiveServer2及ReflectedCompositeService,其中HiveServer2是Hive包中的类org.apache.hive.service.server.{HiveServerServerOptionsProcessor,HiveServer2}。

下面是主要的几个关键点。

1.init方法

978-7-111-59197-9-Chapter07-28.jpg

HiveThriftServer2继承了Hive的HiveServer2和ReflectedCompositeService两个类,并且复写了init方法。在初始化(HiveConf)的时候,会添加cliService和thriftCLIService两个服务,作为后台守护进程。其中,cliService服务是SparkSQLCLIService对象的实例;thrift-CLIService服务在实例化时,会根据HiveConf参数进行判断,如果传输模式是HTTP,就使用ThriftHttpCLIService对象,否则使用ThriftBinaryCLIService对象。ThriftHttpCLIService和ThriftBinaryCLIService都是ThriftCLIService的子类,无论是哪个ThriftCLIService对象,都传入了SparkSQLCLIService的引用,Thrift只是一个封装。

在添加这两个服务之后,再调用initCompositeService方法,把所有的服务启动起来。

2.监听器(www.xing528.com)

在HiveThriftServer2伴生对象中,有一个listener对象作为监听器,它是HiveThriftServ-er2Listener类的实例。listener用来接收远程的请求,向SparkContext注册该监听器,把接收到的请求交给HiveThriftServer2类,再通过Spark SQL去执行任务。

3.main方法入口

在HiveThriftServer2伴生对象中,还有main函数入口。正如Thrift Server启动日志所见:

978-7-111-59197-9-Chapter07-29.jpg

978-7-111-59197-9-Chapter07-30.jpg

从Spark Command可以发现,启动Thrift Sever时,实际是调用SparkSubmit来提交HiveThriftServer2类的,所以该类必须要有main方法入口,用来创建一个新的进程。

在main方法中,主要处理逻辑是:创建HiveThriftServer2实例,以及创建HiveThrift-Server2Listener监听器。具体代码如下:

978-7-111-59197-9-Chapter07-31.jpg

978-7-111-59197-9-Chapter07-32.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈