@Override
    public byte[] getBytesForHash() {
      if (inputSplit instanceof HashableInputSplit) {
        return ((HashableInputSplit)inputSplit).getBytesForHash();
      } else {
        // Explicitly using only the start offset of a split, and not the length. Splits generated on
        // block boundaries and stripe boundaries can vary slightly. Try hashing both to the same node.
        // There is the drawback of potentially hashing the same data on multiple nodes though, when a
        // large split is sent to 1 node, and a second invocation uses smaller chunks of the previous
        // large split and send them to different nodes.
        byte[] pathBytes = getPath().toString().getBytes();
        byte[] allBytes = new byte[pathBytes.length + 8];
        System.arraycopy(pathBytes, 0, allBytes, 0, pathBytes.length);
        SerDeUtils.writeLong(allBytes, pathBytes.length, getStart() >> 3);
        return allBytes;
      }
    }
The position of the first byte in the file to process.
ql/src/java/org/apache/hadoop/hive/ql/io/HiveInputFormat.java