You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Anoop Sam John (JIRA)" <ji...@apache.org> on 2018/03/07 11:03:00 UTC

[jira] [Updated] (HBASE-20135) NullPointerException during reading bloom filter when upgraded from hbase-1 to hbase-2

     [ https://issues.apache.org/jira/browse/HBASE-20135?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Anoop Sam John updated HBASE-20135:
-----------------------------------
    Description: 
When upgraded from hbase-1 to hbase-2, found following exception logged multiple times in the log:
{code:java}
ERROR [StoreFileOpenerThread-test_cf-1] regionserver.StoreFileReader: Error reading bloom filter meta for GENERAL_BLOOM_META -- proceeding without
java.io.IOException: Comparator class org.apache.hadoop.hbase.KeyValue$RawBytesComparator is not instantiable
        at org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.createComparator(FixedFileTrailer.java:628)
        at org.apache.hadoop.hbase.io.hfile.CompoundBloomFilter.<init>(CompoundBloomFilter.java:79)
        at org.apache.hadoop.hbase.util.BloomFilterFactory.createFromMeta(BloomFilterFactory.java:104)
        at org.apache.hadoop.hbase.regionserver.StoreFileReader.loadBloomfilter(StoreFileReader.java:479)
        at org.apache.hadoop.hbase.regionserver.HStoreFile.open(HStoreFile.java:425)
        at org.apache.hadoop.hbase.regionserver.HStoreFile.initReader(HStoreFile.java:460)
        at org.apache.hadoop.hbase.regionserver.HStore.createStoreFileAndReader(HStore.java:671)
        at org.apache.hadoop.hbase.regionserver.HStore.lambda$openStoreFiles$0(HStore.java:537)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException{code}
 
Analysis from [~anoop.hbase]:
Checking the related code.  There seems no issue..  We are not going
to even fail reading the bloom.  In 2.0 code base we expect the
comparator class name to be null.  But in 1.x we write old KV based
Raw Bytes comparator class name.  So reading that back, we will return
class name as null and we get NPE it looks like.
{code}
 else if (comparatorClassName.equals("org.apache.hadoop.hbase.KeyValue$RawBytesComparator")
        || comparatorClassName.equals("org.apache.hadoop.hbase.util.Bytes$ByteArrayComparator"))
{
      // When the comparator to be used is Bytes.BYTES_RAWCOMPARATOR,
we just return null from here
      // Bytes.BYTES_RAWCOMPARATOR is not a CellComparator
      comparatorKlass = null;
    }
{code}
We can better do a null check before trying the comparator class
instantiation so that we can avoid this scary error logs 

  was:
When upgraded from hbase-1 to hbase-2, found following exception logged multiple times in the log:
{code:java}
ERROR [StoreFileOpenerThread-test_cf-1] regionserver.StoreFileReader: Error reading bloom filter meta for GENERAL_BLOOM_META -- proceeding without
java.io.IOException: Comparator class org.apache.hadoop.hbase.KeyValue$RawBytesComparator is not instantiable
        at org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.createComparator(FixedFileTrailer.java:628)
        at org.apache.hadoop.hbase.io.hfile.CompoundBloomFilter.<init>(CompoundBloomFilter.java:79)
        at org.apache.hadoop.hbase.util.BloomFilterFactory.createFromMeta(BloomFilterFactory.java:104)
        at org.apache.hadoop.hbase.regionserver.StoreFileReader.loadBloomfilter(StoreFileReader.java:479)
        at org.apache.hadoop.hbase.regionserver.HStoreFile.open(HStoreFile.java:425)
        at org.apache.hadoop.hbase.regionserver.HStoreFile.initReader(HStoreFile.java:460)
        at org.apache.hadoop.hbase.regionserver.HStore.createStoreFileAndReader(HStore.java:671)
        at org.apache.hadoop.hbase.regionserver.HStore.lambda$openStoreFiles$0(HStore.java:537)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException{code}
 
Analysis from [~anoop.hbase]:
Checking the related code.  There seems no issue..  We are not going
to even fail reading the bloom.  In 2.0 code base we expect the
comparator class name to be null.  But in 1.x we write old KV based
Raw Bytes comparator class name.  So reading that back, we will return
class name as null and we get NPE it looks like.

 else if (comparatorClassName.equals("org.apache.hadoop.hbase.KeyValue$RawBytesComparator")
        || comparatorClassName.equals("org.apache.hadoop.hbase.util.Bytes$ByteArrayComparator"))
{
      // When the comparator to be used is Bytes.BYTES_RAWCOMPARATOR,
we just return null from here
      // Bytes.BYTES_RAWCOMPARATOR is not a CellComparator
      comparatorKlass = null;
    }

We can better do a null check before trying the comparator class
instantiation so that we can avoid this scary error logs :-)


> NullPointerException during reading bloom filter when upgraded from hbase-1 to hbase-2
> --------------------------------------------------------------------------------------
>
>                 Key: HBASE-20135
>                 URL: https://issues.apache.org/jira/browse/HBASE-20135
>             Project: HBase
>          Issue Type: Improvement
>    Affects Versions: 2.0.0-beta-2
>            Reporter: Umesh Agashe
>            Priority: Minor
>             Fix For: 2.0.0
>
>
> When upgraded from hbase-1 to hbase-2, found following exception logged multiple times in the log:
> {code:java}
> ERROR [StoreFileOpenerThread-test_cf-1] regionserver.StoreFileReader: Error reading bloom filter meta for GENERAL_BLOOM_META -- proceeding without
> java.io.IOException: Comparator class org.apache.hadoop.hbase.KeyValue$RawBytesComparator is not instantiable
>         at org.apache.hadoop.hbase.io.hfile.FixedFileTrailer.createComparator(FixedFileTrailer.java:628)
>         at org.apache.hadoop.hbase.io.hfile.CompoundBloomFilter.<init>(CompoundBloomFilter.java:79)
>         at org.apache.hadoop.hbase.util.BloomFilterFactory.createFromMeta(BloomFilterFactory.java:104)
>         at org.apache.hadoop.hbase.regionserver.StoreFileReader.loadBloomfilter(StoreFileReader.java:479)
>         at org.apache.hadoop.hbase.regionserver.HStoreFile.open(HStoreFile.java:425)
>         at org.apache.hadoop.hbase.regionserver.HStoreFile.initReader(HStoreFile.java:460)
>         at org.apache.hadoop.hbase.regionserver.HStore.createStoreFileAndReader(HStore.java:671)
>         at org.apache.hadoop.hbase.regionserver.HStore.lambda$openStoreFiles$0(HStore.java:537)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>         at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
>         at java.lang.Thread.run(Thread.java:748)
> Caused by: java.lang.NullPointerException{code}
>  
> Analysis from [~anoop.hbase]:
> Checking the related code.  There seems no issue..  We are not going
> to even fail reading the bloom.  In 2.0 code base we expect the
> comparator class name to be null.  But in 1.x we write old KV based
> Raw Bytes comparator class name.  So reading that back, we will return
> class name as null and we get NPE it looks like.
> {code}
>  else if (comparatorClassName.equals("org.apache.hadoop.hbase.KeyValue$RawBytesComparator")
>         || comparatorClassName.equals("org.apache.hadoop.hbase.util.Bytes$ByteArrayComparator"))
> {
>       // When the comparator to be used is Bytes.BYTES_RAWCOMPARATOR,
> we just return null from here
>       // Bytes.BYTES_RAWCOMPARATOR is not a CellComparator
>       comparatorKlass = null;
>     }
> {code}
> We can better do a null check before trying the comparator class
> instantiation so that we can avoid this scary error logs 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)