HMaster is unable to start of HFile V1 is used
----------------------------------------------
Key: HBASE-4942
URL: https://issues.apache.org/jira/browse/HBASE-4942
Project: HBase
Issue Type: Bug
Components: io
Affects Versions: 0.92.0
Reporter: Ted Yu
Fix For: 0.92.0, 0.94.0
This was reported by HH Zhu ([email protected])
If the following is specified in hbase-site.xml:
{code}
<property>
<name>hfile.format.version</name>
<value>1</value>
</property>
{code}
Clear the hdfs directory "hbase.rootdir" so that MasterFileSystem.bootstrap()
is executed.
You would see:
{code}
java.lang.NullPointerException
at
org.apache.hadoop.hbase.io.hfile.HFileReaderV1.close(HFileReaderV1.java:358)
at
org.apache.hadoop.hbase.regionserver.StoreFile$Reader.close(StoreFile.java:1083)
at
org.apache.hadoop.hbase.regionserver.StoreFile.closeReader(StoreFile.java:570)
at org.apache.hadoop.hbase.regionserver.Store.close(Store.java:441)
at org.apache.hadoop.hbase.regionserver.HRegion.doClose(HRegion.java:782)
at org.apache.hadoop.hbase.regionserver.HRegion.close(HRegion.java:717)
at org.apache.hadoop.hbase.regionserver.HRegion.close(HRegion.java:688)
at
org.apache.hadoop.hbase.master.MasterFileSystem.bootstrap(MasterFileSystem.java:390)
at
org.apache.hadoop.hbase.master.MasterFileSystem.checkRootDir(MasterFileSystem.java:356)
at
org.apache.hadoop.hbase.master.MasterFileSystem.createInitialFileSystemLayout(MasterFileSystem.java:128)
at
org.apache.hadoop.hbase.master.MasterFileSystem.<init>(MasterFileSystem.java:113)
at
org.apache.hadoop.hbase.master.HMaster.finishInitialization(HMaster.java:435)
at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:314)
at java.lang.Thread.run(Thread.java:619)
{code}
The above exception would lead to:
{code}
java.lang.RuntimeException: HMaster Aborted
at
org.apache.hadoop.hbase.master.HMasterCommandLine.startMaster(HMasterCommandLine.java:152)
at
org.apache.hadoop.hbase.master.HMasterCommandLine.run(HMasterCommandLine.java:103)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at
org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:76)
at org.apache.hadoop.hbase.master.HMaster.main(HMaster.java:1512)
{code}
In org.apache.hadoop.hbase.master.HMaster.HMaster(Configuration conf), we have:
{code}
this.conf.setFloat(CacheConfig.HFILE_BLOCK_CACHE_SIZE_KEY, 0.0f);
{code}
When CacheConfig is instantiated, the following is called:
{code}
org.apache.hadoop.hbase.io.hfile.CacheConfig.instantiateBlockCache(Configuration
conf)
{code}
Since "hfile.block.cache.size" is 0.0, instantiateBlockCache() would return
null, resulting in blockCache field of CacheConfig to be null.
When master closes Root region,
org.apache.hadoop.hbase.io.hfile.HFileReaderV1.close(boolean evictOnClose)
would be called. cacheConf.getBlockCache() returns null, leading to master
abort.
The following should be called in HFileReaderV1.close(), similar to the code in
HFileReaderV2.close():
{code}
if (evictOnClose && cacheConf.isBlockCacheEnabled())
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira