flume hdfs sink flush和roll之间的区别

xghobddn  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(444)

我在flume文档中遇到了hdfs sink的两个配置属性:

hdfs.rollCount  Number of events written to file before it rolled (0 = never roll based on number of events)

hdfs.batchSize  number of events written to file before it is flushed to HDFS

我想知道这两种性质之间的区别,以及滚动和齐平的区别。在我看来他们看起来是一样的。

ru9i0ody

ru9i0ody1#

在hdfssink中,roll意味着关闭当前文件并将即将发生的事件写入新文件。在这个Flume里有三种不同的滚动方式,即滚动计数、滚动间隔和滚动大小。
批处理用于确定从通道提交的频率。这在使用文件通道时非常有用。由于每次提交都将从通道中删除事件,因此提交调用越少,对磁盘的随机i/o就越少,吞吐量也就越好。

doinxwow

doinxwow2#

roll意味着接收器将通过从文件名中删除hdfs.inusesuffix(默认情况下为“tmp”)来关闭当前文件,并将传入事件写入新文件,直到它再次达到限制并且整个循环继续。
flush意味着一次将缓存在内存缓冲区中的n个文件写入hdfs,其中n在hdfs.batchsize中定义。例如,如果hdfs.batchsize定义为100,而不是100个单独的io操作,则只会发生一个大io操作,一次写出所有100个文件,以减少打开和关闭流的io开销。
rollcount定义每个文件中的最大事件数,hdfs.batchsize定义内存缓冲区中的最大事件数。在某些情况下,滚动和刷新发生在达到阈值之前,例如,当flume代理关闭时,当前文件将被关闭,而不必包含hdfs.rollcount事件,内存缓冲区中的所有剩余事件将被刷新到hdfs。

相关问题