InputSplit 有三个方法
1.getLengh(),为了获取字节长度
2.getLocations(),获取地址,在哪个节点
3.该方法返回空,返回类型是可支持在内存中存储,或者磁盘存储。可以看出未来mapreduce有希望支持内存存储数据。
@Evolving
public SplitLocationInfo[] getLocationInfo() throws IOException {
return null;
}
--------------------------------分割线--------------------------------
FileSplit
1.属性如下:
private Path file;
private long start;
private long length;
private String[] hosts;
private SplitLocationInfo[] hostInfos;
序列化方法
@Override
public void readFields(DataInput in) throws IOException {
file = new Path(Text.readString(in));
start = in.readLong();
length = in.readLong();
hosts = null;
}
可以看出,序列化后读取,是不需要知道hosts的。
--------------------------------分割线--------------------------------
FileInputFormat类
getSplits方法:
1.首先获取文件
2.计算需要拆分成几个split
3.对每个split调用FileSplit构造函数
public FileSplit(Path file, long start, long length, String[] hosts,
String[] inMemoryHosts)
来设置split的信息
4.返回一个list
5.该list的size,是用来确定map任务数量的。