在 Hadoop 中,我有一个 3GB 大小的序列文件。我想并行处理它。因此,我将创建 8 个 maptasks 和 8 个 FileSplits。
FileSplit 类的构造函数需要:
Path of the file
Start position
Length
例如,第一次拆分可以从 0 开始,长度为 3GB/8,下一次从 3GB/8 开始,长度为 3GB/8,依此类推。
现在 SequenceFile.Reader 有一个相同的构造函数:
Path of the file
Start position
Length
对于第一次拆分(从 0 开始,长度为 3Gb/8),序列文件能够读取它,因为它包含文件头、压缩类型以及有关键和值类的信息。
但是,对于其他拆分,SequenceFile.Reader 无法读取拆分,因为我认为文件的该部分不包含序列文件的标头(因为文件拆分不是从 0 开始),因此当我尝试使用序列文件时,它会抛出 NullPointerException。
那么有没有办法从序列文件中分割文件?