HBase Become Faulty When I Set a Quota for the Directory Used by HBase in HDFS
Question
Why does HBase become faulty when I set quota for the directory used by HBase in HDFS?
Answer
The flush operation of a table is to write memstore data to HDFS.
If the HDFS directory does not have sufficient disk space quota, the flush operation will fail and the region server will stop.
Caused by: org.apache.hadoop.hdfs.protocol.DSQuotaExceededException: The DiskSpace quota of /hbase/data/<namespace>/<tableName> is exceeded: quota = 1024 B = 1 KB but diskspace consumed = 402655638 B = 384.00 MB ?at org.apache.hadoop.hdfs.server.namenode.DirectoryWithQuotaFeature.verifyStoragespaceQuota(DirectoryWithQuotaFeature.java:211) ?at org.apache.hadoop.hdfs.server.namenode.DirectoryWithQuotaFeature.verifyQuota(DirectoryWithQuotaFeature.java:239) ?at org.apache.hadoop.hdfs.server.namenode.FSDirectory.verifyQuota(FSDirectory.java:882) ?at org.apache.hadoop.hdfs.server.namenode.FSDirectory.updateCount(FSDirectory.java:711) ?at org.apache.hadoop.hdfs.server.namenode.FSDirectory.updateCount(FSDirectory.java:670) ?at org.apache.hadoop.hdfs.server.namenode.FSDirectory.addBlock(FSDirectory.java:495)
In the preceding exception, the disk space quota of the /hbase/data/<namespace>/<tableName> table is 1 KB, but the memstore data is 384.00 MB. Therefore, the flush operation fails and the region server stops.
When the region server is terminated, HMaster replays the WAL file of the terminated region server to restore data. The disk space quota is limited. As a result, the replay operation of the WAL file fails, and the HMaster process exits unexpectedly.
2016-07-28 19:11:40,352 | FATAL | MASTER_SERVER_OPERATIONS-10-91-9-131:16000-0 | Caught throwable while processing event M_SERVER_SHUTDOWN | org.apache.hadoop.hbase.master.HMaster.abort(HMaster.java:2474) java.io.IOException: failed log splitting for 10-91-9-131,16020,1469689987884, will retry ?at org.apache.hadoop.hbase.master.handler.ServerShutdownHandler.resubmit(ServerShutdownHandler.java:365) ?at org.apache.hadoop.hbase.master.handler.ServerShutdownHandler.process(ServerShutdownHandler.java:220) ?at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:129) ?at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ?at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ?at java.lang.Thread.run(Thread.java:745) Caused by: java.io.IOException: error or interrupted while splitting logs in [hdfs://hacluster/hbase/WALs/<RS-Hostname>,<RS-Port>,<startcode>-splitting] Task = installed = 6 done = 3 error = 3 ?at org.apache.hadoop.hbase.master.SplitLogManager.splitLogDistributed(SplitLogManager.java:290) ?at org.apache.hadoop.hbase.master.MasterFileSystem.splitLog(MasterFileSystem.java:402) ?at org.apache.hadoop.hbase.master.MasterFileSystem.splitLog(MasterFileSystem.java:375)
Therefore, you cannot set the quota value for the HBase directory in HDFS. If the exception occurs, perform the following operations:
- Run the kinit Username command on the client to enable the HBase user to obtain security authentication.
- Run the hdfs dfs -count -q/hbase/data/<namespace>/<tableName> command to check the allocated disk space quota.
- Run the following command to cancel the quota limit and restore HBase:
hdfs dfsadmin -clrSpaceQuota/hbase/data/<namespace>/<tableName>
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.