public static <K, V> CombineFileRecordReader<K, V> createInstance(JobConf job, CombineFileSplit split,
        Reporter reporter, Class<RecordReader<K, V>> rrClass) throws IOException {
      CombineFileRecordReader<K, V> cfrr = new CombineFileRecordReader<>(job, split, reporter);
      assert (split instanceof InputSplitShim);
      if (((InputSplitShim) split).isShrinked()) {
        cfrr.isShrinked = true;
        cfrr.shrinkedLength = ((InputSplitShim) split).getShrinkedLength();
      }
      try {
        cfrr.rrConstructor = rrClass.getDeclaredConstructor(constructorSignature);
        cfrr.rrConstructor.setAccessible(true);
      } catch (Exception e) {
        throw new RuntimeException(rrClass.getName() + " does not have valid constructor", e);
      }
      cfrr.initNextRecordReader(null);
      return cfrr;
    }
A generic RecordReader that can hand out different recordReaders
for each chunk in the CombineFileSplit.
shims/common/src/main/java/org/apache/hadoop/hive/shims/HadoopShimsSecure.java