diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.java hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.java index 23f59e6..dcc4943 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.java @@ -40,6 +40,8 @@ import org.apache.hadoop.mapreduce.InputSplit; import org.apache.hadoop.mapreduce.TaskAttemptContext; import org.apache.hadoop.util.StringUtils; +import com.google.common.annotations.VisibleForTesting; + /** * Iterate over an HBase table data, return (ImmutableBytesWritable, Result) * pairs. @@ -53,8 +55,8 @@ public class TableRecordReaderImpl { private static final Log LOG = LogFactory.getLog(TableRecordReaderImpl.class); // HBASE_COUNTER_GROUP_NAME is the name of mapreduce counter group for HBase - private static final String HBASE_COUNTER_GROUP_NAME = - "HBase Counters"; + @VisibleForTesting + static final String HBASE_COUNTER_GROUP_NAME = "HBase Counters"; private ResultScanner scanner = null; private Scan scan = null; private Scan currentScan = null; @@ -269,7 +271,7 @@ public class TableRecordReaderImpl { * @throws IOException */ private void updateCounters() throws IOException { - ScanMetrics scanMetrics = this.scan.getScanMetrics(); + ScanMetrics scanMetrics = currentScan.getScanMetrics(); if (scanMetrics == null) { return; } diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduce.java hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduce.java index 690e776..d702e0d 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduce.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestTableMapReduce.java @@ -18,6 +18,7 @@ */ package org.apache.hadoop.hbase.mapreduce; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -42,6 +43,8 @@ import org.apache.hadoop.hbase.io.ImmutableBytesWritable; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.testclassification.VerySlowMapReduceTests; import org.apache.hadoop.hbase.util.Bytes; +import org.apache.hadoop.mapreduce.Counter; +import org.apache.hadoop.mapreduce.Counters; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.junit.Test; @@ -121,6 +124,8 @@ public class TestTableMapReduce extends TestTableMapReduceBase { // verify map-reduce results verify(table.getName()); + + verifyJobCountersAreEmitted(job); } catch (InterruptedException e) { throw new IOException(e); } catch (ClassNotFoundException e) { @@ -134,6 +139,19 @@ public class TestTableMapReduce extends TestTableMapReduceBase { } } + /** + * Verify scan counters are emitted from the job + * @param job + * @throws IOException + */ + private void verifyJobCountersAreEmitted(Job job) throws IOException { + Counters counters = job.getCounters(); + Counter counter + = counters.findCounter(TableRecordReaderImpl.HBASE_COUNTER_GROUP_NAME, "RPC_CALLS"); + assertNotNull("Unable to find Job counter for HBase scan metrics, RPC_CALLS", counter); + assertTrue("Counter value for RPC_CALLS should be larger than 0", counter.getValue() > 0); + } + @Test(expected = TableNotEnabledException.class) public void testWritingToDisabledTable() throws IOException {