code: protected Scan createScanner(Configuration parameters) {
  		Scan scan = null;
  		if (parameters.getString(SCAN, null) != null) {
  			try {
  				scan = HBaseUtil.convertStringToScan(parameters.getString(SCAN, null));
  			} catch (IOException e) {
  				LOG.error("An error occurred.", e);
  			}
  		} else {
  			try {
  				scan = new Scan();
  
  				// if (parameters.getString(SCAN_COLUMNS, null) != null) {
  				// scan.addColumns(parameters.getString(SCAN_COLUMNS, null));
  				// }
  
  				if (parameters.getString(SCAN_COLUMN_FAMILY, null) != null) {
  					scan.addFamily(Bytes.toBytes(parameters.getString(SCAN_COLUMN_FAMILY, null)));
  				}
  
  				if (parameters.getString(SCAN_TIMESTAMP, null) != null) {
  					scan.setTimeStamp(Long.parseLong(parameters.getString(SCAN_TIMESTAMP, null)));
  				}
  
  				if (parameters.getString(SCAN_TIMERANGE_START, null) != null
  					&& parameters.getString(SCAN_TIMERANGE_END, null) != null) {
  					scan.setTimeRange(
  						Long.parseLong(parameters.getString(SCAN_TIMERANGE_START, null)),
  						Long.parseLong(parameters.getString(SCAN_TIMERANGE_END, null)));
  				}
  
  				if (parameters.getString(SCAN_MAXVERSIONS, null) != null) {
  					scan.setMaxVersions(Integer.parseInt(parameters.getString(SCAN_MAXVERSIONS, null)));
  				}
  
  				if (parameters.getString(SCAN_CACHEDROWS, null) != null) {
  					scan.setCaching(Integer.parseInt(parameters.getString(SCAN_CACHEDROWS, null)));
  				}
  
  				// false by default, full table scans generate too much BC churn
  				scan.setCacheBlocks((parameters.getBoolean(SCAN_CACHEBLOCKS, false)));
  			} catch (Exception e) {
  				LOG.error(StringUtils.stringifyException(e));
  			}
  		}
  		return scan;
  	}
docs: Read the configuration and creates a {@link Scan} object.
  
  @param parameters
  @return