Hadoop 权威指南(第 4 版)在第 137 页有一段:
面向列的格式需要更多内存用于读取和写入,因为它们必须在内存中缓冲行拆分,而不仅仅是单行。此外,通常无法控制写入发生的时间(通过刷新或同步操作),因此面向列的格式不适合流式写入,因为如果写入进程失败,则无法恢复当前文件。另一方面,面向行的格式(如序列文件和 Avro 数据文件)可以在写入器失败后读取到最后一个同步点。正是出于这个原因,Flume(参见第 14 章)使用了面向行的格式。
我不明白为什么在失败的情况下无法恢复当前块。有人可以解释有关此声明的技术困难:
我们无法控制写入发生的时间(通过刷新或同步操作)