private void mergeSplitAndCopyBulkloadedHFiles(List<String> files, TableName tn, FileSystem tgtFs)
    throws IOException {
    MapReduceHFileSplitterJob player = new MapReduceHFileSplitterJob();
    conf.set(MapReduceHFileSplitterJob.BULK_OUTPUT_CONF_KEY,
      getBulkOutputDirForTable(tn).toString());
    player.setConf(conf);

    String inputDirs = StringUtils.join(files, ",");
    String[] args = { inputDirs, tn.getNameWithNamespaceInclAsString() };

    int result;

    try {
      result = player.run(args);
    } catch (Exception e) {
      LOG.error("Failed to run MapReduceHFileSplitterJob", e);
      // Delete the bulkload directory if we fail to run the HFile splitter job for any reason
      // as it might be re-tried
      deleteBulkLoadDirectory();
      throw new IOException(e);
    }

    if (result != 0) {
      throw new IOException(
        "Failed to run MapReduceHFileSplitterJob with invalid result: " + result);
    }

    incrementalCopyBulkloadHFiles(tgtFs, tn);
  }
Reads bulk load records from backup table, iterates through the records and forms the paths for
bulk loaded hfiles. Copies the bulk loaded hfiles to backup destination. This method does NOT
clean up the entries in the bulk load system table. Those entries should not be cleaned until
the backup is marked as complete.
@param tablesToBackup list of tables to be backed up
hbase-backup/src/main/java/org/apache/hadoop/hbase/backup/impl/IncrementalTableBackupClient.java