基于HADOOP的大数据描述统计分析

作者:宋廷山郭思亮韩伟

统计与信息论坛 2016年01期

  一、研究背景

  据IBM估算,全世界每天大约产生250兆字节的数据,而且世界上大约90%的数据是在近两年的时间里产生的[1]。这些数据的来源也相当广泛:如各种互联网企业,像SNS、微博、视频网站;还有像谷歌、亚马逊、阿里巴巴等电子商务企业的数据;还有物联网、移动设备、终端中的商品、个人位置、传感器采集的数据;还有联通、移动、电信等通信和互联网运营商产生的数据;还有天文望远镜拍摄的图像、视频数据、气象学里面的卫星云图数据等等。据市场研究公司预计,到2020年全球数据使用量将达到大约35.2ZB()。在我们还没有做好准备迎接时,大数据时代已悄然来临。

  要想从如此海量的数据中获取有价值的信息,海量数据分析是基础和关键。与传统数据分析相比,海量数据分析面临数据搜集、存储、筛选、分析、挖掘、可视化等众多问题,统计分析方面的主要问题在于分析工具和分析方法的变革。从分析工具看,随着海量数据的飞速增长以及数据结构的多样性和复杂性,单机模式下的统计分析工具已经无法满足统计分析需求。现有的主流统计分析工具均来自于国外,根据运行环境不同可以分为两类,一类是单机运行的统计软件包,如IBM SPSS、Matlab、SAS、Stata、Mathematica等;一类是带统计功能的编程语言,如R、Python、D3、Weka等。第一类统计分析工具由于存在先天缺陷,基本无法胜任海量数据的统计分析;第二类统计分析工具则具有一定的跨平台性和可扩展性,通过对其进行改造和扩展,可以进行海量数据的统计分析,如R语言和Hadoop平台的融合就是比较典型的成功案例,Hadoop的海量数据存储、计算功能加之R语言的强大成熟的统计分析方法模型,二者功能互补,相得益彰,开辟了统计为海量数据分析服务的一条道路。但是这种工具与工具的融合也同样存在着巨大缺陷,如技术门槛过高,知识需求过于复杂等,使用者要能正确使用融合后的新工具,必须熟练掌握Hadoop分布式云计算架构知识、JAVA、R等语言开发技术、Linux、windows等系统软件知识、数理统计、线性代数等数学和统计知识、软件开发、数据可视化技术、各类统计方法的计算机算法,还要熟悉所运用的行业知识。在企业的具体实施中也同样需要多个部门、众多类型高级人才的通力配合才能实现,因此,实际运用中的困难较大。从分析方法看,传统的以抽样为基础的“先模型,后关系”的统计分析方法在海量数据背景下行不通,传统的“相关关系”内涵以及以此为基础的因果关系分析及预测的统计分析模式亟需变革[2]。但并不能因此就在海量数据分析中对传统统计分析的理论方法全盘否定,任何的数据分析都需要以传统的统计分析思想或方法为基础,在新的环境下对其进行改进,以适应具体业务的统计分析需求,比如描述统计的基本理论和方法,无论是在传统统计分析还是海量数据分析中,都是最基础的部分,只是在海量数据分析的实际应用中,既要考虑其快速高效的实现,又要考虑其可扩展性和多系统的可共用性等问题。

  在国内外现有的相关研究中,基本上都是计算机领域专家从计算机视角下对海量数据分析进行的研究,统计学视角下的相关研究很少,且基本上都集中于大数据统计分析理念的探讨,如王桂强等对计算机并行技术下的海量数据统计分析技术进行了分析,从理论上提出了一些解决方案[3];乔晗等提出了一种利用扫描数据编制中国CPI的思路,为基于大数据的政府统计源头数据信息化改革提供了理论和实践参考[4];张明康结合实际工作,对政府统计应用大数据的路径进行了系统分析[5];游士兵等对大数据时代下统计学科所面临的挑战和机遇分别进行了详细阐述[6];李毅等对大数据背景下的抽样问题进行了理论分析,探讨了均匀抽样的基本策略[7]。这些研究有利于我们更好地认识和理解大数据统计,为大数据统计的具体应用提供了基本的理论指导。

  鉴于以上分析,我们试图把统计学的理论方法与新型数据分析平台Hadoop相结合,以企业实际应用为导向,以最基本的描述统计分析为例,探索基于Hadoop平台的架构设计及算法实现问题,为数据分析实务中海量数据的统计分析提供一个可供借鉴的思路和模式。

  二、Hadoop描述统计分析架构设计

  (一)平台及模式选择

  云计算为海量数据统计分析提供了一个很好的思路和平台。越来越多的企业及其他机构都在构建自己的云计算平台。据估计,到2016年超过一半的大公司数据会被存储在云端[8],可见,以云平台为基础构建海量数据的统计分析框架具有重要的现实意义。Hadoop因其开源、易用等特性成为了当前最受欢迎的云计算平台,是以Google的编程工具Map/Reduce为基础的开源、分布式、并行处理的平台架构。Hadoop提供了“Map”和“Reduce”两个抽象的程序接口,研究人员可以把需要解决的问题通过两个接口的转化来完成,其工作原理如图1所示。首先,把输入的数据文件分割成若干小的文件块,并存储在文件系统中。在任务提交之后,系统会自动生成多个Map的副本和Reduce任务,根据用户在Map和Reduce接口提供的代码要求来完成该项任务。Map阶段的任务数量与输入的数据块是一一对应的,这些任务首先在集群的各个节点中进行随机分配,经过Map并行计算之后的结果是一对键/值的组合,这些组合会被重新排序后执行Reduce任务,经过Reduce规约之后的值作为最终结果输出,在Map/Reduce的执行过程中均可以实现高度的容错能力和负载的均衡能力。

  

  Map/Reduce的运行结构是主/从式的,一个主节点通常对应多个从节点,任务的分配由主节点负责,并同时完成运行过程中资源的调用,任务的Map和Reduce环节的实际执行则由从节点完成。在Hadoop中,使用者通过Map/Reduce接口的算法设计来对数据的处理方法进行控制,处理过程中的并行执行、故障检测、数据的恢复与同步等问题完全由Hadoop自动完成。此外,Hadoop在数据的存储方面还有功能强大的HDFS文件系统作支撑,在此不做赘述。

  当前主流的数据分析应用模式主要有三种,第一种是数据分析软件即服务(Saas),该模式以网络服务的形式提供了功能丰富的数据挖掘算法模型或有效的知识发现工具库,最终用户可以直接通过浏览器进行访问和使用,可以充分利用云计算的存储和计算的可扩展性,对海量数据进行统计分析。第二种是数据分析平台即服务(Paas),该模式为使用者提供了自编数据分析程序或对现有程序进行改进的功能,用户只需考虑程序和算法的设计实现,无需考虑底层的平台架构以及并行计算等问题。第三种是数据分析基础架构即服务(Iaas),该模式提供了一组虚拟资源,使用者可以利用这些资源作为基础架构来实现数据挖掘的算法应用或作为构建数据分析系统的一个组成部分。

  描述统计分析作为数据分析的一个不可或缺的组成部分,在企业实际应用中处于最底层,为数据挖掘或企业业务分析提供基础运算指标,这就要求我们在选取平台和分析模式时要考虑其可扩展性、灵活性及可调用性,基于以上分析,我们设计海量数据的描述统计分析架构时采用Hadoop平台下的Saas实现模式。

  (二)架构设计原则

  1.可扩展性。描述统计分析是数据分析的一小部分,架构设计时要考虑到其功能的扩展,在此基础上可以进行更为丰富的功能实现,才能使其更具实用性;此外,统计数据可能为实时数据或离线数据,尤其是实时数据的更新可能较为频繁,但更新数据并无固定的数量规律,这与业务量有直接关系,描述统计并非数据分析的主要过程,因此对于更新数据的描述统计不能对核心分析业务产生影响,这就要求架构的设计要具有较强的可扩展性。

  2.相对独立性。从整个统计学角度看,描述统计和推断统计是两大分支,同时,描述统计同推断统计也有着密切的联系;从数据分析的业务内容看,描述统计并非核心业务,但又是不可或缺的组成部分,这就要求架构设计既要考虑与其他数据分析业务的关系,又要充分考虑到其相对独立性。

  3.使用灵活性。在实际应用中,描述统计分析的变量是千变万化的,数据的类型及分析的内容也是随业务需求不断变化的,这就要求框架设计要考虑到分析的灵活性,可以根据分析的具体需求进行灵活的配置。

  4.实现形式的多样性。框架中描述统计的实现方法多种多样,比如可以使用数据库操作的SQL语言实现,还可以通过不同的程序设计语言实现,因此,框架设计时要考虑到程序员软件实现的方便性,也为框架的可扩展性提供支撑,就必须设置多种接口以保证其实现形式的灵活性。

  (三)架构的总体设计与实现

  本架构在一定程度上克服了传统统计分析架构的缺点,适用于海量数据的统计分析,方便与有统计分析需求的业务系统对接。本架构由数据层、统计基础平台层、统计算法层、管理层和接口层五个层次构成,如图2所示。

  

  数据层主要负责数据的采集,主要来自于应用单位的业务系统,可以是实时数据也可以是离线数据,获取的数据主要存放于基础平台层的云存储模块中。基础平台层和统计算法层是本架构的核心内容,在基础平台层中,主要基于Hadoop平台进行设计,包括云存储和云计算两个模块,在搭建Hadoop平台的基础上,专门设计了两类数据表,一是业务数据表,主要用于存放原始的业务数据,用于数据的预处理;二是统计数据表,专门用于获取存放进行描述统计分析的数据,程序员设计程序时可以直接访问该表,并设计专门的机制对数据表进行更新,保证了数据的准确性以及离线数据分析的需求。在统计算法层中,主要是依据Hadoop的分布式计算原理,实现描述统计的相关算法,以便根据描述统计分析的需求进行调用,当然该层中还可以设计其他的统计分析和数据挖掘算法,增强平台的可扩展性。管理层主要实现模块的管理和逻辑链接,如用户的管理,算法的管理,数据的管理等。接口层主要用于外部的各种调用和链接,实现与各种应用系统的对接,也可以进行最终统计结果的可视化展示等。

  本架构的具体实现可以分四步,第一步,配置数据源的链接,比如获取业务系统数据库的读取权限。第二步,建立Hadoop为基础的海量数据存储和计算平台。首先,安装和配置Hadoop集群的基础平台;然后对Hbase等存储项目进行配置,建立对数据源的数据进行获取和存储的机制;最后对海量数据两个相关表进行设计和配置。第三步,描述统计相关算法的设计和实现。根据描述统计的各类方法的计算原理,设计出基于Hadoop平台的算法,并以计算机程序的形式实现。第四步,对各种模块的管理方式及对外接口的设计及相关配置。

  三、算法的研究与实现

  (一)设计思路分析

  描述统计分析主要包含集中趋势分析、离中趋势分析和分布趋势分析三部分,每一部分的分析关键在于各种指标的计算,其计算方法并不像数据挖掘算法那样复杂,一般一个或几个数学公式就可以完成,在小数据量的情况下,传统的描述统计算法均是串行执行的,但在处理海量数据过程中,会由于内存不足等问题而导致无法执行,本架构下的并行计算思想能较好地解决这一问题,但也并不是所有的描述统计指标计算过程均可以实现并行化,对于某些后续计算以前期计算为基础的相关计算步骤,则必须采用串行的处理方式,因此,在设计描述统计分析算法之前,先以能否并行化计算为标准进行分类。根据描述统计指标的特点,所有指标可以分为两类,一类是并行化计算指标,如极值、数值平均、方差、标准差等;另一类为串行化指标,如位置平均、偏态和峰度等,第二类要以第一类计算结果为前提进行计算。同时,各指标计算的核心内容基本上都是求和或连乘积的运算,因此,在设计描述统计算法时,可以分为并行和串行两个阶段来实现。在并行处理阶段,首先分配并行计算的任务,任务数的确定依据该计算所需的相关指标个数,假设计算某指标需要n个相关指标,那就为它分配n个计算任务,即n个“Map/Reduce Job”;然后执行Map运算,输出的键/值形式的运算结果中,对于同一个任务的结果其“键”值相同,方便后续的结果汇总;接着对每一个任务中要求计算的部分进行相应的求和或乘积运算,结果可能会分布在多个局部;最后执行Reduce运算,将各个分散的局部计算结果进行汇总,输出至HDFS文件系统中。在串行处理阶段,首先从HDFS中获取并行阶段的计算结果,依据具体指标算法的要求,对结果进行串行运算,计算出指标的最终结果并输出。

  (二)算法实现

  基于以上的设计思路,描述统计算法的实现可以由四个组成部分来完成,如图3所示。

  

  其中,Descriptive Statistics类是整个算法的核心主控类,它主要完成各计算参数的设置,计算步骤的启动和停止以及最终计算结果的展示,它可以接受来自于Interface类的参数设置,还可以对串行和并行两个阶段的处理过程进行启用和停止。Interface类提供算法的各种接口,包括参数设置要求、操作任务要求以及结果的返回要求。算法的主体执行部分分别由Parallel Job类和Seria Job类来完成,Parallel Job类负责完成并行计算阶段的主要任务,Seria Job类负责完成串行计算阶段的主要任务,两种类中均包含了三个主要功能函数Map/Join/Reduce,分别具备Map运算、累计运算、Reduce运算三个功能。三个功能函数中,Reduce是统计计算的主体部分,各类描述统计的最终计算方法都反映在了Reduce函数当中。

  计算机程序员在设计具体的实现程序时,对于Reduce部分的主体算法,可以首先对传统的串行方式下各类描述统计指标的算法进行分析,找出其中求和、乘积部分的算法进行并行化的程序设计,其余的仍然延续原有的串行步骤即可。

  四、实验测试及分析

  (一)平台架构及数据来源

  根据前面的海量数据描述统计分析架构设计,我们搭建了以Hadoop为基础平台的实验环境。Hadoop的安装模式采用集群式,由10台计算机(4核2.8GHZCPU,4G内存,500G硬盘)组成,其中一台作为主节点,9台作为从节点;操作系统均以Windows为基础,安装运行Cygwin程序构建虚拟的Linux系统,以有效支持Hadoop的运行;此外,还需要事先安装SSH(登录协议)、JAVA(软件)、Hadoop(软件)等应用软件;最后,对Hadoop平台及整个架构进行相关的配置和测试,测试成功之后,该架构即可作为相关的算法及应用程序的运行平台。下面,我们利用该平台对描述统计的分布式算法进行测试,并对其性能进行分析和比较。

  为了验证架构及算法的稳定性,本实验选取了2个数据集分别进行测试,数据集1来源于上海万达信息股份公司某云平台上三个地区的日客户访问量,数据量97M;数据集2来源于美国1994-1995年人口普查的数据库[9],我们只截取了其中的年龄、性别、收入三个维度的数据,数据总量155.8M。为了获得更大的实验数据量,在2个数据集的原数据基础上进行了复制。以这些数据为基础,分别以不同的数据量对传统的单机和分布式描述统计的部分算法进行了测试和比较,除了从运行时间上作比较之外,还计算了当前比较通行的衡量系统可扩展性和架构性能的指标EX(一般称为加速比)和衡量算法执行效率的指标EF,其计算公式如下:

  

  (二)算法理论模型及实现

  Reduce部分的主体算法是实现常用描述统计量的计算,其依据的部分主要理论模型有:

  1.简单算术平均数

  

  2.加权算术平均数

  

  3.平均差

  平均差也称平均绝对离差,它是各变量值与其算术平均数离差绝对值的平均数,用表示。对于未分组资料,采用简单平均法。其计算公式为:

  

  对于分组资料,应采用加权平均法,其计算公式为:

  

  4.方差和标准差

  总体的方差一般用符号“”表示,标准差一般用符号“σ”表示。

  对于未分组整理的原始资料,方差和标准差的计算公式分别为:

  

  5.偏态系数

  偏态系数用来度量变量分布的偏斜程度,其计算公式如下:

  

  其中,,表示三阶中心动差。

  6.峰度系数

  峰度系数用来衡量分布的集中程度或分布曲线的尖峭程度,计算公式如下:

  

  其中,,表示四阶中心动差。

  依据以上理论模型,结合Hadoop框架结构及前述算法的设计思路,以及本文第三部分设计的串行和并行方式下的计算方法编程,进行测试。

  (三)测试结果及分析

  本实验在统一数据量下进行了多次重复实验,最终计算结果为其平均值,如表1和图4所示。

  由表1可以看出,在数据量较小的情况下,单机串行下的程序执行时间比并行方式下的执行时间要短,串行计算优势较为明显;随着数据量的增长,程序串行执行的时间越来越长,且呈指数级增长,而并行执行的时间相对短很多,并行执行的优势完全显现。从并行系统的扩展性、性能和效率方面来看(如图4所示),随着数据量的增长,并行系统的性能有大幅提升,数据量越大,其性能提升越明显,说明系统可扩展性强;算法并行执行的效率也同样随着数据量的增加有着较为明显的提升。在本研究设计的架构和算法下对不同数据集的运算处理结果几乎无差别,说明架构和算法具有较高的稳定性。这些都充分表明本系统架构以及分布式并行算法在海量数据描述统计分析方面的强大优势。

  

  

  本研究从海量数据的描述统计分析视角所设计的平台架构及相关算法是可行的,其优点在于较强的可扩展性、使用的灵活性、相对独立性以及与各种实际业务的对接性。实验结果显示,在数据量较少的情况下,本架构下的描述统计并行算法的处理速度比传统的单机速度要慢,说明分布式并行的计算架构不适合于小规模数据集的处理,其固有的初始化以及协同连接的时间较长,导致了其在小规模数据处理上的优势得不到发挥。当数据规模扩大之后,其高性能、强扩展性以及高效率的特点得以逐步显现,数据量越大,其处理的时间相对于串行的执行时间越短,其加速比越高,并行的执行效率也越高,说明本架构非常适合于海量数据的统计分析。当然,出于时间和成本等因素的考虑,本研究并未在更大数据集下进行实验和分析;同时,在描述统计分析算法的实现过程中发现,并非所有的算法都适合于并行化处理,对于这两个问题的处理是我们将来进一步研究的方向。

作者介绍:宋廷山,男,山东烟台人,齐鲁师范学院经济与管理学院教授,硕士生导师,研究方向:计量经济与综合评价、大数据统计;郭思亮,男,山东东平人,齐鲁师范学院经济与管理学院硕士,讲师,研究方向:技术经济评价与决策、大数据统计(山东 济南 250200);韩伟,男,山东济南人,硕士,上海万达信息科技股份公司社保事业部高级工程师,研究方向:云计算应用、智慧城市建设(山东 济南 250000)。


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn