private FileSplit makeSplitInternal(Path file, long start, long length, String[] hosts, String[] inMemoryHosts) {
    long cachedStart;
    long cachedEnd;
    try {
      cachedStart = getCachedStartIndex(file);
      cachedEnd = getCachedEndIndex(file);
    } catch (IOException e) {
      LOG.warn("Could not detect header/footer", e);
      return new NullRowsInputFormat.DummyInputSplit(file);
    }
    if (cachedStart > start + length) {
      return new NullRowsInputFormat.DummyInputSplit(file);
    }
    if (cachedStart > start) {
      length = length - (cachedStart - start);
      start = cachedStart;
    }
    if (cachedEnd < start) {
      return new NullRowsInputFormat.DummyInputSplit(file);
    }
    if (cachedEnd < start + length) {
      length = cachedEnd - start;
    }
    if (inMemoryHosts == null) {
      return super.makeSplit(file, start, length, hosts);
    } else {
      return super.makeSplit(file, start, length, hosts, inMemoryHosts);
    }
  }
SkippingInputFormat is a header/footer aware input format. It truncates
splits identified by TextInputFormat. Header and footers are removed
from the splits.

This InputFormat does NOT support Compressed Files!
ql/src/java/org/apache/hadoop/hive/ql/io/SkippingTextInputFormat.java