blob: 281d13eef2d49eadc80a689745514861dba46329 [file] [log] [blame]
/**
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.hadoop.hbase.mapred;
import java.io.IOException;
import org.apache.hadoop.hbase.classification.InterfaceAudience;
import org.apache.hadoop.hbase.classification.InterfaceStability;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.mapred.RecordReader;
/**
* Iterate over an HBase table data, return (Text, RowResult) pairs
*/
@InterfaceAudience.Public
@InterfaceStability.Stable
public class TableRecordReader
implements RecordReader<ImmutableBytesWritable, Result> {
private TableRecordReaderImpl recordReaderImpl = new TableRecordReaderImpl();
/**
* Restart from survivable exceptions by creating a new scanner.
*
* @param firstRow
* @throws IOException
*/
public void restart(byte[] firstRow) throws IOException {
this.recordReaderImpl.restart(firstRow);
}
/**
* Build the scanner. Not done in constructor to allow for extension.
*
* @throws IOException
*/
public void init() throws IOException {
this.recordReaderImpl.restart(this.recordReaderImpl.getStartRow());
}
/**
* @param htable the {@link org.apache.hadoop.hbase.HTableDescriptor} to scan.
*/
public void setHTable(Table htable) {
this.recordReaderImpl.setHTable(htable);
}
/**
* @param inputColumns the columns to be placed in {@link Result}.
*/
public void setInputColumns(final byte [][] inputColumns) {
this.recordReaderImpl.setInputColumns(inputColumns);
}
/**
* @param startRow the first row in the split
*/
public void setStartRow(final byte [] startRow) {
this.recordReaderImpl.setStartRow(startRow);
}
/**
*
* @param endRow the last row in the split
*/
public void setEndRow(final byte [] endRow) {
this.recordReaderImpl.setEndRow(endRow);
}
/**
* @param rowFilter the {@link Filter} to be used.
*/
public void setRowFilter(Filter rowFilter) {
this.recordReaderImpl.setRowFilter(rowFilter);
}
public void close() {
this.recordReaderImpl.close();
}
/**
* @return ImmutableBytesWritable
*
* @see org.apache.hadoop.mapred.RecordReader#createKey()
*/
public ImmutableBytesWritable createKey() {
return this.recordReaderImpl.createKey();
}
/**
* @return RowResult
*
* @see org.apache.hadoop.mapred.RecordReader#createValue()
*/
public Result createValue() {
return this.recordReaderImpl.createValue();
}
public long getPos() {
// This should be the ordinal tuple in the range;
// not clear how to calculate...
return this.recordReaderImpl.getPos();
}
public float getProgress() {
// Depends on the total number of tuples and getPos
return this.recordReaderImpl.getPos();
}
/**
* @param key HStoreKey as input key.
* @param value MapWritable as input value
* @return true if there was more data
* @throws IOException
*/
public boolean next(ImmutableBytesWritable key, Result value)
throws IOException {
return this.recordReaderImpl.next(key, value);
}
}