package org.apache.hadoop.hive.mastiff;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.FileSplit;
import org.apache.hadoop.mapred.InputSplit;
/**
* A split for a segment used by a Map task.
*
* Copy from {@link cn.ac.ncic.mastiff.io.segmentfile.SegmentSplit}
*
* @see InputSplit
*/
public class SegmentFileSplit extends FileSplit {
Path path;
long segmentOffset;
long segmentPMSOffset;
long segmentLength = 0;
String[] hosts;
long length;
int segId;
String tableName;
BlockLocation blkLocation;
public SegmentFileSplit() {
super((Path) null, 0, 0, (String[]) null);
}
public SegmentFileSplit(int segId, Path file, long segOffsets, long segPMSOffsets,
long segLengths, long length, String[] hosts, String tableName) {
super((Path) null, 0, 0, (String[]) null);
this.segId = segId;
path = file;
segmentOffset = segOffsets;
segmentPMSOffset = segPMSOffsets;
segmentLength = segLengths;
this.hosts = hosts;
this.length = length;
this.tableName = tableName;
}
public SegmentFileSplit(int segId, Path file, long segOffsets, long segPMSOffsets,
long segLengths, long length, BlockLocation blkLocation, String tableName) throws IOException {
this(segId, file, segOffsets, segPMSOffsets,
segLengths, length, blkLocation.getHosts(), tableName);
this.blkLocation = blkLocation;
}
public BlockLocation getBlkLocation() {
return blkLocation;
}
@Override
public Path getPath() {
return path;
}
public long getSegOffset() {
return segmentOffset;
}
public long getSegPmsOffset() {
return segmentPMSOffset;
}
public long getSegLength() {
return segmentLength;
}
public int getSegId() {
return segId;
}
public String getTableName() {
return tableName;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Table ").append(" :");
sb.append(path.toString()).append("@seg").append(segId);
sb.append('[');
if (segmentLength != 0) {
sb.append('(').append(segmentOffset).append(',')
.append(segmentPMSOffset).append(',')
.append(segmentLength).append(')');
}
sb.append(']');
return sb.toString();
}
@Override
public long getLength() {
return length;
}
@Override
public String[] getLocations() throws IOException {
if (hosts == null) {
return new String[] {};
} else {
return hosts;
}
}
@Override
public void readFields(DataInput in) throws IOException {
segId = in.readInt();
path = new Path(Text.readString(in));
length = in.readLong();
segmentOffset = in.readLong();
segmentPMSOffset = in.readLong();
segmentLength = in.readLong();
tableName = in.readUTF();
}
@Override
public void write(DataOutput out) throws IOException {
out.writeInt(segId);
Text.writeString(out, path.toString());
out.writeLong(length);
out.writeLong(segmentOffset);
out.writeLong(segmentPMSOffset);
out.writeLong(segmentLength);
out.writeUTF(tableName);
}
}