根据 Hadoop - The Definitive Guide
FileInputFormats定义的逻辑记录通常不能整齐地放入HDFS块中。例如,TextInputFormat的逻辑记录是行,这些行将经常跨越HDFS边界。这与程序的功能无关(例如,行不会丢失或断线),但是这是值得了解的,因为这确实意味着数据本地映射(即与它们在同一主机上运行的映射)输入数据)将执行一些远程读取。造成的轻微开销通常并不重要。
假设一条记录线分为两个块(b1和b2)。处理第一个块(b1)的映射器将注意到,最后一行没有EOL分隔符,并从下一个数据块(b2)中获取其余行。
处理第二个块(b2)的映射器如何确定第一条记录不完整,应从块(b2)中的第二条记录开始处理?
LineReader.readLine
函数中处理了边界在\ r \ n返回中\ r的边缘情况,我认为这与您的问题无关,但可以在需要时添加更多详细信息。