@Override
  protected List<FileStatus> listStatus(JobContext job) throws IOException {
    List<FileStatus> result = new ArrayList<FileStatus>();

    // Explode out directories that match the original FileInputFormat filters
    // Typically these are <regionname>-level dirs, only requiring 1 level of recursion to
    // get the <columnname>-level dirs where the HFile are written, but in some cases
    // <tablename>-level dirs are provided requiring 2 levels of recursion.
    for (FileStatus status : super.listStatus(job)) {
      addFilesRecursively(job, status, result);
    }
    return result;
  }
A private cache of the key value so it doesn't need to be loaded twice from the scanner.
hbase-mapreduce/src/main/java/org/apache/hadoop/hbase/mapreduce/HFileInputFormat.java