场景描述:
netflow是cisco路由器中产生的flow元数据,默认情况下会每5分钟从cache中对外吐一次。
netflow相关信息见http://www.cisco.com/en/US/prod/collateral/iosswrel/ps6537/ps6555/ps6601/prod_case_study0900aecd80
311fc2.pdf
公司有服务器对netflow数据进行收集,收集到的文件为二进制.data文件。现在需要对元数据抽取出源IP、目的IP、源端口、目的端口等信息,转换为txt文件,供后续大数据分析使用。目前有100多个路由器产生flow数据,大概每5分钟有至少100个data文件,共500M左右(每秒7万条flow产生)。
解决方案一:
使用java多线程调用nfdump转换为txt文件。
思路:起一个线程扫描产生data文件的路径;扫描到的文件名存在资源池中,再起多线程(暂定3个)从资源池中取出数据进行处理,处理完后生成的txt放入另一个路径中,删除原路径下的data文件。
具体转换逻辑:
1. java process 调用shell脚本
2. shell脚本中执行nfdump命令进行转换及转换后删除原data文件。这一步需要在服务器上安装nfdump(yum install nfdump)
多线程启动部分代码忽略,贴一下转换过程代码。
java代码:
import java.util.Date;
/**
* 调用shell命令,转换出txt文本
* @author wyh
*
*/
public class ExchangeTxt {
public void execute(String fileName,String path,String targetPath) {
String filePath = path+File.separator+fileName;
String cmdS