code: @Override
  	public void open(FileInputSplit fileSplit) throws IOException {
  
  		this.currentSplit = fileSplit;
  		this.splitStart = fileSplit.getStart();
  		this.splitLength = fileSplit.getLength();
  
  		if (LOG.isDebugEnabled()) {
  			LOG.debug("Opening input split " + fileSplit.getPath() + " [" + this.splitStart + "," + this.splitLength + "]");
  		}
  
  		
  		// open the split in an asynchronous thread
  		final InputSplitOpenThread isot = new InputSplitOpenThread(fileSplit, this.openTimeout);
  		isot.start();
  		
  		try {
  			this.stream = isot.waitForCompletion();
  			this.stream = decorateInputStream(this.stream, fileSplit);
  		}
  		catch (Throwable t) {
  			throw new IOException("Error opening the Input Split " + fileSplit.getPath() + 
  					" [" + splitStart + "," + splitLength + "]: " + t.getMessage(), t);
  		}
  		
  		// get FSDataInputStream
  		if (this.splitStart != 0) {
  			this.stream.seek(this.splitStart);
  		}
  	}
docs: Opens an input stream to the file defined in the input format.
  The stream is positioned at the beginning of the given split.
  <p>
  The stream is actually opened in an asynchronous thread to make sure any interruptions to the thread
  working on the input format do not reach the file system.