I would discourage having the base class here since it is of no concern to the API user - they only need to use the DatasetReader interface. It *is* of concern to implementors, but so far the only implementors of DatasetReader are in the com.cloudera.cdk.data.filesystem package, so I would move the base class there.

In the CDK generally, we have not yet addressed the question of how to make the API amenable to extension and implementation by third parties. When we do this we should have an spi package, and the Base class should go in there - it's important not to mix up the end user API with the SPI.