@Override
  public void chore() {
    if (getEnabled()) {
      long start = EnvironmentEdgeManager.currentTime();
      AtomicLong deletedFiles = new AtomicLong(0);
      AtomicLong failedDeletes = new AtomicLong(0);
      for (HRegion region : regionServer.getRegions()) {
        for (HStore store : region.getStores()) {
          // only do cleanup in stores not using tmp directories
          if (store.getStoreEngine().requireWritingToTmpDirFirst()) {
            continue;
          }
          Path storePath =
            new Path(region.getRegionFileSystem().getRegionDir(), store.getColumnFamilyName());

          try {
            List<FileStatus> fsStoreFiles =
              Arrays.asList(region.getRegionFileSystem().fs.listStatus(storePath));
            fsStoreFiles
              .forEach(file -> cleanFileIfNeeded(file, store, deletedFiles, failedDeletes));
          } catch (IOException e) {
            LOG.warn("Failed to list files in {}, cleanup is skipped there", storePath);
            continue;
          }
        }
      }
      LOG.debug(
        "BrokenStoreFileCleaner on {} run for: {}ms. It deleted {} files and tried but failed "
          + "to delete {}",
        regionServer.getServerName().getServerName(), EnvironmentEdgeManager.currentTime() - start,
        deletedFiles.get(), failedDeletes.get());
    } else {
      LOG.trace("Broken storefile Cleaner chore disabled! Not cleaning.");
    }
  }
This Chore, every time it runs, will clear the unsused HFiles in the data folder.
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/BrokenStoreFileCleaner.java