下面列出了org.apache.hadoop.hbase.protobuf.generated.ClientProtos#Scan ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void readFields(DataInput input) throws IOException {
int count = WritableUtils.readVInt(input);
scans = Lists.newArrayListWithExpectedSize(count);
for (int i = 0; i < count; i++) {
byte[] protoScanBytes = new byte[WritableUtils.readVInt(input)];
input.readFully(protoScanBytes);
ClientProtos.Scan protoScan = ClientProtos.Scan.parseFrom(protoScanBytes);
Scan scan = ProtobufUtil.toScan(protoScan);
scans.add(scan);
}
init();
}
@Override
public void write(DataOutput output) throws IOException {
Preconditions.checkNotNull(scans);
WritableUtils.writeVInt(output, scans.size());
for (Scan scan : scans) {
ClientProtos.Scan protoScan = ProtobufUtil.toScan(scan);
byte[] protoScanBytes = protoScan.toByteArray();
WritableUtils.writeVInt(output, protoScanBytes.length);
output.write(protoScanBytes);
}
}
@Override
public void readFields(DataInput input) throws IOException {
regionLocation = WritableUtils.readString(input);
regionSize = WritableUtils.readVLong(input);
int count = WritableUtils.readVInt(input);
scans = Lists.newArrayListWithExpectedSize(count);
for (int i = 0; i < count; i++) {
byte[] protoScanBytes = new byte[WritableUtils.readVInt(input)];
input.readFully(protoScanBytes);
ClientProtos.Scan protoScan = ClientProtos.Scan.parseFrom(protoScanBytes);
Scan scan = ProtobufUtil.toScan(protoScan);
scans.add(scan);
}
init();
}
@Override
public void write(DataOutput output) throws IOException {
WritableUtils.writeString(output, regionLocation);
WritableUtils.writeVLong(output, regionSize);
Preconditions.checkNotNull(scans);
WritableUtils.writeVInt(output, scans.size());
for (Scan scan : scans) {
ClientProtos.Scan protoScan = ProtobufUtil.toScan(scan);
byte[] protoScanBytes = protoScan.toByteArray();
WritableUtils.writeVInt(output, protoScanBytes.length);
output.write(protoScanBytes);
}
}
@Override
public DataScan readScan(ObjectInput in) throws IOException{
byte[] bytes = new byte[in.readInt()];
in.readFully(bytes);
ClientProtos.Scan scan=ClientProtos.Scan.parseFrom(bytes);
return new HScan(ProtobufUtil.toScan(scan));
}
@Override
protected DataScan readScan(ObjectInput in) throws IOException{
byte[] bytes = new byte[in.readInt()];
in.readFully(bytes);
ClientProtos.Scan scan=ClientProtos.Scan.parseFrom(bytes);
return new HScan(ProtobufUtil.toScan(scan));
}
/**
* Setup scan condition if necessary.
*
* @param conf
* @param line
* @throws IOException
*/
public static void setScanIfNecessary(Configuration conf, CommandLine line) throws IOException {
String startRow = line.getOptionValue("startRow");
String endRow = line.getOptionValue("endRow");
String startTime = line.getOptionValue("startTime");
String endTime = line.getOptionValue("endTime");
boolean enabledScan = false;
Scan scan = new Scan();
// Row
if (isNotBlank(startRow)) {
conf.set(TableInputFormat.SCAN_ROW_START, startRow);
scan.setStartRow(Bytes.toBytes(startRow));
enabledScan = true;
}
if (isNotBlank(endRow)) {
Assert2.hasText(startRow, "Argument for startRow and endRow are used simultaneously");
conf.set(TableInputFormat.SCAN_ROW_STOP, endRow);
scan.setStopRow(Bytes.toBytes(endRow));
enabledScan = true;
}
// Row TimeStamp
if (isNotBlank(startTime) && isNotBlank(endTime)) {
conf.set(TableInputFormat.SCAN_TIMERANGE_START, startTime);
conf.set(TableInputFormat.SCAN_TIMERANGE_END, endTime);
try {
Timestamp stime = new Timestamp(Long.parseLong(startTime));
Timestamp etime = new Timestamp(Long.parseLong(endTime));
scan.setTimeRange(stime.getTime(), etime.getTime());
enabledScan = true;
} catch (Exception e) {
throw new IllegalArgumentException(String.format("Illegal startTime(%s) and endTime(%s)", startTime, endTime), e);
}
}
if (enabledScan) {
ClientProtos.Scan proto = ProtobufUtil.toScan(scan);
log.info("All other SCAN configuration are ignored if\n"
+ " * this is specified.See TableMapReduceUtil.convertScanToString(Scan)\n"
+ " * for more details.");
conf.set(TableInputFormat.SCAN, Base64.encodeBytes(proto.toByteArray()));
}
}
public static ClientProtos.Scan toPBScan(Scan scan) throws IOException {
return ProtobufUtil.toScan(scan);
}
public static Scan fromPBScan(ClientProtos.Scan scan) throws IOException {
return ProtobufUtil.toScan(scan);
}
public static ClientProtos.Scan toPBScan(Scan scan) throws IOException {
return ProtobufUtil.toScan(scan);
}
/**
* Writes the given scan into a Base64 encoded string.
*
* @param scan The scan to write out.
* @return The scan saved in a Base64 encoded string.
* @throws IOException When writing the scan fails.
*/
static String convertScanToString(Scan scan) throws IOException {
ClientProtos.Scan proto = ProtobufUtil.toScan(scan);
return Base64.encodeBytes(proto.toByteArray());
}
/**
*
* @param scan
* @return
*/
public static Scan fromPBScan(ClientProtos.Scan scan) throws IOException {
return ProtobufUtil.toScan(scan);
}
/**
* Converts the given Base64 string back into a Scan instance.
*
* @param base64 The scan details.
* @return The newly created Scan instance.
* @throws IOException When reading the scan instance fails.
*/
public static Scan convertStringToScan(String base64) throws IOException{
byte[] bytes= Base64.getDecoder().decode(base64);
ClientProtos.Scan scan=ClientProtos.Scan.parseFrom(bytes);
return ProtobufUtil.toScan(scan);
}