protected static Tool doMROnTableTest(HBaseTestingUtil util, TableName table, String family,
    String data, Map<String, String> args, int valueMultiplier, int expectedKVCount)
    throws Exception {
    Configuration conf = new Configuration(util.getConfiguration());

    // populate input file
    FileSystem fs = FileSystem.get(conf);
    Path inputPath =
      fs.makeQualified(new Path(util.getDataTestDirOnTestFS(table.getNameAsString()), "input.dat"));
    FSDataOutputStream op = fs.create(inputPath, true);
    if (data == null) {
      data = "KEY\u001bVALUE1\u001bVALUE2\n";
    }
    op.write(Bytes.toBytes(data));
    op.close();
    LOG.debug(String.format("Wrote test data to file: %s", inputPath));

    if (conf.getBoolean(FORCE_COMBINER_CONF, true)) {
      LOG.debug("Forcing combiner.");
      conf.setInt("mapreduce.map.combine.minspills", 1);
    }

    // Build args array.
    String[] argsArray = new String[args.size() + 2];
    Iterator it = args.entrySet().iterator();
    int i = 0;
    while (it.hasNext()) {
      Map.Entry pair = (Map.Entry) it.next();
      argsArray[i] = "-D" + pair.getKey() + "=" + pair.getValue();
      i++;
    }
    argsArray[i] = table.getNameAsString();
    argsArray[i + 1] = inputPath.toString();

    // run the import
    Tool tool = new ImportTsv();
    LOG.debug("Running ImportTsv with arguments: " + Arrays.toString(argsArray));
    assertEquals(0, ToolRunner.run(conf, tool, argsArray));

    // Perform basic validation. If the input args did not include
    // ImportTsv.BULK_OUTPUT_CONF_KEY then validate data in the table.
    // Otherwise, validate presence of hfiles.
    boolean isDryRun = args.containsKey(ImportTsv.DRY_RUN_CONF_KEY)
      && "true".equalsIgnoreCase(args.get(ImportTsv.DRY_RUN_CONF_KEY));
    if (args.containsKey(ImportTsv.BULK_OUTPUT_CONF_KEY)) {
      if (isDryRun) {
        assertFalse(String.format("Dry run mode, %s should not have been created.",
          ImportTsv.BULK_OUTPUT_CONF_KEY), fs.exists(new Path(ImportTsv.BULK_OUTPUT_CONF_KEY)));
      } else {
        validateHFiles(fs, args.get(ImportTsv.BULK_OUTPUT_CONF_KEY), family, expectedKVCount);
      }
    } else {
      validateTable(conf, table, family, valueMultiplier, isDryRun);
    }

    if (conf.getBoolean(DELETE_AFTER_LOAD_CONF, true)) {
      LOG.debug("Deleting test subdirectory");
      util.cleanupDataTestDirOnTestFS(table.getNameAsString());
    }
    return tool;
  }
Run an ImportTsv job and perform basic validation on the results. Returns the ImportTsv
<code>Tool</code> instance so that other tests can inspect it for further validation as
necessary. This method is static to insure non-reliance on instance's util/conf facilities.
@param args Any arguments to pass BEFORE inputFile path is appended.
@return The Tool instance used to run the test.
hbase-mapreduce/src/test/java/org/apache/hadoop/hbase/mapreduce/TestImportTsv.java