Skip to content

Commit 83b86cd

Browse files
author
Dmitriy Fingerman
committed
HIVE-28775: HiveServer2: enabling HA Leader endpoint on a different port than WebUI
1 parent cc8bf3c commit 83b86cd

File tree

5 files changed

+162
-120
lines changed

5 files changed

+162
-120
lines changed

common/src/java/org/apache/hadoop/hive/conf/HiveConf.java

+3
Original file line numberDiff line numberDiff line change
@@ -3975,7 +3975,10 @@ public static enum ConfVars {
39753975
HIVE_SERVER2_WEBUI_BIND_HOST("hive.server2.webui.host", "0.0.0.0", "The host address the HiveServer2 WebUI will listen on"),
39763976
HIVE_SERVER2_WEBUI_PORT("hive.server2.webui.port", 10002, "The port the HiveServer2 WebUI will listen on. This can be"
39773977
+ "set to 0 or a negative integer to disable the web UI"),
3978+
HIVE_SERVER2_LEADER_PORT("hive.server2.leader.port", 11002, "The port the HiveServer2 leader web server will listen on. This can be"
3979+
+ "set to 0 or a negative integer to disable HS2 leader management"),
39783980
HIVE_SERVER2_WEBUI_MAX_THREADS("hive.server2.webui.max.threads", 50, "The max HiveServer2 WebUI threads"),
3981+
HIVE_SERVER2_LEADER_MAX_THREADS("hive.server2.leader.max.threads", 5, "The max HiveServer2 leader threads"),
39793982
HIVE_SERVER2_WEBUI_USE_SSL("hive.server2.webui.use.ssl", false,
39803983
"Set this to true for using SSL encryption for HiveServer2 WebUI."),
39813984
HIVE_SERVER2_WEBUI_SSL_KEYSTORE_PATH("hive.server2.webui.keystore.path", "",

itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestActivePassiveHA.java

+15-15
Original file line numberDiff line numberDiff line change
@@ -148,14 +148,14 @@ public void testActivePassiveHA() throws Exception {
148148

149149
assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
150150
assertEquals(true, miniHS2_1.isLeader());
151-
String url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
151+
String url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
152152
assertEquals("true", sendGet(url));
153153

154154
assertEquals(false, miniHS2_2.isLeader());
155-
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
155+
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
156156
assertEquals("false", sendGet(url));
157157

158-
url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/peers";
158+
url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/peers";
159159
String resp = sendGet(url);
160160
ObjectMapper objectMapper = new ObjectMapper();
161161
HS2Peers.HS2Instances hs2Peers = objectMapper.readValue(resp, HS2Peers.HS2Instances.class);
@@ -190,7 +190,7 @@ public void testActivePassiveHA() throws Exception {
190190

191191
assertEquals(true, miniHS2_2.getIsLeaderTestFuture().get());
192192
assertEquals(true, miniHS2_2.isLeader());
193-
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
193+
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
194194
assertEquals("true", sendGet(url));
195195

196196
while (client.getAll().size() != 1) {
@@ -212,7 +212,7 @@ public void testActivePassiveHA() throws Exception {
212212
assertEquals(1, leaders.size());
213213
assertEquals(0, standby.size());
214214

215-
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/peers";
215+
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/peers";
216216
resp = sendGet(url);
217217
objectMapper = new ObjectMapper();
218218
hs2Peers = objectMapper.readValue(resp, HS2Peers.HS2Instances.class);
@@ -231,7 +231,7 @@ public void testActivePassiveHA() throws Exception {
231231
miniHS2_1.start(getConfOverlay(instanceId1));
232232

233233
assertEquals(false, miniHS2_1.isLeader());
234-
url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
234+
url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
235235
assertEquals("false", sendGet(url));
236236

237237
while (client.getAll().size() != 2) {
@@ -253,7 +253,7 @@ public void testActivePassiveHA() throws Exception {
253253
assertEquals(1, leaders.size());
254254
assertEquals(1, standby.size());
255255

256-
url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/peers";
256+
url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/peers";
257257
resp = sendGet(url);
258258
objectMapper = new ObjectMapper();
259259
hs2Peers = objectMapper.readValue(resp, HS2Peers.HS2Instances.class);
@@ -280,11 +280,11 @@ public void testConnectionActivePassiveHAServiceDiscovery() throws Exception {
280280

281281
assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
282282
assertEquals(true, miniHS2_1.isLeader());
283-
String url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
283+
String url = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
284284
assertEquals("true", sendGet(url));
285285

286286
assertEquals(false, miniHS2_2.isLeader());
287-
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
287+
url = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
288288
assertEquals("false", sendGet(url));
289289

290290
// miniHS2_1 will be leader
@@ -345,8 +345,8 @@ public void testManualFailover() throws Exception {
345345
confOverlay.put(ConfVars.HIVE_SERVER2_THRIFT_HTTP_PATH.varname, "clidriverTest");
346346
miniHS2_2.setPamAuthenticator(pamAuthenticator2);
347347
miniHS2_2.start(confOverlay);
348-
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
349-
String url2 = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
348+
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
349+
String url2 = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
350350

351351
// when we start miniHS2_1 will be leader (sequential start)
352352
assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
@@ -403,7 +403,7 @@ public void testManualFailoverUnauthorized() throws Exception {
403403
confOverlay.put(ConfVars.HIVE_SERVER2_THRIFT_HTTP_PATH.varname, "clidriverTest");
404404
miniHS2_2.start(confOverlay);
405405

406-
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
406+
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
407407
// when we start miniHS2_1 will be leader (sequential start)
408408
assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
409409
assertEquals(true, miniHS2_1.isLeader());
@@ -438,7 +438,7 @@ public void testNoConnectionOnPassive() throws Exception {
438438
Map<String, String> confOverlay = getSecureConfOverlay(instanceId2);
439439
miniHS2_2.setPamAuthenticator(pamAuthenticator2);
440440
miniHS2_2.start(confOverlay);
441-
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
441+
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
442442
assertEquals(true, miniHS2_1.getIsLeaderTestFuture().get());
443443
assertEquals(true, miniHS2_1.isLeader());
444444

@@ -494,8 +494,8 @@ public void testClientConnectionsOnFailover() throws Exception {
494494
confOverlay.put(ConfVars.HIVE_SERVER2_THRIFT_HTTP_PATH.varname, "clidriverTest");
495495
miniHS2_2.setPamAuthenticator(pamAuthenticator2);
496496
miniHS2_2.start(confOverlay);
497-
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
498-
String url2 = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_WEBUI_PORT.varname) + "/leader";
497+
String url1 = "http://localhost:" + hiveConf1.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
498+
String url2 = "http://localhost:" + hiveConf2.get(ConfVars.HIVE_SERVER2_LEADER_PORT.varname) + "/leader";
499499
String zkJdbcUrl = miniHS2_1.getJdbcURL();
500500
String zkConnectString = zkServer.getConnectString();
501501
assertTrue(zkJdbcUrl.contains(zkConnectString));

itests/util/src/main/java/org/apache/hive/jdbc/miniHS2/AbstractHiveService.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,17 @@ public abstract class AbstractHiveService {
3636
private int binaryPort;
3737
private int httpPort;
3838
private int webPort;
39+
private int leaderPort;
3940
private boolean startedHiveService = false;
4041
private List<String> addedProperties = new ArrayList<String>();
4142

42-
public AbstractHiveService(HiveConf hiveConf, String hostname, int binaryPort, int httpPort, int webPort) {
43+
public AbstractHiveService(HiveConf hiveConf, String hostname, int binaryPort, int httpPort, int webPort, int leaderPort) {
4344
this.hiveConf = hiveConf;
4445
this.hostname = hostname;
4546
this.binaryPort = binaryPort;
4647
this.httpPort = httpPort;
4748
this.webPort = webPort;
49+
this.leaderPort = leaderPort;
4850
}
4951

5052
/**
@@ -142,6 +144,10 @@ public int getWebPort() {
142144
return webPort;
143145
}
144146

147+
public int getLeaderPort() {
148+
return leaderPort;
149+
}
150+
145151
public boolean isStarted() {
146152
return startedHiveService;
147153
}

itests/util/src/main/java/org/apache/hive/jdbc/miniHS2/MiniHS2.java

+3
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,8 @@ private MiniHS2(HiveConf hiveConf, MiniClusterType miniClusterType, boolean useM
292292
(usePortsFromConf ? hiveConf.getIntVar(HiveConf.ConfVars.HIVE_SERVER2_THRIFT_HTTP_PORT) : MetaStoreTestUtils
293293
.findFreePort()),
294294
(usePortsFromConf ? hiveConf.getIntVar(ConfVars.HIVE_SERVER2_WEBUI_PORT) : MetaStoreTestUtils
295+
.findFreePort()),
296+
(usePortsFromConf ? hiveConf.getIntVar(ConfVars.HIVE_SERVER2_LEADER_PORT) : MetaStoreTestUtils
295297
.findFreePort()));
296298
hiveConf.setLongVar(ConfVars.HIVE_SERVER2_MAX_START_ATTEMPTS, 3l);
297299
hiveConf.setTimeVar(ConfVars.HIVE_SERVER2_SLEEP_INTERVAL_BETWEEN_START_ATTEMPTS, 10,
@@ -379,6 +381,7 @@ private MiniHS2(HiveConf hiveConf, MiniClusterType miniClusterType, boolean useM
379381
hiveConf.setIntVar(ConfVars.HIVE_SERVER2_THRIFT_PORT, getBinaryPort());
380382
hiveConf.setIntVar(ConfVars.HIVE_SERVER2_THRIFT_HTTP_PORT, getHttpPort());
381383
hiveConf.setIntVar(ConfVars.HIVE_SERVER2_WEBUI_PORT, getWebPort());
384+
hiveConf.setIntVar(ConfVars.HIVE_SERVER2_LEADER_PORT, getLeaderPort());
382385

383386
Path scratchDir = new Path(baseFsDir, "scratch");
384387
// Create root scratchdir with write all, so that user impersonation has no issues.

0 commit comments

Comments
 (0)