一种实现SparkThriftServer高可用的方法及系统技术方案

技术编号:37708883 阅读:8 留言:0更新日期:2023-06-01 23:59
本发明专利技术涉及大数据存储与计算技术领域,具体提供了一种实现Spark Thrift Server高可用的方法,Spark Thrift Server启动时,获取ZooKeeper客户端连接,将Spark Thrift Server信息写入ZooKeeper;当客户端连接Spark Thrift Server服务时,连接时首先请求ZooKeeper服务,获取命名空间下所有Spark Thrift Server节点,通过均衡算法选举一个Spark Thrift Server节点,连接到Spark Thrift Server,当Spark Thrift Server服务停止时,同时需要从ZooKeeper中将节点信息注销。与现有技术相比,本发明专利技术当某个Spark Thrift Server节点出现故障时,不会对客户端造成影响,从而实现高可用。从而实现高可用。从而实现高可用。

【技术实现步骤摘要】
一种实现Spark Thrift Server高可用的方法及系统


[0001]本专利技术涉及大数据存储与计算
,具体提供一种实现Spark Thrift Server高可用的方法及系统。

技术介绍

[0002]Spark Thrift Server是在HiveServer2的基础上实现的,提供了Thrift服务,也就是远程JDBC/ODBC服务。用户可以通过命令行或JDBC/ODBC接口,进行交互式查询,无需编写任何代码。用户画像,对受众目标进行筛选,数据源是在Hive数据仓库,早期直接采用Hive on Spark的方式去做处理,但是性能不是很高,计算比较慢,不能满足近实时的要求,后来改用Thrift Server,在大部分场景下,性能要比Hive on Spark好很多,Spark SQL的社区活跃度也很高,因此性能还会不断提高。
[0003]尽管我们使用Spark Thrift Server性能得到了提高,但同时也存在单点问题,所有Spark SQL查询都走唯一一个Spark Thrift节点上的同一个Spark Driver,任何故障都会导致这个唯一的Spark Thrift节点上的所有作业失败,从而需要重启Spark Thrift Server。

技术实现思路

[0004]本专利技术是针对上述现有技术的不足,提供一种实用性强的实现Spark Thrift Server高可用的方法。
[0005]本专利技术进一步的技术任务是提供一种设计合理,安全适用的实现Spark Thrift Server高可用的装置。
[0006]本专利技术解决其技术问题所采用的技术方案是:
[0007]一种实现Spark Thrift Server高可用的方法,Spark Thrift Server启动时,读取配置文件中ZooKeeper连接地址、ZooKeeper端口号和ZooKeeper命名空间,获取ZooKeeper客户端连接,将Spark Thrift Server信息写入ZooKeeper;
[0008]当客户端连接Spark Thrift Server服务时,将原来的JDBC连接地址由IP、端口号替换成ZooKeeper连接地址,连接时首先请求ZooKeeper服务,获取命名空间下所有Spark Thrift Server节点,通过均衡算法选举一个Spark Thrift Server节点,连接到Spark Thrift Server,当Spark Thrift Server服务停止时,同时需要从ZooKeeper中将节点信息注销。
[0009]进一步的,在Spark Thrift Server中添加addServerInstanceToZooKeeper和removeServerInstanceFromZooKeeper代码块,用于注册及注销ZooKeeper服务。
[0010]进一步的,添加addServerInstanceToZooKeeper和removeServerInstanceFromZooKeeper代码块时,具体的逻辑如下:
[0011]首先在Spark配置文件中添加hive.server2.support.dynamic.service.discovery配置项,将值改为true,使Spark Thrift Server服务被动态发现,添加hive.server2.
zookeeper.namespace配置项,值为ZooKeeper命名空间名称,当Spark Thrift Server启动时将节点信息写到该命名空间下,添加hive.zookeeper.quorum配置项,所述配置项为ZooKeeper服务的连接地址,同时添加hive.zookeeper.client.port配置项,所述配置项为ZooKeeper连接的端口号,通过添加这两个配置项连接到ZooKeeper,将节点信息写入节点中。
[0012]进一步的,修改Spark Thrift Server启动代码,如果配置了动态发现为true则利用反射原理调用addServerInstanceToZooKeeper方法,将Spark Thrift Server节点注册到ZooKeeper;
[0013]addServerInstanceToZooKeeper执行逻辑如下:首先读取Spark配置文件,获取ZooKeeper IP地址、ZooKeeper端口号、ZooKeeper命名空间、ZooKeeper会话超时时间、ZooKeeper连接失败最大重试次数和每次重试间隔,用于初始化ZooKeeper客户端;
[0014]ZooKeeper客户端创建完成后,创建ZooKeeper数据节点znode,数据节点名称为Spark Thrift Server统一资源标识符加版本号加序列号,数据节点内容为Spark Thrift Server节点相关信息,添加getServerInstanceURI方法用于获取Spark Thrift Server节点IP地址和端口号,调用getHostName和getPortNumber方法分别获取IP地址和端口号,添加addConfsToPublish方法,用于获取需要写入ZooKeeper数据节点的属性值。
[0015]进一步的,如果Spark Thrift Server开启了kerberos安全认证,则需要将Spark Thrift Server kerberos principal写入ZooKeeper节点;
[0016]如果Spark Thrift Server传输方式为http模式,则需要将Spark Thrift Server节点端口号、Spark Thrift Server节点http路径写入数据节点;
[0017]同时需要添加isKerberosAuthMode方法,用于判断Spark Thrift Server是否开启了Kerberos安全认证。通过addConfsToPublish方法获取到需要写入ZooKeeper数据节点的属性后,将数据写入ZooKeeper;
[0018]Spark Thrift Server服务停止时,在原有的基础上添加removeServerInstanceFromZooKeeper方法,当服务停止时,利用反射原理调用该方法,将该节点从ZooKeeper中注销。
[0019]进一步的,当客户端连接Spark Thrift Server服务时,JDBC连接地址需要使用ZooKeeper地址,指定ZooKeeper IP地址、端口号以及命名空间namespace;
[0020]连接时根据连接地址判断Spark Thrift Server服务发现方式为ZooKeeper,同样地,初始化ZooKeeper客户端,根据命名空间获取该命名空间下的节点数据,包含所有Spark Thrift Server服务的连接信息,通过负载均衡算法选举一个Spark Thrift Serve本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种实现Spark Thrift Server高可用的方法,其特征在于,Spark Thrift Server启动时,读取配置文件中ZooKeeper连接地址、ZooKeeper端口号和ZooKeeper命名空间,获取ZooKeeper客户端连接,将Spark Thrift Server信息写入ZooKeeper;当客户端连接Spark Thrift Server服务时,将原来的JDBC连接地址由IP、端口号替换成ZooKeeper连接地址,连接时首先请求ZooKeeper服务,获取命名空间下所有Spark Thrift Server节点,通过均衡算法选举一个Spark Thrift Server节点,连接到Spark Thrift Server,当Spark Thrift Server服务停止时,同时需要从ZooKeeper中将节点信息注销。2.根据权利要求1所述的一种实现Spark Thrift Server高可用的方法,其特征在于,在Spark Thrift Server中添加addServerInstanceToZooKeeper和removeServerInstanceFromZooKeeper代码块,用于注册及注销ZooKeeper服务。3.根据权利要求2所述的一种实现Spark Thrift Server高可用的方法,其特征在于,添加addServerInstanceToZooKeeper和removeServerInstanceFromZooKeeper代码块时,具体的逻辑如下:首先在Spark配置文件中添加hive.server2.support.dynamic.service.discovery配置项,将值改为true,使Spark Thrift Server服务被动态发现,添加hive.server2.zookeeper.namespace配置项,值为ZooKeeper命名空间名称,当Spark Thrift Server启动时将节点信息写到该命名空间下,添加hive.zookeeper.quorum配置项,所述配置项为ZooKeeper服务的连接地址,同时添加hive.zookeeper.client.port配置项,所述配置项为ZooKeeper连接的端口号,通过添加这两个配置项连接到ZooKeeper,将节点信息写入节点中。4.根据权利要求3所述的一种实现Spark Thrift Server高可用的方法,其特征在于,修改Spark Thrift Server启动代码,如果配置了动态发现为true则利用反射原理调用addServerInstanceToZooKeeper方法,将Spark Thrift Server节点注册到ZooKeeper;addServerInstanceToZooKeeper执行逻辑如下:首先读取Spark配置文件,获取ZooKeeper IP地址、ZooKeeper端口号、ZooKeeper命名空间、ZooKeeper会话超时时间、ZooKeeper连接失败最大重试次数和每次重试间隔,用于初始化ZooKeeper客户端;ZooKeeper客户端创建完成后,创建ZooKeeper数据节点znode,数据节点名称为Spark Thrift Server统一资源标识符加版本号加序列号,数据节点内容为Spark Thrift Server节点相关信息,添加getServerInstanceURI方法用于获取Spark Thrift Server节点IP地址和端口号,调用getHostName和getPortNumber方法分别获取IP地址和端口号,添加addConfsToPublish方法,用于获取需要写入ZooKeeper数据节点的属性值。5.根据权利要求4所述的一种实现Spark Thrift Server高可用的方法,其特征在于,如果Spark Thrift Server开启了kerberos安全认证,则需要将Spark Thrift Server kerberos principal写入ZooKeeper节点;如果Spark Thrift Server传输方式为http模式,则需要将Spark Thrift Server节点端口号、Spark Thrift Server节点http路径写入数据节点;同时需要添加isKerberosAuthMode方法,用于判断Spark Thrift Server是否开启了Kerberos安全认证。通过addConfsToPublish方法获取到需要写入Z...

【专利技术属性】
技术研发人员:魏峥李国涛周永进秦雪娇夏传涛
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1