2

Hadoop 权威指南(第 4 版)在第 137 页有一段:

面向列的格式需要更多内存用于读取和写入,因为它们必须在内存中缓冲行拆分,而不仅仅是单行。此外,通常无法控制写入发生的时间(通过刷新或同步操作),因此面向列的格式不适合流式写入,因为如果写入进程失败,则无法恢复当前文件。另一方面,面向行的格式(如序列文件和 Avro 数据文件)可以在写入器失败后读取到最后一个同步点。正是出于这个原因,Flume(参见第 14 章)使用了面向行的格式。

我不明白为什么在失败的情况下无法恢复当前块。有人可以解释有关此声明的技术困难:

我们无法控制写入发生的时间(通过刷新或同步操作)

4

1 回答 1

1

不明白为什么当前块在失败的情况下无法恢复。

只是因为没有块可以恢复。解释很清楚,柱状格式(ORC、Parquet 等)会自行决定何时刷新。如果没有刷新,则没有“阻塞”。由于 Flume 无法控制列式内存缓冲区何时被写入存储,因此它不能依赖这种格式。

于 2015-06-05T11:56:27.687 回答