Details

    • Sub-task
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • None
    • 3.0.0-alpha-1, 2.1.0, 2.0.1
    • Performance
    • None
    • Reviewed

    Description

      Flushing memstore is taking too long. It looks like we are doing a bunch of comparing out of a new facility in hbase2, the Segment scanner at flush time.

      Below is a patch from anoop.hbase. I had a similar more hacky version. Both undo the extra comparing we were seeing in perf tests.

      anastas and eshcar. Need your help please.

      As I read it, we are trying to flush the memstore snapshot (default, no IMC case). There is only ever going to be one Segment involved (even if IMC is enabled); the snapshot Segment. But the getScanners is returning a list (of one) Scanners and the scan is via the generic SegmentScanner which is all about a bunch of stuff we don't need when doing a flush so it seems to do more work than is necessary. It also supports scanning backwards which is not needed when trying to flush memstore.

      Do you see a problem doing a version of Anoops patch (whether IMC or not)? It makes a big difference in general throughput when the below patch is in place. Thanks.

      diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java
      index cbd60e5da3..c3dd972254 100644
      --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java
      +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.java
      @@ -40,7 +40,8 @@ public class MemStoreSnapshot implements Closeable {
           this.cellsCount = snapshot.getCellsCount();
           this.memStoreSize = snapshot.getMemStoreSize();
           this.timeRangeTracker = snapshot.getTimeRangeTracker();
      -    this.scanners = snapshot.getScanners(Long.MAX_VALUE, Long.MAX_VALUE);
      +    //this.scanners = snapshot.getScanners(Long.MAX_VALUE, Long.MAX_VALUE);
      +    this.scanners = snapshot.getScannersForSnapshot();
           this.tagsPresent = snapshot.isTagsPresent();
         }
      
      diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java
      index 70074bf3b4..279c4e50c8 100644
      --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java
      +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/Segment.java
      @@ -33,6 +33,7 @@ import org.apache.hadoop.hbase.KeyValueUtil;
       import org.apache.hadoop.hbase.io.TimeRange;
       import org.apache.hadoop.hbase.util.Bytes;
       import org.apache.hadoop.hbase.util.ClassSize;
      +import org.apache.hadoop.hbase.util.CollectionBackedScanner;
       import org.apache.yetus.audience.InterfaceAudience;
       import org.slf4j.Logger;
       import org.apache.hbase.thirdparty.com.google.common.annotations.VisibleForTesting;
      @@ -130,6 +131,10 @@ public abstract class Segment {
           return Collections.singletonList(new SegmentScanner(this, readPoint, order));
         }
      
      +  public List<KeyValueScanner> getScannersForSnapshot() {
      +    return Collections.singletonList(new CollectionBackedScanner(this.cellSet.get(), comparator));
      +  }
      +
         /**
          * @return whether the segment has any cells
          */
      

      Attachments

        1. HBASE-20628.branch-2.0.001.patch
          2 kB
          Michael Stack
        2. HBASE-20628.branch-2.0.001.patch
          2 kB
          Michael Stack
        3. HBASE-20628.branch-2.0.001 (1).patch
          2 kB
          Michael Stack
        4. HBASE-20628.branch-2.0.002.patch
          4 kB
          Michael Stack
        5. HBASE-20628.branch-2.0.003.patch
          6 kB
          Michael Stack
        6. HBASE-20628.branch-2.0.004.patch
          6 kB
          Michael Stack
        7. hits.003.png
          12 kB
          Michael Stack
        8. hits-20628.png
          12 kB
          Michael Stack
        9. Screen Shot 2018-05-25 at 9.38.00 AM.png
          89 kB
          Michael Stack

        Issue Links

          Activity

            People

              stack Michael Stack
              stack Michael Stack
              Votes:
              0 Vote for this issue
              Watchers:
              8 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: