随着互联网、移动互联网、物联网的发展,谁也不能否认,我们确实迎来了一个海量数据的时代。数据研究公司IDC预测,2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析成为非常重要和迫切的需求。作为一家互联网数据分析公司,我们在海量数据分析领域真的是被“逼上了顶峰”。多年来,在严苛的业务需求和数据压力下,我们尝试了几乎所有可能的大数据分析方法,最终登陆了Hadoop平台。Hadoop在可扩展性、健壮性、计算性能和成本方面具有不可替代的优势。事实上,它已经成为互联网公司主流的大数据分析平台。本文主要介绍了一种基于Hadoop平台的多维分析与数据挖掘平台架构。大数据分析分类Hadoop平台对业务针对性强。为了让您知道是否符合您的业务,我们从几个角度对大数据分析的业务需求进行粗略的分类。针对不同的具体需求,应该使用不同的数据分析架构。根据数据分析的实时性,可分为实时数据分析和离线数据分析。实时数据分析一般应用在金融、移动、互联网B2C产品中,往往需要分析上亿行数据秒级返回,以免影响用户体验。为了满足这样的需求,可以使用设计良好的传统关系型数据库来组成并行处理集群,或者一些内存计算平台,或者HDD架构,这无疑需要较高的硬件和软件成本。目前比较新的海量数据实时分析工具有EMC的Greenplum和SAP的HANA。对于大多数对反馈时间要求不太严格的应用,如离线统计分析、机器学习、搜索引擎的反向索引计算、推荐引擎的计算等,应采用离线分析,通过数据采集工具导入日志数据专用分析平台.然而,面对海量数据,传统的ETL工具往往完全失效。主要原因是数据格式转换开销过大,性能无法满足海量数据的采集需求。互联网公司的海量数据采集工具有Facebook开源的Scribe、LinkedIn开源的Kafka、淘宝开源的Timetunnel、Hadoop的Chukwa等,都可以满足数百MB/s的日志数据采集和传输需求。第二,将这些数据上传到Hadoop中央系统。根据大数据的数据量,分为内存级、BI级、海量级三种。这里的内存级别是指数据量不超过集群内存的最大值。不要低估当今记忆的容量。Facebook在Memcached中缓存的数据高达320TB,目前的PC服务器也能有100GB以上的内存。因此,可以采用一些内存数据库,将热点数据存储在内存中,从而获得非常快速的分析能力,非常适合实时分析业务。图1是一个实用的MongoDB分析架构。图1.用于实时分析的MongoDB架构目前,大型MongoDB集群存在一些稳定性问题,例如周期性写入拥塞和主从同步失败。然而,它仍然是一种潜在的NoSQL,可用于高速数据分析。此外,大多数服务供应商都推出了4GB以上SSD的解决方案。使用内存+SSD可以轻松实现内存分析的性能。随着SSD的发展,内存数据分析必将得到更广泛的应用。BI级是指数据量大到无法记忆,但一般可以放入传统BI产品和专门设计的BI数据库中进行分析。目前主流的BI产品都支持TB级以上的数据分析解决方案。种类很多,就不一一列举了。海量级别是指已经完全失效或者对于数据库和BI产品来说过于昂贵的数据量。在海量数据层面也有很多优秀的企业级产品,但是由于硬件和软件的成本问题,目前大部分互联网公司都是使用Hadoop的HDFS分布式文件系统来存储数据,使用MapReduce进行分析。本文后面主要介绍一个基于MapReduceonHadoop的多维数据分析平台。数据分析的算法复杂度根据不同的业务需求,数据分析的算法也千差万别,而数据分析的算法复杂度与架构密切相关。例如,Redis是一种非常高性能的内存中Key-ValueNoSQL。它支持简单的集合,如List、Set和SortedSet。大于内存(准确的说是内存加虚拟内存除以2),那么毫无疑问使用Redis会达到惊人的分析性能。还有很多EmbarrassinglyParallel问题。计算可以被分解成完全独立的部分,或者分布式算法可以很容易的进行改造,比如大规模的人脸识别、图形渲染等,这样的问题自然可以使用并行来解决。处理集群更合适。虽然大多数统计分析、机器学习问题都可以使用MapReduce算法重写。目前,MapReduce最擅长的计算领域包括流量统计、推荐引擎、趋势分析、用户行为分析、数据挖掘分类器、分布式索引等。#p#大数据OLAP分析面临的一些问题OLAP分析需要大量的数据分组和表间关联,而这些显然不是NoSQL和传统数据库的强项,往往必须使用针对BI优化的特定数据库。例如,大多数为BI优化的数据库都使用列存储或混合存储、压缩、延迟加载、存储数据块的预统计和分片索引等技术。Hadoop平台上的OLAP分析也存在这个问题。Facebook为Hive开发的RCFile数据格式使用了上面的一些优化技术,以获得更好的数据分析性能。如图2所示。图2RCFile的行列混合存储但是,对于Hadoop平台来说,单纯的使用Hive来模仿SQL是不足以进行数据分析的。首先,虽然Hive优化了HiveQL到MapReduce的翻译,但仍然效率低下。在多维分析中,仍然需要将事实表与维表关联起来,多维的性能必然会大幅下降。其次,RCFile的行列混合存储方式实际上是对数据格式进行了限制,也就是说数据格式是预先设计好的,是为具体分析而设计的。一旦被分析的业务模式发生变化,海量数据转换格式的成本是极其巨大的。最后,HiveQL对OLAP业务分析师还是很不友好的。维度和指标是直接针对业务人员的分析语言。而且,OLAP目前存在的最大问题是:业务灵活多变,必然导致业务模型频繁变化,一旦业务维度和度量发生变化,技术人员需要重新定义和重新生成整个Cube(多-dimensionalcube),业务人员只能对这个Cube进行多维分析,限制了业务人员快速变换问题分析的角度,从而使所谓的BI系统成为一个死板的日报系统。利用Hadoop进行多维分析首先可以解决上述维度难以变化的问题。利用Hadoop中数据的非结构化特点,采集到的数据本身就包含了大量的冗余信息。同时,可以将大量冗余的维度信息整合到事实表中,使得在冗余维度下可以灵活地转换问题分析的视角。其次,利用HadoopMapReduce强大的并行处理能力,无论OLAP分析的维数增加多少,开销都不会明显增加。也就是说,Hadoop可以支持一个巨大的Cube,其中包含无数你能想到或想不到的维度,每次多维分析可以支持数百个维度,而不会显着影响分析的性能。所以我们的大数据分析架构在这个巨大的立方体的支撑下,直接把维度和指标的生成交给了业务人员。业务人员定义维度和指标后,将业务维度和指标直接转化为MapReduce运行,最终生成报告。可以简单理解为用户自定义的“MDX”(多维表达式,或多维立方体查询)语言→MapReduce的转换工具。同时,OLAP分析和报表结果的展示仍然兼容传统的BI和报表产品。如图3所示。图3MDX→MapReduce示意图如图3所示,在年收入方面,用户可以定义自己的子维度。此外,用户还可以在栏目上自定义维度,比如将性别和学历合并为一个维度。由于Hadoop数据的非结构化特性,维度可以根据业务需要任意划分和重组。Hadoop多维分析平台的架构由四部分组成:数据采集模块、数据冗余模块、维度定义模块和并行分析模块。如图4所示。图4Hadoop多维分析平台架构图数据采集模块采用Cloudera的Flume对海量小日志文件进行高速传输合并,并能保证数据传输的安全性。单个采集器宕机后,数据不会丢失,代理数据可以自动转移到其他采集器处理,不影响整个采集系统的运行。如图5所示。图5采集模块的数据冗余模块不是必须的,但是如果日志数据中没有足够的维度信息,或者需要经常增加维度,那么就需要数据冗余模块定义。通过冗余维度定义器定义冗余维度信息和来源(数据库、文件、内存等),并指定扩展方式将信息写入数据日志。在海量数据下,数据冗余模块往往成为整个系统的瓶颈。推荐使用一些内存比较快的NoSQL对原始数据进行冗余,尽可能多的使用节点进行并行冗余;或者也可以在HadoopBatchMap中执行,转换数据格式。维度定义模块是面向业务用户的前端模块。用户通过可视化定义器从数据日志中定义维度和度量,并能自动生成多维分析语言。同时,他们可以使用可视化分析器通过GUI执行新定义的内容。多维分析命令。并行分析模块接受用户提交的多维分析命令,通过核心模块将命令解析成Map-Reduce,提交给Hadoop集群,生成报表供报表中心展示。核心模块是解析器,将多维分析语言转换成MapReduce,读取用户定义的维度和指标,将用户的多维分析命令翻译成MapReduce程序。核心模块的具体逻辑如图6所示。图6核心模块逻辑在图6中,根据JobConf参数组装Map和Reduce类并不复杂。难点在于很多实际问题很难通过一个MapReduceJob来解决,必须用多个MapReduceJob组成一个工作流(WorkFlow)。这里是最需要根据业务定制的部分。图7是一个简单的MapReduce工作流示例。图7MapReduceWorkFlow示例MapReduce的输出一般是统计分析的结果,数据量远小于海量的输入数据,因此可以导入到传统的数据报表产品中进行展示。结论当然,这样的多维分析架构并非没有缺点。由于MapReduce本身采用暴力扫描的方式对大部分数据进行计算,无法像传统BI产品那样优化条件查询,也没有缓存的概念。往往很多小查询都需要“调师调动人”。尽管如此,开源的Hadoop还是解决了很多人在大数据下的分析问题,可谓“功不可没”。Hadoop集群软硬件成本极低,每GB存储和计算成本是其他企业级产品的百分之一甚至千分之一,但性能却非常出色。我们可以轻松地在千亿甚至万亿级别的数据上进行多维度的统计分析和机器学习。在6月29日的Hadoop峰会2011上,Yahoo!剥离了Hortonworks,一家负责Hadoop开发和运维的公司。Cloudera带来了大量的辅助工具,MapR带来了据说比HadoopMapReduce快三倍的并行计算平台。Hadoop即将迎来下一代产品,其分析能力将更强,使用方式将更加便捷,从而真正轻松应对未来海量数据的挑战。【编者推荐】数据挖掘中容易犯的几大错误整理索引碎片提高SQLServer速度大数据平台:挖掘数据的价值大数据技术概述
