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 2012/01/05 00:46:52 UTC
svn commit: r1227400 -
/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RegionPlacement.java
Author: nspiegelberg
Date: Wed Jan 4 23:46:51 2012
New Revision: 1227400
URL: http://svn.apache.org/viewvc?rev=1227400&view=rev
Log:
[master] Tool for region placement optionally enforces rack policy
Summary:
Explicit region placement may be desired in situations where the 2-rack
policy for three replicas cannot be satisfied. The region placement tool
takes an optional parameter which indicates whether or not to enforce
the 2-rack policy.
Test Plan: Run on a cluster
Reviewers: liyintang, kranganathan
Reviewed By: liyintang
CC: hbase-eng@lists, liyintang
Differential Revision: 379830
Modified:
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RegionPlacement.java
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RegionPlacement.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RegionPlacement.java?rev=1227400&r1=1227399&r2=1227400&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RegionPlacement.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/RegionPlacement.java Wed Jan 4 23:46:51 2012
@@ -58,11 +58,14 @@ public class RegionPlacement {
private Configuration conf;
private DNSToSwitchMapping switchMapping;
private Map<HServerInfo, String> rackCache;
+ private final boolean enforceRackPolicy;
- public RegionPlacement(Configuration conf) throws IOException {
+ public RegionPlacement(Configuration conf, boolean enforceRackPolicy)
+ throws IOException {
this.conf = conf;
this.switchMapping = new IPv4AddressTruncationMapping();
this.rackCache = new HashMap<HServerInfo, String>();
+ this.enforceRackPolicy = enforceRackPolicy;
}
/**
@@ -306,14 +309,16 @@ public class RegionPlacement {
+ " (" + localityPerServer[i][tertiaryAssignment[i]] + ")");
// Validate that the assignments satisfy the rack constraints.
- if (getRack(assignment.get(0)).equals(getRack(assignment.get(1))) ||
- getRack(assignment.get(0)).equals(getRack(assignment.get(2)))) {
- throw new RuntimeException("Primary and secondary for " +
- regions.get(i).getRegionNameAsString() + " on same rack");
- }
- if (!getRack(assignment.get(1)).equals(getRack(assignment.get(2)))) {
- throw new RuntimeException("Secondaries for " +
- regions.get(i).getRegionNameAsString() + " on different racks");
+ if (enforceRackPolicy) {
+ if (getRack(assignment.get(0)).equals(getRack(assignment.get(1))) ||
+ getRack(assignment.get(0)).equals(getRack(assignment.get(2)))) {
+ throw new RuntimeException("Primary and secondary for " +
+ regions.get(i).getRegionNameAsString() + " on same rack");
+ }
+ if (!getRack(assignment.get(1)).equals(getRack(assignment.get(2)))) {
+ throw new RuntimeException("Secondaries for " +
+ regions.get(i).getRegionNameAsString() + " on different racks");
+ }
}
assignments.put(regions.get(i), assignment);
@@ -469,8 +474,8 @@ public class RegionPlacement {
}
private static void printHelp(Options opt) {
- new HelpFormatter().printHelp("RegionPlacement < -w | -n | -v | -t | -h >",
- opt);
+ new HelpFormatter().printHelp(
+ "RegionPlacement < -w | -n | -v | -t | -h > [-r]", opt);
}
public static void main(String[] args) throws IOException,
@@ -481,24 +486,27 @@ public class RegionPlacement {
opt.addOption("v", "verify", false, "check current placement against META");
opt.addOption("t", "test", false, "test RandomizedMatrix");
opt.addOption("h", "help", false, "print usage");
+ opt.addOption("r", "enforce-rack", false, "enforce 2-rack policy");
try {
CommandLine cmd = new GnuParser().parse(opt, args);
+ boolean enforceRackPolicy = cmd.hasOption("r") ||
+ cmd.hasOption("enforce-rack");
if (cmd.hasOption("h") || cmd.hasOption("help")) {
printHelp(opt);
} else if (cmd.hasOption("t") || cmd.hasOption("test")) {
RandomizedMatrix.test();
} else if (cmd.hasOption("v") || cmd.hasOption("verify")) {
Configuration conf = HBaseConfiguration.create();
- RegionPlacement rp = new RegionPlacement(conf);
+ RegionPlacement rp = new RegionPlacement(conf, enforceRackPolicy);
rp.verifyPlacement();
} else if (cmd.hasOption("n") || cmd.hasOption("dry-run")) {
Configuration conf = HBaseConfiguration.create();
- RegionPlacement rp = new RegionPlacement(conf);
+ RegionPlacement rp = new RegionPlacement(conf, enforceRackPolicy);
Map<HRegionInfo, List<HServerInfo>> assignments = rp.placeRegions();
rp.verifyAssignments(assignments);
} else if (cmd.hasOption("w") || cmd.hasOption("write")) {
Configuration conf = HBaseConfiguration.create();
- RegionPlacement rp = new RegionPlacement(conf);
+ RegionPlacement rp = new RegionPlacement(conf, enforceRackPolicy);
Map<HRegionInfo, List<HServerInfo>> assignments = rp.placeRegions();
rp.verifyAssignments(assignments);
rp.putFavoredNodes(assignments);