You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ns...@apache.org on 2011/10/11 04:24:55 UTC
svn commit: r1181603 - in
/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master:
HMaster.java RegionManager.java
Author: nspiegelberg
Date: Tue Oct 11 02:24:55 2011
New Revision: 1181603
URL: http://svn.apache.org/viewvc?rev=1181603&view=rev
Log:
Initialize the preferred region assignment after the master joins the cluster
Summary:
1) Initialize the preferred region assignment after the master joins the
cluster
2) optimize the assignment code
Test Plan:
run all the unit tests
tested in the Dev-Cluster to confirm that scanning dfs locality after the log
splitting.
Reviewed By: kannan
Reviewers: kannan, kranganathan, nspiegelberg, mbautin
CC: hbase@lists, , kannan
Differential Revision: 281282
Modified:
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java
Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/HMaster.java?rev=1181603&r1=1181602&r2=1181603&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/HMaster.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/HMaster.java Tue Oct 11 02:24:55 2011
@@ -169,8 +169,8 @@ public class HMaster extends Thread impl
// True if this is the master that started the cluster.
boolean isClusterStartup;
- private long masterStartupTime;
- private Map<String, String> preferredRegionToRegionServerMapping;
+ private long masterStartupTime = 0;
+ private Map<String, String> preferredRegionToRegionServerMapping = null;
private long applyPreferredAssignmentPeriod = 0l;
private long holdRegionForBestLocalityPeriod = 0l;
@@ -280,33 +280,6 @@ public class HMaster extends Thread impl
// We're almost open for business
this.closed.set(false);
LOG.info("HMaster w/ hbck initialized on " + this.address.toString());
-
- // assign the regions based on the region locality in this period of time
- this.applyPreferredAssignmentPeriod =
- conf.getLong("hbase.master.applyPreferredAssignment.period", 5 * 60 * 1000);
-
- // if a region's best region server hasn't checked in for this much time
- // since master startup, then the master is free to assign this region
- // out to any region server
- this.holdRegionForBestLocalityPeriod =
- conf.getLong("hbase.master.holdRegionForBestLocality.period",
- 1 * 60 * 1000);
-
- // disable scanning dfs by setting applyPreferredAssignmentPeriod to 0
- if (applyPreferredAssignmentPeriod > 0) {
- try {
- LOG.debug("get preferredRegionToHostMapping; expecting pause here");
- this.preferredRegionToRegionServerMapping =
- FSUtils.getRegionLocalityMappingFromFS(fs, rootdir);
- } catch (Exception e) {
- LOG.equals("Got unexpected exception when getting " +
- "preferredRegionToHostMapping : " + e.toString());
- // do not pause the master's construction
- preferredRegionToRegionServerMapping = null;
- }
- }
- // get the start time stamp after scanning the dfs
- masterStartupTime = System.currentTimeMillis();
}
public long getApplyPreferredAssignmentPeriod() {
@@ -324,6 +297,11 @@ public class HMaster extends Thread impl
public Map<String, String> getPreferredRegionToRegionServerMapping() {
return preferredRegionToRegionServerMapping;
}
+
+ public void clearPreferredRegionToRegionServerMapping() {
+ preferredRegionToRegionServerMapping = null;
+ }
+
/**
* Returns true if this master process was responsible for starting the
* cluster.
@@ -564,6 +542,7 @@ public class HMaster extends Thread impl
public void run() {
try {
joinCluster();
+ initPreferredAssignment();
startServiceThreads();
}catch (IOException e) {
LOG.fatal("Unhandled exception. Master quits.", e);
@@ -629,6 +608,35 @@ public class HMaster extends Thread impl
LOG.info("HMaster main thread exiting");
}
+ private void initPreferredAssignment() {
+ // assign the regions based on the region locality in this period of time
+ this.applyPreferredAssignmentPeriod =
+ conf.getLong("hbase.master.applyPreferredAssignment.period",
+ 5 * 60 * 1000);
+
+ // disable scanning dfs by setting applyPreferredAssignmentPeriod to 0
+ if (applyPreferredAssignmentPeriod > 0) {
+ // if a region's best region server hasn't checked in for this much time
+ // since master startup, then the master is free to assign this region
+ // out to any region server
+ this.holdRegionForBestLocalityPeriod =
+ conf.getLong("hbase.master.holdRegionForBestLocality.period",
+ 1 * 60 * 1000);
+ LOG.debug("get preferredRegionToHostMapping; expecting pause here");
+ try {
+ this.preferredRegionToRegionServerMapping =
+ FSUtils.getRegionLocalityMappingFromFS(fs, rootdir);
+ } catch (Exception e) {
+ LOG.equals("Got unexpected exception when getting " +
+ "preferredRegionToHostMapping : " + e.toString());
+ // do not pause the master's construction
+ preferredRegionToRegionServerMapping = null;
+ }
+ }
+ // get the start time stamp after scanning the dfs
+ masterStartupTime = System.currentTimeMillis();
+ }
+
/*
* Joins cluster. Checks to see if this instance of HBase is fresh or the
* master was started following a failover. In the second case, it inspects
Modified: hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java?rev=1181603&r1=1181602&r2=1181603&view=diff
==============================================================================
--- hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java (original)
+++ hbase/branches/0.89/src/main/java/org/apache/hadoop/hbase/master/RegionManager.java Tue Oct 11 02:24:55 2011
@@ -234,16 +234,27 @@ public class RegionManager {
boolean isSingleServer = this.master.numServers() == 1;
// have to add . at the end of host name
String hostName = info.getHostname();
+ boolean holdRegionForBestRegionServer = false;
+ boolean assignmentByLocality = false;
- long masterRunningTime = System.currentTimeMillis()
- - this.master.getMasterStartupTime();
- boolean assignmentByLocality = ((masterRunningTime < this.master
- .getApplyPreferredAssignmentPeriod()) &&
- this.master.getPreferredRegionToRegionServerMapping() != null) ?
- true : false;
-
- boolean holdRegionForBestRegionServer =
- (masterRunningTime < this.master.getHoldRegionForBestLocalityPeriod());
+ // only check assignmentByLocality when the
+ // PreferredRegionToRegionServerMapping is not null;
+ if (this.master.getPreferredRegionToRegionServerMapping() != null) {
+ long masterRunningTime = System.currentTimeMillis()
+ - this.master.getMasterStartupTime();
+ holdRegionForBestRegionServer =
+ masterRunningTime < this.master.getHoldRegionForBestLocalityPeriod();
+ assignmentByLocality =
+ masterRunningTime < this.master.getApplyPreferredAssignmentPeriod();
+
+ // once it has passed the ApplyPreferredAssignmentPeriod, clear up
+ // the quickStartRegionServerSet and PreferredRegionToRegionServerMapping
+ // and it won't check the assignmentByLocality anymore.
+ if (!assignmentByLocality) {
+ quickStartRegionServerSet = null;
+ this.master.clearPreferredRegionToRegionServerMapping();
+ }
+ }
if (assignmentByLocality) {
quickStartRegionServerSet.add(hostName);