davidyuan1223 opened a new pull request, #6213:
URL: https://github.com/apache/kyuubi/pull/6213

   # :mag: Description
   ## Issue References ๐Ÿ”—
   <!-- Append the issue number after #. If there is no issue for you to link 
create one or -->
   <!-- If there are no issues to link, please provide details here. -->
   
   This pull request fixes #6034 
   
   ## Describe Your Solution ๐Ÿ”ง
   Currently, use beeline to connect kyuubiServer with HA mode, the strategy 
only support random, this will lead to a high load on the machine. So i make 
this pr to support choose strategy.
   [description]
   First, we need know, beeline connect kyuubiServer dependency on 
kyuubi-hive-jdbc, it is isolated from the kyuubi cluster, so the code only 
support random choose serverHost from zk node /${namespace}. Because 
kyuubi-hive-jdbc is a stateless module, only run once, cannot store var about 
get serverHost from zk node.
   [Solution]
   This pr, we could implement a interface named ChooseServerStrategy to choose 
serverHost. I implement two strategy
   1. poll: it will create a zk node named ${namespace}-counter, when a beeline 
client want connect kyuubiServer, the node will increment 1, use this value to 
take the remainder from serverHosts, like counter % serverHost.size, so we 
could get a order serverHost
   2. random: random get serverHost from serverHosts
   3. User Definied Class: implemented the ChooseServerStrategy, then put the 
jar to beeline-jars, it can use your strategy to choose serverHost
   
   
   ## Types of changes :bookmark:
   <!--- What types of changes does your code introduce? Put an `x` in all the 
boxes that apply: -->
   - [ ] Bugfix (non-breaking change which fixes an issue)
   - [ ] New feature (non-breaking change which adds functionality)
   - [ ] Breaking change (fix or feature that would cause existing 
functionality to change)
   
   ## Test Plan ๐Ÿงช
   Test the Strategy in my test Cluster
   #### Behavior Without This Pull Request :coffin:
   
![image](https://github.com/apache/kyuubi/assets/51512358/d65b14c1-1b02-4436-8843-27b2e55d27ce)
   
![image](https://github.com/apache/kyuubi/assets/51512358/0524a30c-c2c3-464e-8453-84f3f1a74fb1)
   
![image](https://github.com/apache/kyuubi/assets/51512358/12feb93e-b743-4a43-821d-454f3c1af336)
   
   #### Behavior With This Pull Request :tada:
   
   [Use Case]
   1. poll: `bin/beeline -u 
'jdbc:hive2://xxx:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;zooKeeperStrategy=poll?spark.yarn.queue=root.kylin;spark.app.name=testspark;spark.shuffle.useOldFetchProtocol=true'
 -n mfw_hadoop --verbose=true --showNestedErrs=true`
   2. random: `bin/beeline -u 
'jdbc:hive2://xxx:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;zooKeeperStrategy=random?spark.yarn.queue=root.kylin;spark.app.name=testspark;spark.shuffle.useOldFetchProtocol=true'
 -n mfw_hadoop --verbose=true --showNestedErrs=true` or `bin/beeline -u 
'jdbc:hive2://xxx:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi?spark.yarn.queue=root.kylin;spark.app.name=testspark;spark.shuffle.useOldFetchProtocol=true'
 -n mfw_hadoop --verbose=true --showNestedErrs=true`
   3. YourStrategy: `bin/beeline -u 
'jdbc:hive2://xxx:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=kyuubi;zooKeeperStrategy=xxx.xxx.xxx.XxxChooseServerStrategy?spark.yarn.queue=root.kylin;spark.app.name=testspark;spark.shuffle.useOldFetchProtocol=true'
 -n mfw_hadoop --verbose=true --showNestedErrs=true`
   
   
   [Result: The Cluster have two Server (221,233)]
   1. poll: 
   1.1. zkNode: counterValue
   
![image](https://github.com/apache/kyuubi/assets/51512358/5cbd15f9-bba4-4b23-bbfb-d61ed46f931f)
   
   1.2. result: 
   
![image](https://github.com/apache/kyuubi/assets/51512358/5a867167-8b06-49ed-aa44-b70726f3ae97)
   
![image](https://github.com/apache/kyuubi/assets/51512358/404b05e8-c828-458c-a9c4-97a323bf6ce7)
   
![image](https://github.com/apache/kyuubi/assets/51512358/3182e92b-6976-4931-a899-5e0d89cd2ac2)
   
![image](https://github.com/apache/kyuubi/assets/51512358/a55450ff-49cf-4b4a-9b90-91dd02982aa5)
   
   2. random:
   
![image](https://github.com/apache/kyuubi/assets/51512358/d65b14c1-1b02-4436-8843-27b2e55d27ce)
   
![image](https://github.com/apache/kyuubi/assets/51512358/0524a30c-c2c3-464e-8453-84f3f1a74fb1)
   
![image](https://github.com/apache/kyuubi/assets/51512358/12feb93e-b743-4a43-821d-454f3c1af336)
   
   3. YourStrategy(the test case only get the first serverHost): 
   
![image](https://github.com/apache/kyuubi/assets/51512358/2e6395c2-6496-4516-9cf6-90abc921de7f)
   
![image](https://github.com/apache/kyuubi/assets/51512358/72975513-48d2-4f41-8a95-95cde0302c5b)
   
![image](https://github.com/apache/kyuubi/assets/51512358/487951fd-de45-4e1c-861a-94e0e5564e37)
   
   #### Related Unit Tests
   
   There is no Unit Tests.
   ---
   
   # Checklist ๐Ÿ“
   <!--- Go over all the following points, and put an `x` in all the boxes that 
apply. -->
   <!--- If you're unsure about any of these, don't hesitate to ask. We're here 
to help! -->
   
   - [ ] This patch was not authored or co-authored using [Generative 
Tooling](https://www.apache.org/legal/generative-tooling.html)
   
   **Be nice. Be informative.**
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to