代码改变世界

Hadoop 2.6.0 FileSplit和InputSplit和FileInputFormat

2015-04-22 08:50  zjxbr  阅读(851)  评论(0编辑  收藏  举报

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任务数量的。