HBASE-11415 [PE] Dump config before running test

This commit is contained in:
stack 2014-06-26 12:58:03 -07:00
parent 18c5cf9e43
commit 96681210a7
1 changed files with 146 additions and 31 deletions

View File

@ -112,6 +112,10 @@ import org.htrace.impl.ProbabilitySampler;
*/ */
public class PerformanceEvaluation extends Configured implements Tool { public class PerformanceEvaluation extends Configured implements Tool {
protected static final Log LOG = LogFactory.getLog(PerformanceEvaluation.class.getName()); protected static final Log LOG = LogFactory.getLog(PerformanceEvaluation.class.getName());
private static final ObjectMapper MAPPER = new ObjectMapper();
static {
MAPPER.configure(SORT_PROPERTIES_ALPHABETICALLY, true);
}
public static final String TABLE_NAME = "TestTable"; public static final String TABLE_NAME = "TestTable";
public static final byte[] FAMILY_NAME = Bytes.toBytes("info"); public static final byte[] FAMILY_NAME = Bytes.toBytes("info");
@ -337,7 +341,7 @@ public class PerformanceEvaluation extends Configured implements Tool {
@Override @Override
public Long call() throws Exception { public Long call() throws Exception {
TestOptions threadOpts = new TestOptions(opts); TestOptions threadOpts = new TestOptions(opts);
threadOpts.startRow = index * threadOpts.perClientRunRows; if (threadOpts.startRow == 0) threadOpts.startRow = index * threadOpts.perClientRunRows;
long elapsedTime = runOneClient(cmd, getConf(), threadOpts, new Status() { long elapsedTime = runOneClient(cmd, getConf(), threadOpts, new Status() {
public void setStatus(final String msg) throws IOException { public void setStatus(final String msg) throws IOException {
LOG.info(msg); LOG.info(msg);
@ -434,15 +438,14 @@ public class PerformanceEvaluation extends Configured implements Tool {
Map<Integer, String> m = new TreeMap<Integer, String>(); Map<Integer, String> m = new TreeMap<Integer, String>();
Hash h = MurmurHash.getInstance(); Hash h = MurmurHash.getInstance();
int perClientRows = (opts.totalRows / opts.numClientThreads); int perClientRows = (opts.totalRows / opts.numClientThreads);
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SORT_PROPERTIES_ALPHABETICALLY, true);
try { try {
for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) {
for (int j = 0; j < opts.numClientThreads; j++) { for (int j = 0; j < opts.numClientThreads; j++) {
TestOptions next = new TestOptions(opts); TestOptions next = new TestOptions(opts);
next.startRow = (j * perClientRows) + (i * (perClientRows/10)); next.startRow = (j * perClientRows) + (i * (perClientRows/10));
next.perClientRunRows = perClientRows / 10; next.perClientRunRows = perClientRows / 10;
String s = mapper.writeValueAsString(next); String s = MAPPER.writeValueAsString(next);
LOG.info("maptask input=" + s);
int hash = h.hash(Bytes.toBytes(s)); int hash = h.hash(Bytes.toBytes(s));
m.put(hash, s); m.put(hash, s);
} }
@ -488,6 +491,32 @@ public class PerformanceEvaluation extends Configured implements Tool {
* This makes tracking all these arguments a little easier. * This makes tracking all these arguments a little easier.
*/ */
static class TestOptions { static class TestOptions {
boolean nomapred = false;
boolean filterAll = false;
int startRow = 0;
float size = 1.0f;
int perClientRunRows = DEFAULT_ROWS_PER_GB;
int numClientThreads = 1;
int totalRows = DEFAULT_ROWS_PER_GB;
float sampleRate = 1.0f;
double traceRate = 0.0;
String tableName = TABLE_NAME;
boolean flushCommits = true;
boolean writeToWAL = true;
boolean autoFlush = false;
boolean oneCon = false;
boolean useTags = false;
int noOfTags = 1;
boolean reportLatency = false;
int multiGet = 0;
boolean inMemoryCF = false;
int presplitRegions = 0;
Compression.Algorithm compression = Compression.Algorithm.NONE;
BloomType bloomType = BloomType.ROW;
DataBlockEncoding blockEncoding = DataBlockEncoding.NONE;
boolean valueRandom = false;
int valueSize = DEFAULT_VALUE_LENGTH;
int period = (this.perClientRunRows / 10) == 0? perClientRunRows: perClientRunRows / 10;
public TestOptions() {} public TestOptions() {}
@ -520,32 +549,109 @@ public class PerformanceEvaluation extends Configured implements Tool {
this.period = that.period; this.period = that.period;
} }
public boolean nomapred = false; public boolean isNomapred() {
public boolean filterAll = false; return nomapred;
public int startRow = 0; }
public float size = 1.0f;
public int perClientRunRows = DEFAULT_ROWS_PER_GB; public boolean isFilterAll() {
public int numClientThreads = 1; return filterAll;
public int totalRows = DEFAULT_ROWS_PER_GB; }
public float sampleRate = 1.0f;
public double traceRate = 0.0; public int getStartRow() {
public String tableName = TABLE_NAME; return startRow;
public boolean flushCommits = true; }
public boolean writeToWAL = true;
public boolean autoFlush = false; public float getSize() {
public boolean oneCon = false; return size;
public boolean useTags = false; }
public int noOfTags = 1;
public boolean reportLatency = false; public int getPerClientRunRows() {
public int multiGet = 0; return perClientRunRows;
public boolean inMemoryCF = false; }
public int presplitRegions = 0;
public Compression.Algorithm compression = Compression.Algorithm.NONE; public int getNumClientThreads() {
public BloomType bloomType = BloomType.ROW; return numClientThreads;
public DataBlockEncoding blockEncoding = DataBlockEncoding.NONE; }
public boolean valueRandom = false;
public int valueSize = DEFAULT_VALUE_LENGTH; public int getTotalRows() {
public int period = (this.perClientRunRows / 10) == 0? perClientRunRows: perClientRunRows / 10; return totalRows;
}
public float getSampleRate() {
return sampleRate;
}
public double getTraceRate() {
return traceRate;
}
public String getTableName() {
return tableName;
}
public boolean isFlushCommits() {
return flushCommits;
}
public boolean isWriteToWAL() {
return writeToWAL;
}
public boolean isAutoFlush() {
return autoFlush;
}
public boolean isUseTags() {
return useTags;
}
public int getNoOfTags() {
return noOfTags;
}
public boolean isReportLatency() {
return reportLatency;
}
public int getMultiGet() {
return multiGet;
}
public boolean isInMemoryCF() {
return inMemoryCF;
}
public int getPresplitRegions() {
return presplitRegions;
}
public Compression.Algorithm getCompression() {
return compression;
}
public DataBlockEncoding getBlockEncoding() {
return blockEncoding;
}
public boolean isValueRandom() {
return valueRandom;
}
public int getValueSize() {
return valueSize;
}
public int getPeriod() {
return period;
}
public BloomType getBloomType() {
return bloomType;
}
public boolean isOneCon() {
return oneCon;
}
} }
/* /*
@ -1196,6 +1302,9 @@ public class PerformanceEvaluation extends Configured implements Tool {
private void runTest(final Class<? extends Test> cmd, TestOptions opts) throws IOException, private void runTest(final Class<? extends Test> cmd, TestOptions opts) throws IOException,
InterruptedException, ClassNotFoundException { InterruptedException, ClassNotFoundException {
// Log the configuration we're going to run with. Uses JSON mapper because lazy. It'll do
// the TestOptions introspection for us and dump the output in a readable format.
LOG.info(cmd.getSimpleName() + " test run options=" + MAPPER.writeValueAsString(opts));
HBaseAdmin admin = null; HBaseAdmin admin = null;
try { try {
admin = new HBaseAdmin(getConf()); admin = new HBaseAdmin(getConf());
@ -1256,7 +1365,7 @@ public class PerformanceEvaluation extends Configured implements Tool {
System.err.println(" bloomFilter Bloom filter type, one of " + Arrays.toString(BloomType.values())); System.err.println(" bloomFilter Bloom filter type, one of " + Arrays.toString(BloomType.values()));
System.err.println(" valueSize Pass value size to use: Default: 1024"); System.err.println(" valueSize Pass value size to use: Default: 1024");
System.err.println(" valueRandom Set if we should vary value size between 0 and " + System.err.println(" valueRandom Set if we should vary value size between 0 and " +
"'valueSize': Default: Not set."); "'valueSize'; set on read for stats on size: Default: Not set.");
System.err.println(" period Report every 'period' rows: " + System.err.println(" period Report every 'period' rows: " +
"Default: opts.perClientRunRows / 10"); "Default: opts.perClientRunRows / 10");
System.err.println(); System.err.println();
@ -1329,6 +1438,12 @@ public class PerformanceEvaluation extends Configured implements Tool {
continue; continue;
} }
final String startRow = "--startRow=";
if (cmd.startsWith(startRow)) {
opts.startRow = Integer.parseInt(cmd.substring(startRow.length()));
continue;
}
final String sampleRate = "--sampleRate="; final String sampleRate = "--sampleRate=";
if (cmd.startsWith(sampleRate)) { if (cmd.startsWith(sampleRate)) {
opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length())); opts.sampleRate = Float.parseFloat(cmd.substring(sampleRate.length()));