Hadoop 2.6.0 FileSplit和InputSplit和FileInputFormat

it2022-05-26  70

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


最新回复(0)