站长之家 seo查询,梓潼 网站建设 有限公司,设计好看的网页,wordpress主题带卡密一、概述
基于社区已有的JDBCServer基础上#xff0c;采用多主实例模式实现了其高可用性方案。集群中支持同时共存多个JDBCServer服务#xff0c;通过客户端可以随机连接其中的任意一个服务进行业务操作。即使集群中一个或多个JDBCServer服务停止工作#xff0c;也不影响用…一、概述
基于社区已有的JDBCServer基础上采用多主实例模式实现了其高可用性方案。集群中支持同时共存多个JDBCServer服务通过客户端可以随机连接其中的任意一个服务进行业务操作。即使集群中一个或多个JDBCServer服务停止工作也不影响用户通过同一个客户端接口连接其他正常的JDBCServer服务。 多主实例模式相比主备模式的HA方案优势主要体现在对以下两种场景的改进。
主备模式下当发生主备切换时会存在一段时间内服务不可用该时间JDBCServer无法控制取决于Yarn服务的资源情况。Spark中通过类似于HiveServer2的Thrift JDBC提供服务用户通过Beeline以及JDBC接口访问。因此JDBCServer集群的处理能力取决于主Server的单点能力可扩展性不够。
采用多主实例模式的HA方案不仅可以规避主备切换服务中断的问题实现服务不中断或少中断还可以通过横向扩展集群来提高并发能力。
二、实现方案
多主实例模式的HA方案原理如下图所示。
JDBCServer在启动时向ZooKeeper注册自身消息在指定目录中写入节点节点包含了该实例对应的IP端口版本号和序列号等信息多节点信息之间以逗号隔开。 示例如下
[serverUri192.168.169.84:22550
;version8.2.0;sequence0000001244,serverUri192.168.195.232:22550 ;version8.2.0;sequence0000001242,serverUri192.168.81.37:22550 ;version8.2.0;sequence0000001243]客户端连接JDBCServer时需要指定Namespace即访问ZooKeeper哪个目录下的JDBCServer实例。在连接的时候会从Namespace下随机选择一个实例连接详细URL参见URL连接介绍。客户端成功连接JDBCServer服务后向JDBCServer服务发送SQL语句。JDBCServer服务执行客户端发送的SQL语句后将结果返回给客户端。
在HA方案中每个JDBCServer服务即实例都是独立且等同的当其中一个实例在升级或者业务中断时其他的实例也能接受客户端的连接请求。
多主实例方案遵循以下规则
当一个实例异常退出时其他实例不会接管此实例上的会话也不会接管此实例上运行的业务。当JDBCServer进程停止时删除在ZooKeeper上的相应节点。由于客户端选择服务端的策略是随机的可能会出现会话随机分配不均匀的情况进而可能引起实例间的负载不均衡。实例进入维护模式即进入此模式后不再接受新的客户端连接后当达到退服超时时间仍在此实例上运行的业务有可能会发生失败。
三、URL连接介绍
多主实例模式
多主实例模式的客户端读取ZooKeeper节点中的内容连接对应的JDBCServer服务。连接字符串为
安全模式下 Kinit认证方式下的JDBCURL如下所示
jdbc:hive2://zkNode1_IP:zkNode1_Port,zkNode2_IP:zkNode2_Port,zkNode3_IP:zkNode3_Port/;serviceDiscoveryModezooKeeper;zooKeeperNamespacesparkthriftserver2x;saslQopauth-conf;authKERBEROS;principalspark2x/hadoop.系统域名系统域名;注意 其中“zkNode_IP:zkNode_Port”是ZooKeeper的URL多个URL以逗号隔开。 例如“192.168.81.37:24002,192.168.195.232:24002,192.168.169.84:24002”。其中“sparkthriftserver2x”是ZooKeeper上的目录表示客户端从该目录下随机选择JDBCServer实例进行连接。 示例安全模式下通过Beeline客户端连接时执行以下命令
sh CLIENT_HOME/spark/bin/beeline -u jdbc:hive2://zkNode1_IP:zkNode1_Port,zkNode2_IP:zkNode2_Port,zkNode3_IP:zkNode3_Port/;serviceDiscoveryModezooKeeper;zooKeeperNamespacesparkthriftserver2x;saslQopauth-conf;authKERBEROS;principalspark2x/hadoop.系统域名系统域名;Keytab认证方式下的JDBCURL如下所示
jdbc:hive2://zkNode1_IP:zkNode1_Port,zkNode2_IP:zkNode2_Port,zkNode3_IP:zkNode3_Port/;serviceDiscoveryModezooKeeper;zooKeeperNamespacesparkthriftserver2x;saslQopauth-conf;authKERBEROS;principalspark2x/hadoop.系统域名系统域名;user.principalprincipal_name;user.keytabpath_to_keytab普通模式下
jdbc:hive2://zkNode1_IP:zkNode1_Port,zkNode2_IP:zkNode2_Port,zkNode3_IP:zkNode3_Port/;serviceDiscoveryModezooKeeper;zooKeeperNamespacesparkthriftserver2x;示例普通模式下通过Beeline客户端连接时执行以下命令
sh CLIENT_HOME/spark/bin/beeline -u jdbc:hive2://zkNode1_IP:zkNode1_Port,zkNode2_IP:zkNode2_Port,zkNode3_IP:zkNode3_Port/;serviceDiscoveryModezooKeeper;zooKeeperNamespacesparkthriftserver2x;非多主实例模式
非多主实例模式的客户端连接的是某个指定JDBCServer节点。该模式的连接字符串相比多主实例模式的去掉关于Zookeeper的参数项“serviceDiscoveryMode”和“zooKeeperNamespace”。
示例安全模式下通过Beeline客户端连接非多主实例模式时执行以下命令
sh CLIENT_HOME/spark/bin/beeline -u jdbc:hive2://server_IP:server_Port/;user.principalspark2x/hadoop.系统域名系统域名;saslQopauth-conf;authKERBEROS;principalspark2x/hadoop.系统域名系统域名;注意 其中“server_IP:server_Port”是指定JDBCServer节点的URL。“CLIENT_HOME”是指客户端路径。 多主实例模式与非多主实例模式两种模式的JDBCServer接口相比除连接方式不同外其他使用方法相同。由于Spark JDBCServer是Hive中的HiveServer2的另外一个实现其使用方法请参见Hive官网https://cwiki.apache.org/confluence/display/Hive/HiveServer2Clients。