为什么面向列的文件格式不适合流式写入?

bq3bfh9z  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(344)

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

vjhs03f7

vjhs03f71#

不明白为什么当前块在发生故障时不能恢复。
只是因为没有要恢复的块。解释很清楚,柱状格式(orc、parquet等)决定何时冲洗。如果没有冲水,那么就没有“阻塞”。由于flume无法控制列式内存缓冲区何时被写入存储器,因此它不能依赖于这样的格式。

相关问题