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

Elliott Clark updated HBASE-7220:
---------------------------------

    Attachment: HBASE-7220-0.patch

This patch for me moved creating a table with 9k regions from 110 seconds to 52 
seconds.

* Created a cache buster runnable
* async clears the jmx cache
* merges any clears that happen close together.
                
> Creating a table with 3000 regions on 2 nodes fails after 1 hour
> ----------------------------------------------------------------
>
>                 Key: HBASE-7220
>                 URL: https://issues.apache.org/jira/browse/HBASE-7220
>             Project: HBase
>          Issue Type: Bug
>          Components: metrics, Performance, regionserver
>    Affects Versions: 0.96.0
>            Reporter: nkeywal
>            Assignee: Elliott Clark
>         Attachments: HBASE-7220-0.patch
>
>
> I'm trying to create a table with 3000 regions on two regions servers, from 
> the shell.
> It's ok on trunk a standalone config.
> It's ok on 0.94
> It's not ok on trunk: it fails after around 1 hour.
> If I remove all the code related to metrics in HRegion, the 3000 regions are 
> created in 3 minutes (twice faster than the 0.94).
> On trunk, the region server spends its time in "waitForWork", while the 
> master is in the tcp connection related code. It's a 1Gb network.
> I haven't looked at the metric code itself.
> Patch used to remove the metrics from HRegion:
> {noformat}
> index c70e9ab..6677e65 100644
> --- 
> a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
> +++ 
> b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
> @@ -364,7 +364,7 @@ public class HRegion implements HeapSize { // , Writable{
>    private HTableDescriptor htableDescriptor = null;
>    private RegionSplitPolicy splitPolicy;
>  
> -  private final MetricsRegion metricsRegion;
> +  private final MetricsRegion metricsRegion = null;
>  
>    /**
>     * Should only be used for testing purposes
> @@ -388,7 +388,7 @@ public class HRegion implements HeapSize { // , Writable{
>      this.coprocessorHost = null;
>      this.scannerReadPoints = new ConcurrentHashMap<RegionScanner, Long>();
>  
> -    this.metricsRegion = new MetricsRegion(new 
> MetricsRegionWrapperImpl(this));
> +    //this.metricsRegion = new MetricsRegion(new 
> MetricsRegionWrapperImpl(this));
>    }
>  
>    /**
> @@ -451,7 +451,7 @@ public class HRegion implements HeapSize { // , Writable{
>      this.regiondir = getRegionDir(this.tableDir, encodedNameStr);
>      this.scannerReadPoints = new ConcurrentHashMap<RegionScanner, Long>();
>  
> -    this.metricsRegion = new MetricsRegion(new 
> MetricsRegionWrapperImpl(this));
> +    //this.metricsRegion = new MetricsRegion(new 
> MetricsRegionWrapperImpl(this));
>  
>      /*
>       * timestamp.slop provides a server-side constraint on the timestamp. 
> This
> @@ -1024,7 +1024,7 @@ public class HRegion implements HeapSize { // , 
> Writable{
>          status.setStatus("Running coprocessor post-close hooks");
>          this.coprocessorHost.postClose(abort);
>        }
> -      this.metricsRegion.close();
> +      //this.metricsRegion.close();
>        status.markComplete("Closed");
>        LOG.info("Closed " + this);
>        return result;
> @@ -2331,11 +2331,11 @@ public class HRegion implements HeapSize { // , 
> Writable{
>        if (noOfPuts > 0) {
>          // There were some Puts in the batch.
>          double noOfMutations = noOfPuts + noOfDeletes;
> -        this.metricsRegion.updatePut();
> +        //this.metricsRegion.updatePut();
>        }
>        if (noOfDeletes > 0) {
>          // There were some Deletes in the batch.
> -        this.metricsRegion.updateDelete();
> +        //this.metricsRegion.updateDelete();
>        }
>        if (!success) {
>          for (int i = firstIndex; i < lastIndexExclusive; i++) {
> @@ -4270,7 +4270,7 @@ public class HRegion implements HeapSize { // , 
> Writable{
>  
>      // do after lock
>  
> -    this.metricsRegion.updateGet();
> +    //this.metricsRegion.updateGet();
>  
>      return results;
>    }
> @@ -4657,7 +4657,7 @@ public class HRegion implements HeapSize { // , 
> Writable{
>        closeRegionOperation();
>      }
>  
> -    this.metricsRegion.updateAppend();
> +    //this.metricsRegion.updateAppend();
>  
>  
>      if (flush) {
> @@ -4795,7 +4795,7 @@ public class HRegion implements HeapSize { // , 
> Writable{
>          mvcc.completeMemstoreInsert(w);
>        }
>        closeRegionOperation();
> -      this.metricsRegion.updateIncrement();
> +      //this.metricsRegion.updateIncrement();
>      }
>  
>      if (flush) {
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to