From 3f4016bab87b4fe43bc761af47626f2c05248810 Mon Sep 17 00:00:00 2001 From: rahulgidwani Date: Tue, 21 Jul 2015 13:40:36 -0700 Subject: [PATCH] Adding option ./start-hbase --clean, provides a hint for a clean cluster startup (assign regions based on what is in meta even if regionservers shut down un-cleanly) --- bin/start-hbase.sh | 4 ++-- .../main/java/org/apache/hadoop/hbase/master/AssignmentManager.java | 6 ++++++ .../java/org/apache/hadoop/hbase/master/HMasterCommandLine.java | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/bin/start-hbase.sh b/bin/start-hbase.sh index 3a6145a..5726eea 100755 --- a/bin/start-hbase.sh +++ b/bin/start-hbase.sh @@ -24,7 +24,7 @@ # Start hadoop hbase daemons. # Run this on master node. -usage="Usage: start-hbase.sh" +usage="Usage: start-hbase.sh, if you are doing a Full cluster start you can pass the hint: start-hbase.sh --clean to help preserve previous region assignments" bin=`dirname "${BASH_SOURCE-$0}"` bin=`cd "$bin">/dev/null; pwd` @@ -55,7 +55,7 @@ then "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@ else "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" $commandToRun zookeeper - "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master + "$bin"/hbase-daemon.sh --config "${HBASE_CONF_DIR}" $commandToRun master $@ "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \ --hosts "${HBASE_REGIONSERVERS}" $commandToRun regionserver "$bin"/hbase-daemons.sh --config "${HBASE_CONF_DIR}" \ diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java index f7f98fe..1c3ceee 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/AssignmentManager.java @@ -539,6 +539,12 @@ public class AssignmentManager { LOG.info("Clean cluster startup. Assigning user regions"); assignAllUserRegions(allRegions); } + + if (this.server.getConfiguration().getBoolean("hbase.full.cluster.start", false)) { + // Hint to do a full cluster startup cluster startup. + LOG.info("Clean cluster startup forced via parameterized startup. Assigning user regions"); + assignAllUserRegions(allRegions); + } // unassign replicas of the split parents and the merged regions // the daughter replicas are opened in assignAllUserRegions if it was // not already opened. diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMasterCommandLine.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMasterCommandLine.java index 04078774..6d83b8a 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMasterCommandLine.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMasterCommandLine.java @@ -82,6 +82,7 @@ public class HMasterCommandLine extends ServerCommandLine { opt.addOption("masters", true, "Masters to start in this process"); opt.addOption("minRegionServers", true, "Minimum RegionServers needed to host user tables"); opt.addOption("backup", false, "Do not try to become HMaster until the primary fails"); + opt.addOption("clean", false, "Pass hint to HMaster that this is a clean cluster startup"); CommandLine cmd; try { @@ -92,6 +93,10 @@ public class HMasterCommandLine extends ServerCommandLine { return 1; } + if (cmd.hasOption("clean")) { + getConf().setBoolean("hbase.full.cluster.start", true); + LOG.debug("Requesting a clean cluster startup"); + } if (cmd.hasOption("minRegionServers")) { String val = cmd.getOptionValue("minRegionServers"); -- 2.1.0