我正在运行一个使用内存通道的水槽代理。
agent.channels.c1.type = memory
agent.channels.c1.capacity = 1000000
源类型为syslogtcp
,如果类型为hdfs
,则为sink。该代理每分钟收集大约100万条记录。
我担心的是,即使我正在使用内存通道,我的水槽代理也会消耗磁盘空间。因此,如果我的代理程序运行了大约一个月,它会占用大约300gb的磁盘空间,从而导致问题。所以问题是
Q1:为什么在运行使用内存频道的代理时会占用磁盘空间?
Q2:这个空间何时会被释放?是否有任何条件或是否应手动完成。有什么想法将存储这些文件的位置吗?
答案 0 :(得分:0)
文件有多大? HDFS中典型的块大小为64MB,有时设置为128MB ......所以如果你有一个2k的文档,它仍需要64MB的磁盘!
您应该将'batchsize'参数设置为较大的数字,以将这些事件批处理为HDFS上的较大文件。 当然,这也会改变事件在HDFS上转储的速度以及之后的工作,所以如果你在实时之后,这并不理想。您可能希望沉入HBase而不是沉入HDFS,而是将较小的事件聚合到一个大表中。