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任务数量的。
转载于:https://www.cnblogs.com/zjxbr/p/4446359.html