From b5856f85a1804c16971109e1ac1166c19ec3ba69 Mon Sep 17 00:00:00 2001 From: a00903917 Date: Wed, 22 Oct 2014 21:21:36 +0530 Subject: [PATCH] HBASE-12306 CellCounter output's wrong value for Total Families Across all Rows in output file --- .../apache/hadoop/hbase/mapreduce/CellCounter.java | 7 ++-- .../hadoop/hbase/mapreduce/TestCellCounter.java | 42 ++++++++++++++++++++++ 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/source/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java b/source/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java index 2661bed..50588e3 100644 --- a/source/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java +++ b/source/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/CellCounter.java @@ -122,9 +122,10 @@ public class CellCounter { if (!thisRowFamilyName.equals(currentFamilyName)) { currentFamilyName = thisRowFamilyName; context.getCounter("CF", thisRowFamilyName).increment(1); - context.write(new Text("Total Families Across all Rows"), - new IntWritable(1)); - context.write(new Text(thisRowFamilyName), new IntWritable(1)); + if (1 == context.getCounter("CF", thisRowFamilyName).getValue()) { + context.write(new Text("Total Families Across all Rows"), new IntWritable(1)); + context.write(new Text(thisRowFamilyName), new IntWritable(1)); + } } String thisRowQualifierName = thisRowFamilyName + separator + Bytes.toStringBinary(CellUtil.cloneQualifier(value)); diff --git a/source/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java b/source/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java index 1ccc57d..791ac8b 100644 --- a/source/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java +++ b/source/hbase-server/src/test/java/org/apache/hadoop/hbase/mapreduce/TestCellCounter.java @@ -155,4 +155,46 @@ public class TestCellCounter { System.setSecurityManager(SECURITY_MANAGER); } } + + @Test(timeout = 300000) + public void testCellCounterForCompleteTable() throws Exception { + String sourceTable = "testCellCounterForCompleteTable"; + String outputPath = OUTPUT_DIR + sourceTable; + LocalFileSystem localFileSystem = new LocalFileSystem(); + Path outputDir = + new Path(outputPath).makeQualified(localFileSystem.getUri(), + localFileSystem.getWorkingDirectory()); + byte[][] families = { FAMILY_A, FAMILY_B }; + HTable t = UTIL.createTable(Bytes.toBytes(sourceTable), families); + try { + Put p = new Put(ROW1); + p.add(FAMILY_A, QUALIFIER, now, Bytes.toBytes("Data11")); + p.add(FAMILY_B, QUALIFIER, now + 1, Bytes.toBytes("Data12")); + p.add(FAMILY_A, QUALIFIER, now + 2, Bytes.toBytes("Data13")); + t.put(p); + p = new Put(ROW2); + p.add(FAMILY_B, QUALIFIER, now, Bytes.toBytes("Dat21")); + p.add(FAMILY_A, QUALIFIER, now + 1, Bytes.toBytes("Data22")); + p.add(FAMILY_B, QUALIFIER, now + 2, Bytes.toBytes("Data23")); + t.put(p); + String[] args = { sourceTable, outputDir.toString(), ";" }; + runCount(args); + FileInputStream inputStream = + new FileInputStream(outputPath + File.separator + "part-r-00000"); + String data = IOUtils.toString(inputStream); + inputStream.close(); + assertTrue(data.contains("Total Families Across all Rows" + "\t" + "2")); + assertTrue(data.contains("Total Qualifiers across all Rows" + "\t" + "4")); + assertTrue(data.contains("Total ROWS" + "\t" + "2")); + assertTrue(data.contains("b;q" + "\t" + "2")); + assertTrue(data.contains("a;q" + "\t" + "2")); + assertTrue(data.contains("row1;a;q_Versions" + "\t" + "1")); + assertTrue(data.contains("row1;b;q_Versions" + "\t" + "1")); + assertTrue(data.contains("row2;a;q_Versions" + "\t" + "1")); + assertTrue(data.contains("row2;b;q_Versions" + "\t" + "1")); + } finally { + t.close(); + FileUtil.fullyDelete(new File(outputPath)); + } + } } \ No newline at end of file -- 1.9.2.msysgit.0