我决定编写一个简单的自定义FileInputFormat来测试我对inputSplits等的理解。此练习使我面临一个严重的问题。
上下文
N个区块。
InputSplits
的理解-因此请保留在中)。 FileStatus, FileSystem
并返回FileInputSplit
数组的方法:InputSplit [] getSplits(FileStatus file,FileSystem fs);
问题/问题
我需要4个值来形成
FileInputSplit split = new FileInputSplit(path, start, length, hosts)
我有路径,开始,长度,我需要获取主机,因此对于
start
和length
指定的文件的每个部分,我都获取位置块final BlockLocation[] blocks = fs.getBlockLocations(file, start, length);
,然后从这些块中获取主机。如果我感兴趣的部分跨越多个块,我不确定该怎么做:
形成FileInputSplit时的
offset, length
中的blocks[i]
我的猜测
我猜这没关系,我猜我可以使用文件的开始,长度,并仅附加具有多个块的所有主机的列表。由于记录读取器将仅使用fileSystem来读取文件。可能发生的所有事情是,映射器任务可能需要从其他节点或机架读取块。
最佳答案
此Jira讨论您所指的场景。