Map reduce framework calls createRecordReader of the TableInputFormat/MultiTableInputFormat to get the record reader instance. In this method, we are initializing the TableRecordReaderImpl (restart method). This initializes the scanner object. After this, map reduce framework calls initialize on the RecordReader. In our case, this calls restart of the TableRecordReaderImpl again. Here, it doesn't close the first scanner. At the end of the task, only the second scanner object is closed. Because of this, the smallest read point of HRegion is affected.
We don't need to initialize the RecordReader in the createRecordReader method and we need to close the scanner object in the restart method. (incase if the restart method is called because of exceptions in the nextKeyValue method)