网络安全态势感知之大数据处理与分析

2019 年 7 月 19 日 计算机与网络安全

一次性付费进群,长期免费索取教程,没有付费教程。

教程列表见微信公众号底部菜单

进微信群回复公众号:微信群;QQ群:460500587

微信公众号:计算机与网络安全

ID:Computer-network

大数据包括静态数据和动态数据,按时间跨度还可分为历史数据和实时数据,对于这些不同类型的数据有不同的计算处理方式。本文介绍与网络安全态势感知相关的大数据处理与分析技术,包括用来进行静态数据处理的批量数据处理框架、用来进行动态数据实时计算的流式计算框架、用来进行交互式数据查询的交互式数据分析框架以及用来进行图结构数据处理的新型图计算框架等。按照以下顺序依次介绍关键的几种大数据处理与分析技术:


● 批量数据处理

● 交互式数据分析

● 流式计算

● 图计算

● 高级数据查询语言Pig


1、批量数据处理


批量数据处理(Batch Data Processing)简称批处理,是发展和应用最早也最为广泛的数据处理技术。


(1)批量数据处理技术发展过程


以前,批量数据处理最主要的应用场景就是传统的ETL过程,即数据仓库技术中将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程,往往用传统的关系数据库就能完成。但是当传统数据库扩展性能遭遇瓶颈后,出现了MPP(Massive Parallel Process)技术,MPP是将任务并行地分散到多个服务器和节点上,在每个节点上计算完成后再将各自部分的结果汇总在一起,从而得到最终结果。MPP常用于TB级别的数据规模。可是随着数据量的不断扩大,达到PB级时MPP由于自身架构的限制,也遇到了明显的扩展瓶颈,于是又出现了Hadoop。与MPP计算和存储相耦合所不同的是,Hadoop采用的是计算和存储相分离的设计,计算主要靠MapReduce,而存储采用HDFS。当然,除了MapReduce,还可以根据业务需要选择流式计算、图计算等其他计算框架,数据处理灵活度和计算性能大为提升。下面我们重点介绍用于批量数据处理的Hadoop计算模式——MapReduce。


(2)MapReduce计算框架简介


MapReduce是Hadoop的核心组成部分之一,它是一种编程模型框架,主要用于大规模数据集的并行运算。MapReduce的主要思想是“分而治之”,自动将一个大的计算拆解成Map(映射)和Reduce(化简)的方式,也就是将复杂的、运行于大规模集群上的并行计算过程高度地抽象到两个函数——Map和Reduce上,并且允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,并将其运行于廉价计算机集群上,从而完成海量数据的处理。


(3)MapReduce的工作过程


图1是MapReduce计算的大致工作过程,具体步骤如下。

图1  MapReduce工作过程中的各个执行阶段

采用InputFormat模块做Map前的预处理,比如验证输入的格式是否符合输入定义等。


将输入文件切分为逻辑上的多个InputSplit(MapReduce对文件进行处理和运算的输入单位),这种逻辑切割并没有对文件进行实际切割,只是记录了待处理数据的长度和位置。


经过一定的加载并转换为适合Map任务读取的键值对,输入给Map任务,Map会根据用户自定义的映射规则,输出一系列的<key,value>作为中间结果。每个Map任务通常运行在存储数据的节点上,这样计算和数据就可以放在一起运行,从而减少数据传输开销。


对Map输出的一系列的<key,value>中间结果需要进行Shuffle(洗牌),包括分区、排序、合并、归并等操作,从而得到一系列的<key,value-list>形式的中间结果,再交由多个对应的Reduce任务在多台机器上进行并行处理,具有相同key的<key,value-list>会被发送到同一个Reduce任务那里。


Reduce任务会对中间结果<key,value-list>进行汇总计算,执行用户定义的逻辑,并输出结果给OutputFormat模块。


OutputFormat模块会验证输出目录是否已经存在,以及输出结果类型是否符合配置文件中的配置类型,若都满足,就输出Reduce的计算结果到分布式文件系统中。


在上述步骤里,其中第4个步骤中的Shuffle过程是MapReduce整个工作过程的核心,也被称为“奇迹发生的地方”,我们在此对其重点说明。


Shuffle原意指洗牌或弄乱,它描述了数据从MapTask输出到ReduceTask输入的这一过程,因此横跨Map和Reduce两端。图2展示了Shuffle的全过程。

图2  Shuffle全过程图

Map端的Shuffle过程:保存在分布式文件系统的文件块中的输入数据经过Map计算,转换成<key,value>进行输出,输出结果会被首先写入缓存,在缓存中积累一定数量的Map输出结果并存满时,就会启动溢写(Spill)操作,把缓存中的数据再一次性批量写入磁盘。该期间,溢写操作主要会对缓存中数据进行分区,然后对每个分区的数据进行排序和合并,之后再写入磁盘文件。每次溢写操作都会生成一个新的磁盘文件,随着Map任务的执行,磁盘中会生成多个溢写文件,在Map任务全部结束之前,这些溢写文件会被归并成一个大的磁盘文件,然后通知相应的Reduce任务来领取属于自己处理的数据。


Reduce端的Shuffle过程:相对于Map端而言,Reduce端的Shuffle过程非常简单。Reduce任务从Map端的不同Map机器领取属于自己处理的那部分数据,然后对数据进行归并后,交给Reduce任务处理,Reduce任务会执行Reduce函数中定义的各种映射,输出最终结果,并保存到分布式文件系统(如HDFS)中。


(4)MapReduce的主要功能


MapReduce提供了以下主要功能:


数据划分和计算任务调度:系统自动将一个作业(Job)待处理的大数据划分为很多个数据块,每个数据块对应一个计算任务(Task),并自动调度计算节点来处理相应的数据块。作业和任务调度功能主要负责分配和调度计算节点(Map节点或Reduce节点),同时负责监控这些节点的执行状态,并负责Map节点执行的同步控制。


代码向数据迁移:为了减少数据通信,一个基本原则是本地化数据处理,即一个计算节点尽可能处理其本地磁盘上所分布存储的数据,这实现了代码向数据的迁移;当无法进行这种本地化数据处理时,再寻找其他可用节点并将数据从网络上传送给该节点(数据向代码迁移)。这种机制能够大大减少通信延迟。


系统优化:为了减少数据通信开销,中间结果数据进入Reduce节点前会进行一定的合并处理;一个Reduce节点所处理的数据可能来自多个Map节点,为了避免Reduce计算阶段发生数据相关性,Map节点输出的中间结果需使用一定的策略进行适当的划分处理,保证相关性数据发送到同一个Reduce节点;此外,系统还进行一些计算性能优化处理,如对最慢的计算任务采用多备份执行、选择最快完成者作为结果。


出错检测和恢复:在以低端商用服务器构成的大规模MapReduce计算集群中,节点硬件出错和软件出错是常态,因此MapReduce需要能检测并隔离出错节点,并调度和分配新的节点接管出错节点的计算任务。同时,系统还将维护数据存储的可靠性,用多备份冗余存储机制提高数据存储的可靠性,并能及时检测和恢复出错的数据。


(5)MapReduce的技术特征


MapReduce的主要技术特征如下:


向“外”横向扩展,而非向“上”纵向扩展,用廉价低端的商用服务器堆积起来。


失效被视为常态,采用多种有效的容错机制来提高节点失效的健壮性。


把处理向数据迁移,减少数据通信负担。


顺序处理数据、避免随机访问数据,提供高带宽的数据访问和传输。


为应用开发者隐藏系统层细节,程序员仅需描述需要计算什么,而具体计怎样计算就交由系统的执行框架处理。


平滑的数据和系统规模可扩展性,对于很多计算问题,基于MapReduce的计算性能可随节点数目增长保持近似于线性的增长。


2、交互式数据分析


交互式数据分析通常基于历史数据进行交互式查询,时间跨度在数十秒到数分钟之间,具有低时延、查询范围大、查询条件复杂、并发要求高和支持SQL接口等特点。Hadoop的MapReduce解决了大规模数据的批处理问题,随着其日渐流行,如何在Hadoop上面构建适合商业智能分析人员使用的便捷交互式查询分析系统逐渐成为需要解决的问题,这是因为Hadoop提供的MapReduce计算接口还是面向技术人员的底层编程接口,不那么容易使用,于是各种SQL-On-Hadoop系统应运而生,这些支持对大数据进行交互式数据分析的数据仓库受到了广泛关注。目前根据技术框架和路线的不同,大致可将SQL-On-Hadoop系统分为四类。


Hive系:以Hive为代表,直接构建在Hadoop之上的数据仓库,应用最为广泛。


Shark系:一般构建在Spark平台之上的数据仓库。


Dremel系:以Impala、Presto和PowerDrill为代表,采用Dremel的设计思路,融合了MPP并行数据库的设计思想。


混合系:将传统关系数据库和Hadoop进行混合的数据仓库,如HadoopDB。


下面我们以最早出现且应用最为广泛的Hive为重点介绍对象。

(1)Hive简介


虽然Hive的性能不是很高,但它是Hadoop的子项目,是基于Hadoop的数据仓库工具,广泛用于对Hadoop文件中的数据集进行数据整理、特殊查询和分析存储,它比传统数据仓库具有更强的处理超大规模数据的能力和更好的容错性。Hive为Hadoop里存储的数据增加了模式(Schema),并提供了类似于关系数据库SQL语言的查询语言——HiveQL,可以快速实现简单的MapReduce统计。Hive自身可以将HiveQL语句转换为MapReduce任务运行,而不必开发专门的MapReduce应用,因而很适合数据仓库的统计分析。


(2)Hive的数据组织结构


Hive采用分级数据组织结构,如图3所示。

图3  Hive的数据组织结构

我们来看一下其中的构成。


表(Table):最基本的数据单元,类似于关系数据库中的表,由行记录构成,每行下由若干列组成,存储在HDFS的一个目录下。


分片(Partition):每个表可切分成若干数据分片,每个数据分片的数据存储在对应表在HDFS相应目录下建立的子目录中。


桶(Bucket):将表或某个分片根据某列的值通过Hash函数散列成的若干文件,一个文件对应一个“桶”。


(3)Hive的架构


Hive整体架构如图4所示,其主要组件包括CL1、JDBC/ODBC、Web GUI、Thrift服务器、元数据库和驱动器(包括编译器、优化器和执行器),这些组件可大致分为两个大类:服务器端组件和客户端组件。

图4  Hive整体架构

服务器端组件包括:


数据库(MetaStore):存储和管理Hive中数据表的元数据,包括表的名字、表的列和分区及其属性、表数据所在目录等信息。Hive采用关系数据库来保存元数据。


驱动器(Driver):负责HiveQL语句在整个Hive内流动时的生命周期管理,包括解析、编译优化和执行,然后调用底层MapReduce计算框架。


Thrift服务器(Thrift Server):一个软件框架,用来进行可扩展且跨语言的服务的开发,它能让不同的编程语言调用Hive的接口。


客户端组件包括:


CLI(命令行接口):一种客户端接入方式。


Thrift客户端(Thrift Client):Hive架构的许多客户端接口都是建立在Thrift客户端之上的,包括JDBC和ODBC接口。


Web GUI(网页访问接口):通过网页访问Hive的接口方式。


(4)Hive的执行流程


Hive的本质就是将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务运行,其执行流程如图5所示。

图5  Hive执行流程

从用户提交一个查询(假设通过CLI入口)直到获取最终结果,Hive内部的执行流程为:


CLI获取用户查询,解析用户输入的命令,提交给驱动器。

驱动器结合编译器和元数据库,对用户查询进行编译解析。

根据解析结果(查询计划)生成MR任务提交给Hadoop执行。

获取最终结果。


3、流式计算


如果说批量数据处理是以静态数据为对象,可以在很充裕的时间内对海量数据进行批量处理,计算出有价值的信息,那么流式计算则是对源源不断的动态数据(流式数据)进行实时分析处理,从而获得有价值的信息,这在大数据时代很常见。流式数据被处理后,一部分进入数据库成为静态数据,其他部分则直接被丢弃;必须采用实时计算以获得实时计算结果。与普通的数据采集系统(一般由采集“Agent”、收集“Collector”和存储“Store”组成)所不同的是,流式计算一般不在Store中进行存储,而是直接将采集来的数据发送给流式计算框架。目前已经涌现出众多流计算框架和平台,有商业级的也有开源的,业界最为典型的两款流式计算框架就是Storm和Spark Streaming。


(1)开源流式计算框架Storm


Storm是Twitter开源的一个分布式流式计算框架,目前也已成为Apache的孵化项目,其可以简单、高效、可靠地处理流式数据并支持多种编程语言。Storm框架可以很方便地与数据库系统进行整合,从而开发出强大的实时计算系统。


Storm处理的是流数据(Stream),流数据由一个无限的Tuple序列组成,这些Tuple序列会以分布式方式并行创建和处理。Storm涉及的主要角色有:


Nimbus:负责资源分配和调度,相当于Master节点,类似Hadoop中的JobTracker。


Supervisor:接收Nimbus分配的任务,启动和停止属于自己管理的Worker进程,类似Hadoop中的TaskTracker。


Worker:运行具体处理组件逻辑的进程,类似Hadoop中的Child。


Task:Worker中每一个Spout/Bolt的线程称为一个Task。


Storm一般运行在分布式集群中,与Hadoop运行MapReduce作业相似,在Storm上运行的是Topology(由Spout和Bolt组成的网络抽象)。Storm采用ZooKeeper作为分布式协调服务组件,图6描述了Storm集群架构示意图。

图6  Storm架构示意图

基于上述集群架构,Storm的工作流程主要包括四个过程:


客户端提交Topology到Storm集群中。

Nimbus将分配给Supervisor的任务存储到ZooKeeper中。

Supervisor从ZooKeeper中获取分配的任务,并启动Worker进程。

Worker进程执行具体的Task任务。


Storm详细工作过程如图7所示。

图7  Storm工作流程图

(2)基于Spark的实时计算框架Spark Streaming


Spark Streaming是构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力,使得Spark同时具备了对批处理、交互式分析和流式计算的多种能力,成为既能对静态历史数据也能对动态实时数据进行处理分析的平台。


图8展示了Spark Streaming的工作流程。Spark Streaming用于将流式计算分解成一系列短小的批处理作业。这里的批处理引擎是Spark,它把Spark Streaming的输入数据按照批尺寸分成一段段的数据,称之为DStream(Discretized Stream),每一段数据都转换成Spark中的RDD(Resilient Distributed Dataset),然后将Spark Streaming中对DStream的Transformation操作转换为Spark中针对RDD的Transformation操作,并将操作结果保存在内存中。

图8  Spark工作流程图

根据业务需要,整个流式计算可对中间结果进行叠加,或存储到外部设备。Spark中的RDD具有良好的容错机制,每个RDD都是一个不可变的分布式、可重算的数据集,记录着确定性的操作继承关系,即使某处输入数据出错,仍能通过计算重新恢复。在实时性上,Spark Streaming将流式计算分解成多个SparkJob,每段数据的处理都会经过SparkDAG图分解以及任务集的调度,最小延迟在0.5~2s之间,能满足大多数实时计算任务。此外,Spark在EC2上已经能线性扩展到100个节点(每节点4核),可以以数秒的延迟处理6GB/s的数据量,其吞吐量也比Storm高3倍以上。


(3)Storm和Spark Streaming对比


二者最大的区别在于,Storm实时程度更高,可以实现毫秒级响应,而Spark Streaming做不到。这是因为Spark Streaming将流式数据按批处理窗口大小(通常在0.5~2s之间)分解为一系列批处理作业,且每段数据的处理都会经过Spark DAG图分解、任务调度过程,因此无法实现毫秒级响应。尽管如此,Spark Streaming对大多数准实时计算场景完全胜任。


Spark Streaming的优势在于其构建在Spark之上,虽然有一定延迟,但仍能用于实时计算,且很容易进行高效的容错处理。此外,Spark Streaming采用的小批量处理方式可以很好地兼容其他批量和实时数据处理框架,如Hadoop,因此其应用也很广泛,尤其是需要历史数据和实时数据联合分析的场景下。

4、图计算


图计算是在实际应用中也很常见的计算类别,因为当前有很多数据都是以大规模图或者网络的形式呈现,典型的如社交网络。还有许多非图结构的数据常被转换为图模型之后再进行分析处理。对于如何高效处理计算海量图数据,前面介绍的几种计算手段显然难以满足需求,这就催生了图计算框架,Pregel就是其中最具代表性的产品。


(1)Pregel简介


Pregel是谷歌公司提出的大规模分布式图计算平台,主要用于解决网页链接分析、社交数据挖掘等实际应用中涉及的大规模分布式计算问题。Pregel是基于“整体同步并行计算模型”BSP模型实现的,其通过搭建一套可扩展、有容错机制的平台提供一套灵活的API,用于描述各类图计算问题。


(2)Pregel计算模型


Pregel在概念模型上遵循BSP模型,用户只需自定义一个针对图节点的计算函数F(vertex)来实现图节点计算功能,整个计算过程由若干顺序执行的超级步(Super Step)组成,系统从一个“超级步”迈向下一个“超级步”,直到达到算法的终止条件。其他任务比如任务分配、任务管理、系统容错等都交由Pregel系统来实现即可。总的来说,典型的Pregel计算是由图信息输入、图初始化操作,以及由全局同步点分隔开的连续执行的超级步组成,最后将计算结果进行输出。Pregel计算模型如图9所示。

图9  Pregel计算模型

(3)Pregel系统架构


Pregel采用“主/从”结构来实现其功能,其系统架构如图10所示。

图10  Pregel系统架构

在Pregel系统中,由一台服务器充当主控服务器,负责整个图结构的任务切分,采用切边法将其切割成子图,并把任务分配给众多的工作服务器,主控服务器对工作服务器下达命令,进行每一个“超级步”的计算,并对障碍点进行同步和收集计算结果。在整个过程中,主控服务器只进行系统管理工作,不负责具体的图计算,而工作服务器对活跃节点调用F(vertex)进行图计算。总之,Pregel是一个消息驱动的、遵循以图节点为中心的编程模型的同步图计算框架。


5、高级数据查询语言Pig


虽然MapReduce为批量数据处理提供了计算框架,但其使用并不容易,耗时耗力。Pig的出现大大简化了MapReduce的工作,为Hadoop应用程序提供了一种更接近结构化查询语言(SQL)的接口。简单来说,若使用MapReduce需要编写一个应用程序,而使用Pig则只需写一个简单的脚本就可以了。


事实上,Pig主要用于加载数据、表达转换数据以及存储最终结果,也就是常常说的ETL过程:对来自不同数据源的数据进行收集,采用Pig进行统一加工处理,然后加载到数据仓库中,从而实现对海量数据的分析。


(1)Pig简介


Pig作为Hadoop生态系统的一部分,是一种探索大规模数据集的脚本语言,为大型数据集的处理提供了更高层次的抽象,适合于基于Hadoop和MapReduce平台来查询大型、半结构化数据集。Pig会自动把用户编写的脚本转换成MapReduce作业并在Hadoop集群上运行,具备对生成的MapReduce程序进行自动优化的功能。


(2)Pig的组成


它主要包括两个部分:一是用于描述数据流的语言,称为Pig Latin;二是用于运行Pig Latin程序的执行环境。前者由一系列的操作(Operation)和变换(Transformation)组成,对输入的数据进行处理并生成输出结果,整个过程用于描述数据流;后者把数据流翻译成可执行的MapReduce作业并运行它。


(3)Pig语句的格式


Pig语句常常按照以下格式来编写:


通过LOAD语句从文件系统读取数据。


通过一系列操作和变换对数据进行处理。


通过一条STORE语句把处理结果输出到文件系统中,或者使用DUMP语句把处理结果输出到屏幕上。


Pig的优秀之处在于仅仅用控制台上的五六行Pig Latin代码就能够处理TB级的数据,它提供多个命令来检查和处理程序中已有的数据结构,因此可以很好地支持程序员写查询。

微信公众号:计算机与网络安全

ID:Computer-network

【推荐书籍】

登录查看更多
0

相关内容

MapReduce 是 Google 提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。
异质信息网络分析与应用综述,软件学报-北京邮电大学
高效医疗图像分析的统一表示
专知会员服务
33+阅读 · 2020年6月23日
【干货书】现代数据平台架构,636页pdf
专知会员服务
250+阅读 · 2020年6月15日
智能交通大数据最新论文综述-附PDF下载
专知会员服务
103+阅读 · 2019年12月25日
【大数据白皮书 2019】中国信息通信研究院
专知会员服务
133+阅读 · 2019年12月12日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【白皮书】“物联网+区块链”应用与发展白皮书-2019
专知会员服务
91+阅读 · 2019年11月13日
今日头条技术架构分析
互联网架构师
11+阅读 · 2019年8月19日
大数据安全技术浅析
计算机与网络安全
14+阅读 · 2019年4月24日
云游戏行业发展趋势分析报告
行业研究报告
13+阅读 · 2019年3月24日
【大数据】海量数据分析能力形成和大数据关键技术
产业智能官
17+阅读 · 2018年10月29日
网络安全态势感知
计算机与网络安全
25+阅读 · 2018年10月14日
孟小峰:机器学习与数据库技术融合
计算机研究与发展
14+阅读 · 2018年9月6日
Flink 靠什么征服饿了么工程师?
阿里技术
6+阅读 · 2018年8月13日
网络安全态势感知浅析
计算机与网络安全
16+阅读 · 2017年10月13日
Spark App自动化分析和故障诊断
CSDN大数据
7+阅读 · 2017年6月22日
Bidirectional Attention for SQL Generation
Arxiv
4+阅读 · 2018年6月21日
Arxiv
3+阅读 · 2017年12月23日
Arxiv
26+阅读 · 2017年12月6日
VIP会员
相关VIP内容
异质信息网络分析与应用综述,软件学报-北京邮电大学
高效医疗图像分析的统一表示
专知会员服务
33+阅读 · 2020年6月23日
【干货书】现代数据平台架构,636页pdf
专知会员服务
250+阅读 · 2020年6月15日
智能交通大数据最新论文综述-附PDF下载
专知会员服务
103+阅读 · 2019年12月25日
【大数据白皮书 2019】中国信息通信研究院
专知会员服务
133+阅读 · 2019年12月12日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
94+阅读 · 2019年12月4日
【白皮书】“物联网+区块链”应用与发展白皮书-2019
专知会员服务
91+阅读 · 2019年11月13日
相关资讯
今日头条技术架构分析
互联网架构师
11+阅读 · 2019年8月19日
大数据安全技术浅析
计算机与网络安全
14+阅读 · 2019年4月24日
云游戏行业发展趋势分析报告
行业研究报告
13+阅读 · 2019年3月24日
【大数据】海量数据分析能力形成和大数据关键技术
产业智能官
17+阅读 · 2018年10月29日
网络安全态势感知
计算机与网络安全
25+阅读 · 2018年10月14日
孟小峰:机器学习与数据库技术融合
计算机研究与发展
14+阅读 · 2018年9月6日
Flink 靠什么征服饿了么工程师?
阿里技术
6+阅读 · 2018年8月13日
网络安全态势感知浅析
计算机与网络安全
16+阅读 · 2017年10月13日
Spark App自动化分析和故障诊断
CSDN大数据
7+阅读 · 2017年6月22日
Top
微信扫码咨询专知VIP会员