You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by sh...@apache.org on 2014/10/25 21:39:43 UTC

git commit: HADOOP-6857. FsShell should report raw disk usage including replication factor. Contributed by Byron Wong.

Repository: hadoop
Updated Branches:
  refs/heads/trunk c51e53d7a -> 28051e415


HADOOP-6857. FsShell should report raw disk usage including replication factor. Contributed by Byron Wong.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/28051e41
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/28051e41
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/28051e41

Branch: refs/heads/trunk
Commit: 28051e415591b8e33dbe954f65230ede23b11683
Parents: c51e53d
Author: Byron Wong <by...@wandisco.com>
Authored: Sat Oct 25 12:19:41 2014 -0700
Committer: Konstantin V Shvachko <sh...@apache.org>
Committed: Sat Oct 25 12:31:41 2014 -0700

----------------------------------------------------------------------
 hadoop-common-project/hadoop-common/CHANGES.txt |   3 +
 .../org/apache/hadoop/fs/shell/FsUsage.java     |  17 +-
 .../src/test/resources/testConf.xml             |   2 +-
 .../namenode/DirectoryWithQuotaFeature.java     |   3 +-
 .../hdfs/server/namenode/INodeDirectory.java    |  10 +-
 .../hdfs/server/namenode/snapshot/Snapshot.java |  10 +-
 .../org/apache/hadoop/hdfs/TestDFSShell.java    |  41 +++-
 .../src/test/resources/testHDFSConf.xml         | 214 +++++++++----------
 8 files changed, 172 insertions(+), 128 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/28051e41/hadoop-common-project/hadoop-common/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt
index a22b760..35cd55e 100644
--- a/hadoop-common-project/hadoop-common/CHANGES.txt
+++ b/hadoop-common-project/hadoop-common/CHANGES.txt
@@ -361,6 +361,9 @@ Release 2.7.0 - UNRELEASED
 
     HADOOP-10748. HttpServer2 should not load JspServlet. (wheat9)
 
+    HADOOP-6857. FsShell should report raw disk usage including replication
+    factor. (Byron Wong via shv)
+
   OPTIMIZATIONS
 
   BUG FIXES

http://git-wip-us.apache.org/repos/asf/hadoop/blob/28051e41/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/FsUsage.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/FsUsage.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/FsUsage.java
index f48ba16..5c1dbf0 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/FsUsage.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/FsUsage.java
@@ -26,6 +26,7 @@ import java.util.List;
 
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
+import org.apache.hadoop.fs.ContentSummary;
 import org.apache.hadoop.fs.FsStatus;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.util.StringUtils;
@@ -117,7 +118,7 @@ class FsUsage extends FsCommand {
     "Note that, even without the -s option, this only shows size summaries " +
     "one level deep into a directory.\n\n" +
     "The output is in the form \n" + 
-    "\tsize\tname(full path)\n"; 
+    "\tsize\tdisk space consumed\tname(full path)\n";
 
     protected boolean summary = false;
     
@@ -132,7 +133,7 @@ class FsUsage extends FsCommand {
 
     @Override
     protected void processPathArgument(PathData item) throws IOException {
-      usagesTable = new TableBuilder(2);
+      usagesTable = new TableBuilder(3);
       // go one level deep on dirs from cmdline unless in summary mode
       if (!summary && item.stat.isDirectory()) {
         recursePath(item);
@@ -144,16 +145,12 @@ class FsUsage extends FsCommand {
 
     @Override
     protected void processPath(PathData item) throws IOException {
-      long length;
-      if (item.stat.isDirectory()) {
-        length = item.fs.getContentSummary(item.path).getLength();
-      } else {
-        length = item.stat.getLen();
-      }
-      usagesTable.addRow(formatSize(length), item);
+      ContentSummary contentSummary = item.fs.getContentSummary(item.path);
+      long length = contentSummary.getLength();
+      long spaceConsumed = contentSummary.getSpaceConsumed();
+      usagesTable.addRow(formatSize(length), formatSize(spaceConsumed), item);
     }
   }
-
   /** show disk usage summary */
   public static class Dus extends Du {
     public static final String NAME = "dus";

http://git-wip-us.apache.org/repos/asf/hadoop/blob/28051e41/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml b/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml
index c6e5fc5..dcf8fb4 100644
--- a/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml
+++ b/hadoop-common-project/hadoop-common/src/test/resources/testConf.xml
@@ -204,7 +204,7 @@
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^\s*size\s+name\(full path\)\s*</expected-output>
+          <expected-output>^\s*size\s+disk space consumed\s+name\(full path\)\s*</expected-output>
         </comparator>
       </comparators>
     </test>

http://git-wip-us.apache.org/repos/asf/hadoop/blob/28051e41/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.java
index 6f326f8..05742b2 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/DirectoryWithQuotaFeature.java
@@ -21,6 +21,7 @@ import org.apache.hadoop.hdfs.protocol.DSQuotaExceededException;
 import org.apache.hadoop.hdfs.protocol.HdfsConstants;
 import org.apache.hadoop.hdfs.protocol.NSQuotaExceededException;
 import org.apache.hadoop.hdfs.protocol.QuotaExceededException;
+import org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot;
 
 /**
  * Quota feature for {@link INodeDirectory}. 
@@ -68,7 +69,7 @@ public final class DirectoryWithQuotaFeature implements INode.Feature {
       final ContentSummaryComputationContext summary) {
     final long original = summary.getCounts().get(Content.DISKSPACE);
     long oldYieldCount = summary.getYieldCount();
-    dir.computeDirectoryContentSummary(summary);
+    dir.computeDirectoryContentSummary(summary, Snapshot.CURRENT_STATE_ID);
     // Check only when the content has not changed in the middle.
     if (oldYieldCount == summary.getYieldCount()) {
       checkDiskspace(dir, summary.getCounts().get(Content.DISKSPACE) - original);

http://git-wip-us.apache.org/repos/asf/hadoop/blob/28051e41/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java
index a753230..797a62c 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/INodeDirectory.java
@@ -615,13 +615,13 @@ public class INodeDirectory extends INodeWithAdditionalFields
     if (q != null) {
       return q.computeContentSummary(this, summary);
     } else {
-      return computeDirectoryContentSummary(summary);
+      return computeDirectoryContentSummary(summary, Snapshot.CURRENT_STATE_ID);
     }
   }
 
-  ContentSummaryComputationContext computeDirectoryContentSummary(
-      ContentSummaryComputationContext summary) {
-    ReadOnlyList<INode> childrenList = getChildrenList(Snapshot.CURRENT_STATE_ID);
+  protected ContentSummaryComputationContext computeDirectoryContentSummary(
+      ContentSummaryComputationContext summary, int snapshotId) {
+    ReadOnlyList<INode> childrenList = getChildrenList(snapshotId);
     // Explicit traversing is done to enable repositioning after relinquishing
     // and reacquiring locks.
     for (int i = 0;  i < childrenList.size(); i++) {
@@ -643,7 +643,7 @@ public class INodeDirectory extends INodeWithAdditionalFields
         break;
       }
       // Obtain the children list again since it may have been modified.
-      childrenList = getChildrenList(Snapshot.CURRENT_STATE_ID);
+      childrenList = getChildrenList(snapshotId);
       // Reposition in case the children list is changed. Decrement by 1
       // since it will be incremented when loops.
       i = nextChild(childrenList, childName) - 1;

http://git-wip-us.apache.org/repos/asf/hadoop/blob/28051e41/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/Snapshot.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/Snapshot.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/Snapshot.java
index 56d3418..59e618a 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/Snapshot.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/snapshot/Snapshot.java
@@ -30,6 +30,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hdfs.DFSUtil;
 import org.apache.hadoop.hdfs.protocol.HdfsConstants;
 import org.apache.hadoop.hdfs.server.namenode.AclFeature;
+import org.apache.hadoop.hdfs.server.namenode.ContentSummaryComputationContext;
 import org.apache.hadoop.hdfs.server.namenode.FSImageFormat;
 import org.apache.hadoop.hdfs.server.namenode.FSImageSerialization;
 import org.apache.hadoop.hdfs.server.namenode.INode;
@@ -172,7 +173,14 @@ public class Snapshot implements Comparable<byte[]> {
     public INode getChild(byte[] name, int snapshotId) {
       return getParent().getChild(name, snapshotId);
     }
-    
+
+    @Override
+    public ContentSummaryComputationContext computeContentSummary(
+        ContentSummaryComputationContext summary) {
+      int snapshotId = getParent().getSnapshot(getLocalNameBytes()).getId();
+      return computeDirectoryContentSummary(summary, snapshotId);
+    }
+
     @Override
     public String getFullPathName() {
       return getSnapshotPath(getParent().getFullPathName(), getLocalName());

http://git-wip-us.apache.org/repos/asf/hadoop/blob/28051e41/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java
index 2daf69d..59c0b2c 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDFSShell.java
@@ -63,6 +63,7 @@ import static org.apache.hadoop.hdfs.server.namenode.AclTestHelpers.aclEntry;
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.not;
 import static org.junit.Assert.*;
+import static org.hamcrest.core.StringContains.containsString;
 
 import com.google.common.collect.Lists;
 
@@ -197,8 +198,10 @@ public class TestDFSShell {
     
   @Test (timeout = 30000)
   public void testDu() throws IOException {
+    int replication = 2;
     Configuration conf = new HdfsConfiguration();
-    MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf).numDataNodes(2).build();
+    MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf)
+        .numDataNodes(replication).build();
     DistributedFileSystem fs = cluster.getFileSystem();
     PrintStream psBackup = System.out;
     ByteArrayOutputStream out = new ByteArrayOutputStream();
@@ -217,6 +220,10 @@ public class TestDFSShell {
       Path myFile2 = new Path("/test/dir/file2");
       writeFile(fs, myFile2);
       assertTrue(fs.exists(myFile2));
+      Long myFileLength = fs.getFileStatus(myFile).getLen();
+      Long myFileDiskUsed = myFileLength * replication;
+      Long myFile2Length = fs.getFileStatus(myFile2).getLen();
+      Long myFile2DiskUsed = myFile2Length * replication;
       
       String[] args = new String[2];
       args[0] = "-du";
@@ -232,9 +239,37 @@ public class TestDFSShell {
       String returnString = out.toString();
       out.reset();
       // Check if size matchs as expected
-      assertTrue(returnString.contains("22"));
-      assertTrue(returnString.contains("23"));
+      assertThat(returnString, containsString(myFileLength.toString()));
+      assertThat(returnString, containsString(myFileDiskUsed.toString()));
+      assertThat(returnString, containsString(myFile2Length.toString()));
+      assertThat(returnString, containsString(myFile2DiskUsed.toString()));
       
+      // Check that -du -s reports the state of the snapshot
+      String snapshotName = "ss1";
+      Path snapshotPath = new Path(myPath, ".snapshot/" + snapshotName);
+      fs.allowSnapshot(myPath);
+      assertThat(fs.createSnapshot(myPath, snapshotName), is(snapshotPath));
+      assertThat(fs.delete(myFile, false), is(true));
+      assertThat(fs.exists(myFile), is(false));
+
+      args = new String[3];
+      args[0] = "-du";
+      args[1] = "-s";
+      args[2] = snapshotPath.toString();
+      val = -1;
+      try {
+        val = shell.run(args);
+      } catch (Exception e) {
+        System.err.println("Exception raised from DFSShell.run " +
+            e.getLocalizedMessage());
+      }
+      assertThat(val, is(0));
+      returnString = out.toString();
+      out.reset();
+      Long combinedLength = myFileLength + myFile2Length;
+      Long combinedDiskUsed = myFileDiskUsed + myFile2DiskUsed;
+      assertThat(returnString, containsString(combinedLength.toString()));
+      assertThat(returnString, containsString(combinedDiskUsed.toString()));
     } finally {
       System.setOut(psBackup);
       cluster.shutdown();

http://git-wip-us.apache.org/repos/asf/hadoop/blob/28051e41/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml
index 087c3ab..8939f87 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testHDFSConf.xml
@@ -1086,7 +1086,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1104,7 +1104,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+data15bytesZZ</expected-output>
+          <expected-output>^15\s+15\s+data15bytesZZ</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1125,19 +1125,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^120\s+data120bytes</expected-output>
+          <expected-output>^120\s+120\s+data120bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+data15bytes</expected-output>
+          <expected-output>^15\s+15\s+data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+data30bytes</expected-output>
+          <expected-output>^30\s+30\s+data30bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^60\s+data60bytes</expected-output>
+          <expected-output>^60\s+60\s+data60bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1155,7 +1155,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+/dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+/dir0/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1173,7 +1173,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+dir0/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1194,19 +1194,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15( |\t)*/dir0/data15bytes</expected-output>
+          <expected-output>^15( |\t)*15( |\t)*/dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30( |\t)*/dir0/data30bytes</expected-output>
+          <expected-output>^30( |\t)*30( |\t)*/dir0/data30bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^60( |\t)*/dir0/data60bytes</expected-output>
+          <expected-output>^60( |\t)*60( |\t)*/dir0/data60bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^120( |\t)*/dir0/data120bytes</expected-output>
+          <expected-output>^120( |\t)*120( |\t)*/dir0/data120bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1223,7 +1223,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1243,19 +1243,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^120\s+hdfs:///data120bytes</expected-output>
+          <expected-output>^120\s+120\s+hdfs:///data120bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+hdfs:///data30bytes</expected-output>
+          <expected-output>^30\s+30\s+hdfs:///data30bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^60\s+hdfs:///data60bytes</expected-output>
+          <expected-output>^60\s+60\s+hdfs:///data60bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1273,7 +1273,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///dir0/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1292,11 +1292,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^1\.0 K\s+hdfs:///dir0/data1k</expected-output>
+          <expected-output>^1\.0 K\s+1\.0 K\s+hdfs:///dir0/data1k</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1317,19 +1317,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15( |\t)*hdfs:///dir0/data15bytes</expected-output>
+          <expected-output>^15( |\t)*15( |\t)*hdfs:///dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30( |\t)*hdfs:///dir0/data30bytes</expected-output>
+          <expected-output>^30( |\t)*30( |\t)*hdfs:///dir0/data30bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^60( |\t)*hdfs:///dir0/data60bytes</expected-output>
+          <expected-output>^60( |\t)*60( |\t)*hdfs:///dir0/data60bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^120( |\t)*hdfs:///dir0/data120bytes</expected-output>
+          <expected-output>^120( |\t)*120( |\t)*hdfs:///dir0/data120bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1346,7 +1346,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15( |\t)*NAMENODE/data15bytes</expected-output>
+          <expected-output>^15( |\t)*15( |\t)*NAMENODE/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1366,19 +1366,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15( |\t)*NAMENODE/data15bytes</expected-output>
+          <expected-output>^15( |\t)*15( |\t)*NAMENODE/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30( |\t)*NAMENODE/data30bytes</expected-output>
+          <expected-output>^30( |\t)*30( |\t)*NAMENODE/data30bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^60( |\t)*NAMENODE/data60bytes</expected-output>
+          <expected-output>^60( |\t)*60( |\t)*NAMENODE/data60bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^120( |\t)*NAMENODE/data120bytes</expected-output>
+          <expected-output>^120( |\t)*120( |\t)*NAMENODE/data120bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1396,7 +1396,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15( |\t)*NAMENODE/dir0/data15bytes</expected-output>
+          <expected-output>^15( |\t)*15( |\t)*NAMENODE/dir0/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1417,19 +1417,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15( |\t)*NAMENODE/dir0/data15bytes</expected-output>
+          <expected-output>^15( |\t)*15( |\t)*NAMENODE/dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30( |\t)*NAMENODE/dir0/data30bytes</expected-output>
+          <expected-output>^30( |\t)*30( |\t)*NAMENODE/dir0/data30bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^60( |\t)*NAMENODE/dir0/data60bytes</expected-output>
+          <expected-output>^60( |\t)*60( |\t)*NAMENODE/dir0/data60bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^120( |\t)*NAMENODE/dir0/data120bytes</expected-output>
+          <expected-output>^120( |\t)*120( |\t)*NAMENODE/dir0/data120bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1462,7 +1462,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^450\s+/dir0</expected-output>
+          <expected-output>^450\s+450\s+/dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1494,7 +1494,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^450\s+dir0</expected-output>
+          <expected-output>^450\s+450\s+dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1532,7 +1532,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^450\s+/dir0</expected-output>
+          <expected-output>^450\s+450\s+/dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1565,7 +1565,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^450\s+hdfs:///dir0</expected-output>
+          <expected-output>^450\s+450\s+hdfs:///dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1603,7 +1603,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^450\s+hdfs:///dir0</expected-output>
+          <expected-output>^450\s+450\s+hdfs:///dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1635,7 +1635,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^450\s+NAMENODE/dir0</expected-output>
+          <expected-output>^450\s+450\s+NAMENODE/dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -1673,7 +1673,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^450\s+NAMENODE/dir0</expected-output>
+          <expected-output>^450\s+450\s+NAMENODE/dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4073,7 +4073,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4092,7 +4092,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+data15bytes</expected-output>
+          <expected-output>^15\s+15\s+data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4110,7 +4110,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+/dir0/dir1/data/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+/dir0/dir1/data/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4128,7 +4128,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+dir0/dir1/data/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+dir0/dir1/data/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4146,11 +4146,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+/dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+/dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+/dir0/data30bytes</expected-output>
+          <expected-output>^30\s+30\s+/dir0/data30bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4168,11 +4168,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+dir0/data30bytes</expected-output>
+          <expected-output>^30\s+30\s+dir0/data30bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4318,7 +4318,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4336,7 +4336,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///dir1/data/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///dir1/data/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4354,11 +4354,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+hdfs:///dir0/data30bytes</expected-output>
+          <expected-output>^30\s+30\s+hdfs:///dir0/data30bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4442,7 +4442,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+NAMENODE/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+NAMENODE/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4460,7 +4460,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+NAMENODE/dir1/data/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+NAMENODE/dir1/data/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4478,11 +4478,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+NAMENODE/dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+NAMENODE/dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+NAMENODE/dir0/data30bytes</expected-output>
+          <expected-output>^30\s+30\s+NAMENODE/dir0/data30bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4567,7 +4567,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4586,7 +4586,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+data15bytes</expected-output>
+          <expected-output>^15\s+15\s+data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4604,7 +4604,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+/dir0/dir1/data/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+/dir0/dir1/data/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4622,7 +4622,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+dir0/dir1/data/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+dir0/dir1/data/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4640,11 +4640,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+/dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+/dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+/dir0/data30bytes</expected-output>
+          <expected-output>^30\s+30\s+/dir0/data30bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4662,11 +4662,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+dir0/data30bytes</expected-output>
+          <expected-output>^30\s+30\s+dir0/data30bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4813,7 +4813,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4833,7 +4833,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///dir0/dir1/data/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///dir0/dir1/data/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4851,11 +4851,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+hdfs:///dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+hdfs:///dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+hdfs:///dir0/data30bytes</expected-output>
+          <expected-output>^30\s+30\s+hdfs:///dir0/data30bytes</expected-output>
         </comparator>
      </comparators>
     </test>
@@ -4940,7 +4940,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+NAMENODE/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+NAMENODE/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4960,7 +4960,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+NAMENODE/dir0/dir1/data/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+NAMENODE/dir0/dir1/data/data15bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -4978,11 +4978,11 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^15\s+NAMENODE/dir0/data15bytes</expected-output>
+          <expected-output>^15\s+15\s+NAMENODE/dir0/data15bytes</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^30\s+NAMENODE/dir0/data30bytes</expected-output>
+          <expected-output>^30\s+30\s+NAMENODE/dir0/data30bytes</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5605,7 +5605,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+/dir0</expected-output>
+          <expected-output>^0\s+0\s+/dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5623,7 +5623,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+/dir0/b</expected-output>
+          <expected-output>^0\s+0\s+/dir0/b</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5641,7 +5641,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+dir0</expected-output>
+          <expected-output>^0\s+0\s+dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5661,19 +5661,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+/dir0</expected-output>
+          <expected-output>^0\s+0\s+/dir0</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+/dir1</expected-output>
+          <expected-output>^0\s+0\s+/dir1</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+/dir2</expected-output>
+          <expected-output>^0\s+0\s+/dir2</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+/dir3</expected-output>
+          <expected-output>^0\s+0\s+/dir3</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5693,19 +5693,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+dir0</expected-output>
+          <expected-output>^0\s+0\s+dir0</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+dir1</expected-output>
+          <expected-output>^0\s+0\s+dir1</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+dir2</expected-output>
+          <expected-output>^0\s+0\s+dir2</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+dir3</expected-output>
+          <expected-output>^0\s+0\s+dir3</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5756,7 +5756,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+hdfs:///dir0</expected-output>
+          <expected-output>^0\s+0\s+hdfs:///dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5773,19 +5773,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+hdfs:///dir0</expected-output>
+          <expected-output>^0\s+0\s+hdfs:///dir0</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+hdfs:///dir1</expected-output>
+          <expected-output>^0\s+0\s+hdfs:///dir1</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+hdfs:///dir2</expected-output>
+          <expected-output>^0\s+0\s+hdfs:///dir2</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+hdfs:///dir3</expected-output>
+          <expected-output>^0\s+0\s+hdfs:///dir3</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5836,7 +5836,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+NAMENODE/dir0</expected-output>
+          <expected-output>^0\s+0\s+NAMENODE/dir0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -5853,19 +5853,19 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+NAMENODE/dir0</expected-output>
+          <expected-output>^0\s+0\s+NAMENODE/dir0</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+NAMENODE/dir1</expected-output>
+          <expected-output>^0\s+0\s+NAMENODE/dir1</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+NAMENODE/dir2</expected-output>
+          <expected-output>^0\s+0\s+NAMENODE/dir2</expected-output>
         </comparator>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+NAMENODE/dir3</expected-output>
+          <expected-output>^0\s+0\s+NAMENODE/dir3</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -6219,7 +6219,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+/user/file0</expected-output>
+          <expected-output>^0\s+0\s+/user/file0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -6252,7 +6252,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+file0</expected-output>
+          <expected-output>^0\s+0\s+file0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -6270,9 +6270,9 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0( |\t)*file0</expected-output>
-          <expected-output>^0( |\t)*file1</expected-output>
-          <expected-output>^0( |\t)*file2</expected-output>
+          <expected-output>^0( |\t)*0( |\t)*file0</expected-output>
+          <expected-output>^0( |\t)*0( |\t)*file1</expected-output>
+          <expected-output>^0( |\t)*0( |\t)*file2</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -6308,7 +6308,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+hdfs:///user/file0</expected-output>
+          <expected-output>^0\s+0\s+hdfs:///user/file0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -6325,9 +6325,9 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0( |\t)*hdfs:///file0</expected-output>
-          <expected-output>^0( |\t)*hdfs:///file1</expected-output>
-          <expected-output>^0( |\t)*hdfs:///file2</expected-output>
+          <expected-output>^0( |\t)*0( |\t)*hdfs:///file0</expected-output>
+          <expected-output>^0( |\t)*0( |\t)*hdfs:///file1</expected-output>
+          <expected-output>^0( |\t)*0( |\t)*hdfs:///file2</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -6361,7 +6361,7 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+NAMENODE/user/file0</expected-output>
+          <expected-output>^0\s+0\s+NAMENODE/user/file0</expected-output>
         </comparator>
       </comparators>
     </test>
@@ -6378,9 +6378,9 @@
       <comparators>
         <comparator>
           <type>RegexpComparator</type>
-          <expected-output>^0\s+hdfs://\w+[-.a-z0-9]*:[0-9]+/file0</expected-output>
-          <expected-output>^0\s+hdfs://\w+[-.a-z0-9]*:[0-9]+/file1</expected-output>
-          <expected-output>^0\s+hdfs://\w+[-.a-z0-9]*:[0-9]+/file2</expected-output>
+          <expected-output>^0\s+0\s+hdfs://\w+[-.a-z0-9]*:[0-9]+/file0</expected-output>
+          <expected-output>^0\s+0\s+hdfs://\w+[-.a-z0-9]*:[0-9]+/file1</expected-output>
+          <expected-output>^0\s+0\s+hdfs://\w+[-.a-z0-9]*:[0-9]+/file2</expected-output>
         </comparator>
       </comparators>
     </test>