av9ash/GitBugs huggingface dataset:
Bug: The client frequently exceeds the quota, which causes the meta table scan to be too high
Status: Open | Priority: Minor | Resolution: 
Created: 05/Mar/21 03:50
Affects Version/s: 2.3.4

 When the client scan operation, the server frequently returns RpcThrottlingException, which will cause the meta table request to become high.

 

 /hbase-client/src/main/java/org/apache/hadoop/hbase/client/RpcRetryingCallerImpl.java
{code:java}
// code placeholder
@Override
public T callWithRetries(RetryingCallable<T> callable, int callTimeout)
throws IOException, RuntimeException {
  List<RetriesExhaustedException.ThrowableWithExtraContext> exceptions = new ArrayList<>();
  tracker.start();
  context.clear();
  for (int tries = 0;; tries++) {
    long expectedSleep;
    try {
      // bad cache entries are cleared in the call to RetryingCallable#throwable() in catch block
      // callable.prepare() reload force reload of server location
      callable.prepare(tries != 0);
      interceptor.intercept(context.prepare(callable, tries));
      return callable.call(getTimeout(callTimeout));
    } catch (PreemptiveFastFailException e) {
      throw e;
    } catch (Throwable t) {
      ExceptionUtil.rethrowIfInterrupt(t);
      Throwable cause = t.getCause();
      if (cause instanceof DoNotRetryIOException) {
        // Fail fast
        throw (DoNotRetryIOException) cause;
      }
      // translateException throws exception when should not retry: i.e. when request is bad.
      interceptor.handleFailure(context, t);
      t = translateException(t);

{code}
 

 

 

!image-2021-03-05-12-00-33-522.png!

!image-2021-03-05-12-01-08-769.png!
Bug: Enhance znode parent validation when add_peer
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 27/Mar/21 03:34
Affects Version/s: 2.2.3

If the znode parent end with empty string, add_peer command has no validation. It should be enhanced.

Command example: add_peer '1', CLUSTER_KEY => "10.244.225.186:2181:/hbase ", STATE => "ENABLED"

It causes enable_table_replication  execute failed with folloing error.
{quote}2021-03-27 09:59:47,738 DEBUG [ReadOnlyZKClient-10.244.225.186:2181@0x5817f1ca-SendThread(10.244.225.186:2181)] zookeeper.ClientCnxn: Reading reply sessionid:0x106fe808733000a, packet:: clientPath:/hbase /hbaseid serverPath:/hbase /hbaseid finished:false header:: 1,4  replyHeader:: 1,44,-101  request:: '/hbase /hbaseid,F  response::2021-03-27 09:59:47,738 DEBUG [ReadOnlyZKClient-10.244.225.186:2181@0x5817f1ca-SendThread(10.244.225.186:2181)] zookeeper.ClientCnxn: Reading reply sessionid:0x106fe808733000a, packet:: clientPath:/hbase /hbaseid serverPath:/hbase /hbaseid finished:false header:: 1,4  replyHeader:: 1,44,-101  request:: '/hbase /hbaseid,F  response::2021-03-27 09:59:47,755 WARN  [main] client.ConnectionImplementation: Retrieve cluster id failedjava.util.concurrent.ExecutionException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /hbase /hbaseid at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357) at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1908) at org.apache.hadoop.hbase.client.ConnectionImplementation.retrieveClusterId(ConnectionImplementation.java:603) at org.apache.hadoop.hbase.client.ConnectionImplementation.<init>(ConnectionImplementation.java:313) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.hbase.client.ConnectionFactory.lambda$createConnection$0(ConnectionFactory.java:230) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:422)
{quote}
Bug: RegionInfo.parseFrom(DataInputStream) sometimes fails to read the protobuf magic marker
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 17/Mar/21 12:50
Affects Version/s: 2.4.1

The RegionInfo class uses
{code:java}
 DataInputStream.read(byte[lengthOfPBMagic])
{code}

to read the protobuf magic marker from the beginning of the stream.
The code in RegionInfo assumes that the passed byte buffer will be filled, but the DataInputStream class only guarantees that it will read at most lengthOfPBMagic bytes.
This sometimes causes errors stating that region info file could not be parsed.
The fix is to simply issue multiple read calls until lengthOfPBMagic bytes have been read.
Bug: Convert proto to RSGroupInfo is costly
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 27/Mar/21 10:18
Affects Version/s: 2.2.3

Convert RSGroupProtos.RSGroupInfo to RSGroupInfo is costly if the RSGroup has too many RSs and tables. 

We can use parallelStream to handle the HBaseProtos.ServerName list and TableProtos.TableName list in ProtubufUtil#toGroupInfo as blow.
{quote}Collection<Address> addresses = proto.getServersList()
 .parallelStream()
 .map(server -> Address.fromParts(server.getHostName(), server.getPort()))
 .collect(Collectors.toList());

Collection<TableName> tables = proto.getTablesList()
 .parallelStream()
 .map(tableName -> ProtobufUtil.toTableName(tableName))
 .collect(Collectors.toList());


{quote}
Get the RSGroupInfo which has 9 RS and 20k tables, the time cost reduced from 6038 ms to 684 ms.
Bug: Improve SimpleRegionNormalizer#getAverageRegionSizeMb
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 08/Jan/21 06:26
Affects Version/s: 2.4.0

If the table is set NormalizerTargetRegionSize, we take NormalizerTargetRegionSize as avgRegionSize and return it. So the totalSizeMb of table is not always calculated.
Bug: When restoring a table, create a namespace if it does not exist
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 29/Mar/21 01:17
Affects Version/s: 2.0.0

It does not seem to have been taken into account that the namespace of the table to be restored does not exist in the target environment, and if the namespace does not exist, it will simply throw an error (NamespaceNotFoundException ), which is unfriendly.
Bug: During the recovery process, an error is thrown if there is an incremental backup of data that has not been updated
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 29/Mar/21 11:57
Affects Version/s: 2.0.0

The error is shown below:

19:49:24.213 [main] ERROR org.apache.hadoop.hbase.backup.RestoreDriver - Error while running restore backup
java.io.IOException: Can not restore from backup directory (check Hadoop and HBase logs)
 at org.apache.hadoop.hbase.backup.mapreduce.MapReduceRestoreJob.run(MapReduceRestoreJob.java:110) ~[hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.hbase.backup.util.RestoreTool.incrementalRestoreTable(RestoreTool.java:202) ~[hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.hbase.backup.impl.RestoreTablesClient.restoreImages(RestoreTablesClient.java:178) ~[hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.hbase.backup.impl.RestoreTablesClient.restore(RestoreTablesClient.java:221) ~[hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.hbase.backup.impl.RestoreTablesClient.execute(RestoreTablesClient.java:258) ~[hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.hbase.backup.impl.BackupAdminImpl.restore(BackupAdminImpl.java:520) ~[hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.hbase.backup.RestoreDriver.parseAndRun(RestoreDriver.java:179) [hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.hbase.backup.RestoreDriver.doWork(RestoreDriver.java:220) [hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.hbase.backup.RestoreDriver.run(RestoreDriver.java:256) [hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
 at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76) [hadoop-common-3.1.1.3.0.1.0-187.jar:?]
 at org.apache.hadoop.hbase.backup.RestoreDriver.main(RestoreDriver.java:228) [hbase-backup-3.0.0-SNAPSHOT.jar:3.0.0-SNAPSHOT]
Caused by: java.io.IOException: No input paths specified in job
Bug: [branch-1] UnsupportedOperationException in DumpClusterStatusAction
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 26/Mar/21 00:14
Affects Version/s: 1.7.0

2021-03-26 00:09:59,443 ERROR [main] util.AbstractHBaseTool: Error running command-line tool
java.lang.UnsupportedOperationException
        at java.util.Collections$UnmodifiableCollection.addAll(Collections.java:1067)
        at org.apache.hadoop.hbase.chaos.actions.DumpClusterStatusAction.collectKnownRegionServers(DumpClusterStatusAction.java:67)
        at org.apache.hadoop.hbase.chaos.actions.DumpClusterStatusAction.init(DumpClusterStatusAction.java:49)
        at org.apache.hadoop.hbase.chaos.policies.PeriodicRandomActionPolicy.init(PeriodicRandomActionPolicy.java:70)
        at org.apache.hadoop.hbase.chaos.monkies.PolicyBasedChaosMonkey.start(PolicyBasedChaosMonkey.java:127)
        at org.apache.hadoop.hbase.IntegrationTestBase.startMonkey(IntegrationTestBase.java:199)
        at org.apache.hadoop.hbase.IntegrationTestBase.setUpMonkey(IntegrationTestBase.java:189)
        at org.apache.hadoop.hbase.IntegrationTestBase.setUp(IntegrationTestBase.java:170)
        at org.apache.hadoop.hbase.IntegrationTestBase.doWork(IntegrationTestBase.java:152)
        at org.apache.hadoop.hbase.util.AbstractHBaseTool.run(AbstractHBaseTool.java:106)
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
        at org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList.main(IntegrationTestBigLinkedList.java:1990)
[
Bug: graceful_stop.sh fails to unload regions when ran at localhost
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 22/Feb/21 11:48
Affects Version/s: 1.4.13

We usually use graceful_stop.sh from the Master to restart RegionServers. However, in some scenarios we may not have privileges to restart remote RegionServers (it uses ssh).
 But we can still use graceful_stop.sh on the same host we want to restart.

In order to detect the execution at localhost, graceful_stop.sh uses /bin/hostname.
 [https://github.com/apache/hbase/blob/cfbae4d3a37e7ac4d795461c3e19406a2786838d/bin/graceful_stop.sh#L106-L110]

When RegionMover strips the host to not include it in the list of target hosts, we filter it out by checking all RegionServer hosts in the cluster:
 [https://github.com/apache/hbase/blob/branch-2/hbase-server/src/main/java/org/apache/hadoop/hbase/util/RegionMover.java#L382-L384]
 [https://github.com/apache/hbase/blob/cfbae4d3a37e7ac4d795461c3e19406a2786838d/hbase-server/src/main/java/org/apache/hadoop/hbase/util/RegionMover.java#L692]

But the list of RegionServer hosts returned by Admin#getRegionServers are FDQN, while the hostname provided from graceful_stop.sh is not FDQN, making the comparison fail.

Same happens for branch-1 region_mover.rb, which is the place I reproduced in my environment: 
[https://github.com/apache/hbase/blob/f9a91488b2c39320bed502619bf7adb765c79de6/bin/region_mover.rb#L305]
[https://github.com/apache/hbase/blob/f9a91488b2c39320bed502619bf7adb765c79de6/bin/region_mover.rb#L175]
 [https://github.com/apache/hbase/blob/f9a91488b2c39320bed502619bf7adb765c79de6/bin/region_mover.rb#L186-L192]

 

This can be fixed just by using "/bin/hostname -f" in the graceful_stop.sh script.

Will provide patch soon.
Bug: Wrong log regarding current active master at ZKLeaderManager#waitToBecomeLeader
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 17/Mar/21 08:14

{code}
byte[] currentId = ZKUtil.getDataAndWatch(watcher, leaderZNode);
if (currentId != null && Bytes.equals(currentId, nodeId)) {
  ....
} else {
  LOG.info("Found existing leader with ID: {}", Bytes.toStringBinary(nodeId));
  leaderExists.set(true);
}
{code}
Existing id, read from ZK, is currentId. But by mistake we log 'nodeId' which is the this master's node id.
Bug: Make graceful_stop localhostname compare match even if fqdn
Status: Reopened | Priority: Minor | Resolution: 
Created: 12/Mar/21 17:40

The hostname to operate on will be fqdn usually. Internal to the graceful_stop script it tries to check if we are running locally but the compare is of a fqdn to what 'hostname' returns; the latter usually returns name only. Allow name-only and fqdn match. While here cleanup doc around 'hostname' passed to graceful_stop.
Bug: Add row info in Exception when cell size exceeds maxCellSize
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 23/Feb/21 06:41

When cell size exceeds maxCellSize(default is 10M), client will get a DoNotRetryIOException, code as below:
{code:java}
private void checkCellSizeLimit(final HRegion r, final Mutation m) throws IOException {
  if (r.maxCellSize > 0) {
    CellScanner cells = m.cellScanner();
    while (cells.advance()) {
      int size = PrivateCellUtil.estimatedSerializedSizeOf(cells.current());
      if (size > r.maxCellSize) {
        String msg = "Cell with size " + size + " exceeds limit of " + r.maxCellSize + " bytes";
        LOG.debug(msg);
        throw new DoNotRetryIOException(msg);
      }
    }
  }
}
{code}
There is no row related information, which makes troubleshooting difficult.
Bug: Improve storeFile.jsp performance on really large files
Status: Open | Priority: Minor | Resolution: 
Created: 05/Mar/21 21:27
Affects Version/s: 2.3.0

Since HBASE-7171, we have a nice UI for clicking down into the details of an hfile on a regions server. When the store file is really large, the performance of this page is quite bad. It can take several minutes to summarize a 30-50gb hfile. We can do better.
Bug: Reduce MTTR for region server
Status: Open | Priority: Minor | Resolution: 
Created: 09/Mar/21 12:19
Affects Version/s: 1.4.13

I some cases in our production that, the machine that runs region server is not functioning well(I could not ssh to that machine, but it respond ping requests), the Region Server process is still running but could not process client requests. It lasts for more than 30 minutes util I remove the znode of that Region Server from ZK manually. That RS is totally unavailable during that time.

I guess Region Server  still heartbeats to ZK so that the ephemeral node of the RS is not removed by ZK, master does not find that this RS has down.

 

I think hbase needs a better failure detection except for watching the existence of the ephemeral node created by RS. 

One thing comes to my mind is running a failure detection( like  The φ Accrual Failure Detector [https://www.semanticscholar.org/paper/The-%CF%86-Accrual-Failure-Detector-Hayashibara-D%C3%A9fago/65c40c79e30c1ef33c97a22a3d52cc9f0415a477])  service on master which pings RS periodically so that the master could know the RS is down asap.

 

Any ideas?
Bug: Improve performance of table.jsp
Status: Open | Priority: Minor | Resolution: 
Created: 26/Feb/21 22:09
Affects Version/s: 2.3.4

Loading table.jsp for a table with hundreds of thousands of regions takes more than 10 seconds. This page renders a complete listing of all table regions in one go. We should have this JSP support pagination of the table regions list, with a default size of something more reasonable (100? 1000?), and controls for adjusting the page size. table.jsp already supports something like this for browsing meta table entries.
Bug: Backport TestZKSecretWatcher improvement to branch-2.2
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 23/Feb/21 16:41
Affects Version/s: 2.2.7

TestZKSecretWatcher.testKeyUpdate failed on branch-2.2 nightly. Branch-2.3+ has some test stabilization made in HBASE-23899 which improved this test too.
{noformat}
Error Message
expected null, but was:<AuthenticationKey[ id=2, expiration=9223372036854775807 ]>

Stacktrace
java.lang.AssertionError: expected null, but was:<AuthenticationKey[ id=2, expiration=9223372036854775807 ]>
	at org.apache.hadoop.hbase.security.token.TestZKSecretWatcher.testKeyUpdate(TestZKSecretWatcher.java:185)
{noformat}
Bug: Adding region count and average region size in a table at regionserver level
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 12/Feb/21 07:17
Affects Version/s: 1.6.0

Currently we have these two metrics - regionCount and avgRegionSize in branch-2+. Adding them to branch-1. These will give better insight into whether we should enable region normalizer on a table or not.
Bug: More readable Competition Time
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 04/Feb/21 07:21

Should add duration to Completion Time. Make it more readable

!https://internal-api-lark-file.f.mioffice.cn/api/image/keys/img_44a98ccd-4576-4971-900e-3d27dd1263el?message_id=6925292609535492204!

to

!image-2021-02-04-15-21-00-019.png!
Bug: When configuration "hadoop.security.authorization" is set to false,  the system will still try to authorize an RPC and raise AccessDeniedException
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 02/Feb/21 08:45

In method processOneRpc(Bytebuffer buf) in RpcServer.java (branch-1), ServerRpcConnection.java (branch-2, master), if connectionHeadRead is set to false, the method authorizeConnection() will be invoked whatever the boolean authorize is true or false.
{code:java}
if (!authorizeConnection()) {
  // Throw FatalConnectionException wrapping ACE so client does right thing and closes
  // down the connection instead of trying to read non-existent retun.
  throw new AccessDeniedException("Connection from " + this + " for service " +
    connectionHeader.getServiceName() + " is unauthorized for user: " + ugi);
}
{code}
In method authorizeConnection()
{code:java}
if (ugi != null && ugi.getRealUser() != null
    && (authMethod != AuthMethod.DIGEST)) {
  ProxyUsers.authorize(ugi, this.getHostAddress(), conf);
}{code}
ProxyUsers.authorize() will raise AuthorizationException.
Bug: Dedicated merge dispatch threadpool on master
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 25/Jan/21 20:59
Affects Version/s: 1.7.0

Over the weekend we ran into an issue of running normalizer on a table with ~400k regions and we noticed the master was bottlenecked on merge dispatcher code that runs on a single threaded thread-pool that was meant for all master table operations (opcode: MASTER_TABLE_OPERATIONS). Having a dedicated thread-pool helped us dispatch merges at a faster rate.
Bug: Implement retries when enabling tables in TestRegionReplicaReplicationEndpoint
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 07/Jan/21 18:11

When a table from a previous test is too slow to close, it can cause problems for subsequent tests. Implementing a retry-and-wait function in this test class during table enablement will prevent issues where a single peerID is being used by two tests at once.
Bug: Improve unit test for HBASE-25445 : SplitWALRemoteProcedure failed to archive split WAL
Status: Resolved | Priority: Minor | Resolution: Fixed
Created: 07/Jan/21 13:37
Affects Version/s: 2.2.6

As part of HBASE-25445, the UT testWALArchiveWIthDifferentWalAndRootFS was added which can be further improved in terms of code formatting and assertions.
Bug: stable release channel point to 2.3.3 while the description is still saying 2.2.z is stable line
Status: Open | Priority: Minor | Resolution: 
Created: 11/Jan/21 02:21

Under hbase download site, The description says "The 2.2.z series is the current stable release line". However, the stable release channel is already point to 2.3.3

 

!image-2021-01-11-10-18-45-476.png!

!image-2021-01-11-10-21-33-672.png!
Bug: [create-release] Use release:prepare tagging and setting version numbers
Status: Open | Priority: Minor | Resolution: 
Created: 05/Jan/21 23:43

Our [~ndimiduk] fingered release:prepare as alternative for our explicit tagging and updating to next version. This issue is about adding this to create-release.

See https://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html

(And from Nick in PR: "In other projects, I used to use release:prepare to apply version change to the poms and create a release tag. A little configuration of the plugin lets you specify these details, it worked pretty well. I was never brave enough to let the plugin push changes though ; i always verified and pushed manually.")
Bug: [UI]RIT time(ms) on Master UI page dispalys incorrect occasionally
Status: Open | Priority: Trivial | Resolution: 
Created: 11/Jan/21 09:31
Affects Version/s: 2.2.3

The ‘’RIT time(ms)' on Master UI page displays incorrect occasionally. 

If the Master page refreshed before the TRSP submitted, the RIT time is current time since rs.getStamp() = zero.

  !image-2021-01-11-17-32-21-975.png!
Bug: Print split policy in use on Region open (as well as split policy vitals)
Status: Resolved | Priority: Trivial | Resolution: Fixed
Created: 12/Mar/21 00:49

On Region open, add to the open message the split and flush policies in place; they are printed no where else. For split policy, list vitals like split size for the Region; for the likes of ConstantSizeSplitPolicy there can be high variance in size so dump out what we've figured.
Bug: [Documentation] Add a comment when using Secure HTTP (HTTPS) for the Web UI
Status: Resolved | Priority: Trivial | Resolution: Fixed
Created: 12/Jan/21 08:39
Affects Version/s: 2.0.0

When I configured https for the HBase web UI according to the document(set {{hbase.ssl.enabled}} to {{true}} in _hbase-site.xml_), there are the following errors:
{quote}2021-01-29 11:25:19,360 ERROR [main] master.HMasterCommandLine: Master exiting2021-01-29 11:25:19,360 ERROR [main] master.HMasterCommandLine: Master exitingjava.lang.RuntimeException: Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster.  at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2910) at org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:236) at org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:140) at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76) at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:149) at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:2921)Caused by: java.io.IOException: Problem starting http server at org.apache.hadoop.hbase.http.HttpServer.start(HttpServer.java:1006) at org.apache.hadoop.hbase.http.InfoServer.start(InfoServer.java:100) at org.apache.hadoop.hbase.regionserver.HRegionServer.putUpWebUI(HRegionServer.java:2015) at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:627) at org.apache.hadoop.hbase.master.HMaster.<init>(HMaster.java:472) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.apache.hadoop.hbase.master.HMaster.constructMaster(HMaster.java:2903) ... 5 moreCaused by: java.lang.IllegalStateException: no valid keystore
{quote}
According to the following link (https://community.cloudera.com/t5/Community-Articles/Enable-HTTPS-SSL-for-HBASE-Master-UI/ta-p/247031), I found that SSL certificate and SSL configuration are required. In the configuration document of hbase, we do not need to write a detailed configuration process, but we need to be reminded: only modifying the parameters according to the configuration steps will not take effect.

I think we need to add hints to the document(Please prepare SSL certificate and ssl configuration file in advance)：
{quote}
h3. 59.1. Using Secure HTTP (HTTPS) for the Web UI

A default HBase install uses insecure HTTP connections for Web UIs for the master and region servers. To enable secure HTTP (HTTPS) connections instead, set {{hbase.ssl.enabled}} to {{true}} in _hbase-site.xml(Please prepare SSL certificate and ssl configuration file in advance)_.
{quote}