发布网友 发布时间:2022-04-24 16:15
共1个回答
热心网友 时间:2022-05-06 09:14
Hadoop网络流量分析
NetFlow产生大量的数据,但大多时候我们只需要这些数据的统计结果。用普通的串行方法可以在少量的数据集上进行统计,并且达到很理想的效果,但是一旦数据超过一定量级,便不能有效地进行处理,这时一些基于分布式的并行计算框架就有了用武之地。为了实现并行计算,已经有很多组织机构提出了多种方法,其中以Google提出的MapRece框架最为著名。该框架已被广泛应用于文本搜索,海量数据挖掘等场合。
概述
图1展示了我们进行流分析时的机器拓扑结构。其中Hadoop云平台提供了分布式文件系统HDFS和云计算功能。
首先从各个数据源中提取数据,然后把各个数据源数据解析出来的可读数据上传云平台上。云平台的计算由一个主节点组织,若干从节点协同。主节点用来存储元数据、分配资源和任务调度。我们可以对其进行相应的系数配置如缓冲区大小、数据分片大小、处理线程的多少等因素,以更好地达到实验效果。从节点则接受主节点的调度,主要参与运算,同时也会定时反馈自己所在节点的状况。每个从节点上会根据HDFS的配置有若干份,在进行分布式计算时,从节点计算时通过Hadoop自带的RPC协议来进行通信。具体的计算过程则是由MapRece框架完成。
MapRece下的Flow分析
MapRece计算框架下,任何数据都可以被看做是一对键值的组合。Map函数和Rece函数是 Map-Rece的两大组成部分。Map函数用来对原始数据进行过滤,然后产生中间结果(也是键-值的形式)该中间结果作为Rece函数的输入。之后,Hadoop会把具有相同键的值归为一个列表,然后再遍历列表进行数据的统计。Rece过后,通常中间数据集都会缩小,因为Rece过程中仅提取了该部分的有效信息。为了能使用MapRece框架进行不同流字段的分析,应当设计自己Map和Rece函数,如果要做某时间段的流量检测,那么Map函数要设计成带有可以提取某时间段所有流量的功能。如果我们要查看是否有潜在的DDos攻击,那么Map函数被设计成可以提取知名端口字段,其他的功能与此类似。
图2详细地介绍了统计某时间段流量的MapRed-uce的工作流程。图中有一个上文没有提到combiner的过程,该过程主要用于再从节点进行部分归并,以提高程序的运行效率。
1.输入文件
首先,我们把提取的原始NetFlow字段利用SILK自带的工具rwfilter解析成Hadoop可以读出的数据字段,即文本字段。接着把这些解析出来的字段由Hadoop客户端上传到HDFS中,由于解析出来的文本字段远远大于原来的二进制形式的文件,所以需要把这部分输入规模变小一些。SILK本身并不提供解析二进制文件的接口,所以采取了把源数据进行压缩的方法,采取的压缩格式最好是能支持 Hadoop的LZO,通过实验也证明了这种压缩方式确实有最好效率。
2.Mapper
Mapper首先读入存在在HDFS中的文件作为自己的输入,它的读入以行为单位。然后再用文本处理工具对这些行字段进行提取,提取的字段和要进行的操作有关。以统计某时段的某IP的流入流量为例,Mapper输入中会有IP、端口、协议、时间戳等字段。由于是进行某时间段流量的统计,我们把该时间段内的IP字段提取出来作为键,把该时间段内的流量提取出来作为值,这样就构成了一个Mapper。
3.Recer
Recer把Mapper的输出作为输入,同样以统计某IP地址某时间段流入流量为例。Mapper中得到了IP-Bytes键值对,Recer中把相同的键所对应的值归并在一个列表L中这样,键值对就变成(IP,L),这样就可以遍历L并把所有的流量相加,就得到了我们想要的结果。
实验及结果对比
为了进行实验,我们搭建了1个主节点以及4个从节点的Hadoop-2.4.1版本的集群,集群的每个从节点带有2.83GHz的12核CPU,内存大小为48G,硬盘大小为40TB,集群的主节点带有一个12核2.83GHz的CPU和64G内存。为了提高效率,主从节点均在同一个机架上,连在同一个交换机上。SILK的对比试验则是在单节点上进行,配置相同。
可以看到当数据量不大时,SILK往往具有更快的速度,这是因为Hadoop在进行计算前,要做一些集群间的通信及初始化工作,在小数据集上并不占优势。然而当我们把实验数据逐渐加大时,发现Hadoop会在某个点超越SILK的分析速度,当数据集再逐渐扩大时,Hadoop的优势变得更加明显,如图3所示。
本文主要展示了如何利用Hadoop和MapRece框架进行大规模的网络流的分析的方法,并列举了几个利用这种方法进行实际分析的实例以及和传统方法进行网络流分析的对比。实践中,该方法在大量数据的情况下相比于传统的流分析工具具有更高的效率。另外它在可靠性、可扩展性方面也有着突出的表现,随着Hadoop更高版本的推出,现在的单点故障问题以及分布式系统安全方面也有了显著的提升,使得该方法的应用更成为了可能。