基于Hadoop的大规模网络流量分析

在网络流量的分析中,基于流的分析被大多数ISP所采用,分析系统一般部署在一台高配置的服务器中。如由CERT网络势态感知团队(CERT-NetSA)开发的用于大规模网络安全分析的网络交互分析工具集 SILK(the System for Internet-Level Knowledge),支持有效的收集、存储和分析网络流数据,SILK可以高效地查询历史大流量数据集,能用于分析大的企业或者中型ISP的骨干或边界网络流量。然而,随着互联网带宽的日益增加,单台系统会受到硬件等因素的限制使计算速度变得很缓慢,而且数据存放在单个服务器时的风险往往也很大,需要考虑使用分布式的方法。而分布式计算平台Hadoop以及依托在Hadoop平台下的MapReduce框架为解决这类问题提供了良好的支撑。Hadoop 是Apache的一个子项目主要由分布式文件系HDFS计算框架和资源管理器YARN组成,其中MapReduce是当中最着名的计算框架,也是大规模分析网络流量的基础。

  Hadoop搭建的网络流量分析系统比之传统的分析手段有着以下的优点:1.更节省成本。只用少量的廉价机器就可以搭建起一个基于Hadoop的分布式计算平台;2.更具扩展性。使用分布式计算框架,每个节点都参与运算,计算效率随着节点数的增加线性增长;3. 更加可靠。分布式数据系统HDFS保证了备份数据的数量均匀分布在集群内部的各个节点上,数据更不易因机器的故障而丢失。本文基于Hadoop设计实现了适用于大规模网络流量的分析系统,使用了四个节点构成的分析集群,用来和一个单点SILK的数据流分析工具进行对比,结果表明该方法在大量数据的情况下相比于传统的流分析工具具有更好的效率、可靠性及可扩展性。

  网络流分析

  一条流由一个源主机与一个目的主机间的单方向传输的网络数据包组成,其中源和目的主机由各自的IP地址和端口号来标识。更明确的定义是,一条流由源IP地址、目的IP地址、源端口、目的端口、时间戳、服务类型、入逻辑接口标识符等关键字唯一标识。

  在过去的数十年间,有很多技术和工具被广泛地应用到网络流量的分析当中。Tcpdump是最常见的一种网络流分析工具,Wireshark则提供了用户友好的界面,以其简单易用性着称。CoralReef和Snort的相继出现为实时分析网络流量也做出了很大的贡献。随后又出现了如SILK等网络流分析工具。这些网络流分析工具在少量的数据下完全可以胜任网络流分析的工作。然而随着近几年来数据爆炸式的增长,传统的基于单点的网络流量分析的方法变得越来越不能满足需求。

  Hadoop中的MapReduce计算框架以前主要被应用于大规模的网络文本分析、数据挖掘以及日志分析当中。在本次工作中,我们把MapReduce创新性的应用在了网络流分析当中,这样就可以使相应的网络流的统计不在拘泥于一个节点上,突破了单点网络流统计的局限性。同时使得网络流分析具有了更高的可扩展性,每当集群遇到计算瓶颈时,我们只需加入更多的节点,就可以使计算速度提升,而不是花费大量的金钱去购买更高配置的机器。

  Hadoop网络流量分析

  NetFlow产生大量的数据,但大多时候我们只需要这些数据的统计结果。用普通的串行方法可以在少量的数据集上进行统计,并且达到很理想的效果,但是一旦数据超过一定量级,便不能有效地进行处理,这时一些基于分布式的并行计算框架就有了用武之地。为了实现并行计算,已经有很多组织机构提出了多种方法,其中以Google提出的MapReduce框架最为着名。该框架已被广泛应用于文本搜索,海量数据挖掘等场合。

  概述

  图1展示了我们进行流分析时的机器拓扑结构。其中Hadoop云平台提供了分布式文件系统HDFS和云计算功能。

  首先从各个数据源中提取数据,然后把各个数据源数据解析出来的可读数据上传云平台上。云平台的计算由一个主节点组织,若干从节点协同。主节点用来存储元数据、分配资源和任务调度。我们可以对其进行相应的系数配置如缓冲区大小、数据分片大小、处理线程的多少等因素,以更好地达到实验效果。从节点则接受主节点的调度,主要参与运算,同时也会定时反馈自己所在节点的状况。每个从节点上会根据HDFS的配置有若干份,在进行分布式计算时,从节点计算时通过Hadoop自带的RPC协议来进行通信。具体的计算过程则是由MapReduce框架完成。

  MapReduce下的Flow分析

  MapReduce计算框架下,任何数据都可以被看做是一对键值的组合。Map函数和Reduce函数是 Map-Reduce的两大组成部分。Map函数用来对原始数据进行过滤,然后产生中间结果(也是键-值的形式)该中间结果作为Reduce函数的输入。之后,Hadoop会把具有相同键的值归为一个列表,然后再遍历列表进行数据的统计。Reduce过后,通常中间数据集都会缩小,因为Reduce过程中仅提取了该部分的有效信息。为了能使用MapReduce框架进行不同流字段的分析,应当设计自己Map和Reduce函数,如果要做某时间段的流量检测,那么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.Reducer

  Reducer把Mapper的输出作为输入,同样以统计某IP地址某时间段流入流量为例。Mapper中得到了IP-Bytes键值对,Reducer中把相同的键所对应的值归并在一个列表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和MapReduce框架进行大规模的网络流的分析的方法,并列举了几个利用这种方法进行实际分析的实例以及和传统方法进行网络流分析的对比。实践中,该方法在大量数据的情况下相比于传统的流分析工具具有更高的效率。另外它在可靠性、可扩展性方面也有着突出的表现,随着Hadoop更高版本的推出,现在的单点故障问题以及分布式系统安全方面也有了显着的提升,使得该方法的应用更成为了可能。

文章转载自公众号 GitChat精品课

发表评论