我在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
我想知道这两种性质之间的区别,以及滚动和齐平的区别。在我看来他们看起来是一样的。
2条答案
按热度按时间ru9i0ody1#
在hdfssink中,roll意味着关闭当前文件并将即将发生的事件写入新文件。在这个Flume里有三种不同的滚动方式,即滚动计数、滚动间隔和滚动大小。
批处理用于确定从通道提交的频率。这在使用文件通道时非常有用。由于每次提交都将从通道中删除事件,因此提交调用越少,对磁盘的随机i/o就越少,吞吐量也就越好。
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。