我在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
我想知道这两个属性之间的区别,以及 roll 和 flush 的区别。看起来他们看起来和我一样。
答案 0 :(得分:3)
在HDFS Sink中,roll意味着关闭当前文件并将即将发生的事件写入新文件。在这个接收器中有三种不同的滚动方式,即rollCount,rollInterval和rollSize。
Batch用于确定您希望从频道提交的频率。当您使用文件通道时,这会有很大帮助。由于每次提交都会从通道中删除事件,因此较少的提交调用会导致较少的磁盘随机I / O和更高的吞吐量。
答案 1 :(得分:3)
Roll意味着接收器将通过从文件名中删除默认为“tmp”的hdfs.inUseSuffix来关闭当前文件,并将传入事件写入新文件,直到它再次达到限制和整个周期继续。
Flush意味着立即将缓存在内存缓冲区中的N个文件写入HDFS,其中N在hdfs.batchSize中定义。例如,如果将hdfs.batchSize定义为100,而不是100个单独的IO操作,则只会发生一次大的IO操作,一次写出所有100个文件,以减少打开和关闭流的IO开销。
hdfs.rollCount定义每个文件中的最大数量事件,hdfs.batchSize定义内存缓冲区中的最大事件数。在某些情况下,滚动和刷新发生在达到阈值之前,例如,当水槽代理关闭时,当前文件将关闭而不必包含hdfs.rollCount事件,并且内存缓冲区中的所有剩余事件将被刷新退出HDFS。