@Override
    public Set<Integer> call() throws Exception {
      Set<Integer> nonCombinablePathIndices = new HashSet<Integer>();
      for (int i = 0; i < length; i++) {
        PartitionDesc part = HiveFileFormatUtils.getFromPathRecursively(
                pathToPartitionInfo, paths[i + start],
                IOPrepareCache.get().allocatePartitionDescMap());
        // Use HiveInputFormat if any of the paths is not splittable
        Class<? extends InputFormat> inputFormatClass = part.getInputFileFormatClass();
        InputFormat<WritableComparable, Writable> inputFormat =
            getInputFormatFromCache(inputFormatClass, conf);
        boolean isAvoidSplitCombine = inputFormat instanceof AvoidSplitCombination &&
            ((AvoidSplitCombination) inputFormat).shouldSkipCombine(paths[i + start], conf);
        TableDesc tbl = part.getTableDesc();
        boolean isMmNonMerge = false;
        if (tbl != null) {
          isMmNonMerge = !isMerge && AcidUtils.isInsertOnlyTable(tbl.getProperties());
        } else {
          // This would be the case for obscure tasks like truncate column (unsupported for MM).
          Utilities.FILE_OP_LOGGER.warn("Assuming not insert-only; no table in partition spec " + part);
        }

        if (isAvoidSplitCombine || isMmNonMerge) {
          Utilities.FILE_OP_LOGGER.info("The path [" + paths[i + start] +
              "] is being parked for HiveInputFormat.getSplits");
          nonCombinablePathIndices.add(i + start);
        }
      }
      return nonCombinablePathIndices;
    }
CombineHiveInputFormat is a parameterized InputFormat which looks at the path
name and determine the correct InputFormat for that path name from
mapredPlan.pathToPartitionInfo(). It can be used to read files with different
input format in the same map-reduce job.
ql/src/java/org/apache/hadoop/hive/ql/io/CombineHiveInputFormat.java