大数据下的数据分析平台架构

 
摘要:Admaster数据挖掘总监 随着互联网、移动互联网和物联网的发展,谁也没法否定,咱们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个很是重要且紧迫的需求。

 

随着互联网、移动互联网和物联网的发展,谁也没法否定,咱们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个很是重要且紧迫的需求。前端

Hadoop在可伸缩性、健壮性、计算性能和成本上具备无可替代的优点,事实上已成为当前互联网企业主流的大数据分析平台。本文主要介绍一种基于Hadoop平台的多维分析和数据挖掘平台架构。做为一家互联网数据分析公司,咱们在海量数据的分析领域那真是被“逼上梁山”。多年来在严苛的业务需求和数据压力下,咱们几乎尝试了全部可能的大数据分析方法,最终落地于Hadoop平台之上。算法

 

1.  大数据分析大分类数据库

 

Hadoop平台对业务的针对性较强,为了让你明确它是否符合你的业务,现粗略地从几个角度将大数据分析的业务需求分类,针对不一样的具体需求,应采用不一样的数据分析架构。缓存

  • 按照数据分析的实时性,分为实时数据分析和离线数据分析两种。

实时数据分析通常用于金融、移动和互联网B2C等产品,每每要求在数秒内返回上亿行数据的分析,从而达到不影响用户体验的目的。要知足这样的需求,能够采用精心设计的传统关系型数据库组成并行处理集群,或者采用一些内存计算平台,或者采用HDD的架构,这些无疑都须要比较高的软硬件成本。目前比较新的海量数据实时分析工具备EMC的Greenplum、SAP的HANA等。安全

对于大多数反馈时间要求不是那么严苛的应用,好比离线统计分析、机器学习、搜索引擎的反向索引计算、推荐引擎的计算等,应采用离线分析的方式,经过数据采集工具将日志数据导入专用的分析平台。但面对海量数据,传统的ETL工具每每完全失效,主要缘由是数据格式转换的开销太大,在性能上没法知足海量数据的采集需求。互联网企业的海量数据采集工具,有Facebook开源的Scribe、LinkedIn开源的Kafka、淘宝开源的Timetunnel、Hadoop的Chukwa等,都可以知足每秒数百MB的日志数据采集和传输需求,并将这些数据上载到Hadoop中央系统上。服务器

  • 按照大数据的数据量,分为内存级别、BI级别、海量级别三种。

这里的内存级别指的是数据量不超过集群的内存最大值。不要小看今天内存的容量,Facebook缓存在内存的Memcached中的数据高达320TB,而目前的PC服务器,内存也能够超过百GB。所以能够采用一些内存数据库,将热点数据常驻内存之中,从而取得很是快速的分析能力,很是适合实时分析业务。图1是一种实际可行的MongoDB分析架构。架构

图1 用于实时分析的MongoDB架构

MongoDB大集群目前存在一些稳定性问题,会发生周期性的写堵塞和主从同步失效,但仍不失为一种潜力十足的能够用于高速数据分析的NoSQL。运维

此外,目前大多数服务厂商都已经推出了带4GB以上SSD的解决方案,利用内存+SSD,也能够轻易达到内存分析的性能。随着SSD的发展,内存数据分析必然能获得更加普遍的机器学习

应用。分布式

BI级别指的是那些对于内存来讲太大的数据量,但通常能够将其放入传统的BI产品和专门设计的BI数据库之中进行分析。目前主流的BI产品都有支持TB级以上的数据分析方案。种类繁多,就不具体列举了。

海量级别指的是对于数据库和BI产品已经彻底失效或者成本太高的数据量。海量数据级别的优秀企业级产品也有不少,但基于软硬件的成本缘由,目前大多数互联网企业采用Hadoop的HDFS分布式文件系统来存储数据,并使用MapReduce进行分析。本文稍后将主要介绍Hadoop上基于MapReduce的一个多维数据分析平台。

  • 数据分析的算法复杂度

根据不一样的业务需求,数据分析的算法也差别巨大,而数据分析的算法复杂度和架构是紧密关联的。举个例子,Redis是一个性能很是高的内存Key-Value NoSQL,它支持List和Set、SortedSet等简单集合,若是你的数据分析需求简单地经过排序,链表就能够解决,同时总的数据量不大于内存(准确地说是内存加上虚拟内存再除以2),那么无疑使用Redis会达到很是惊人的分析性能。

还有不少易并行问题(Embarrassingly Parallel),计算能够分解成彻底独立的部分,或者很简单地就能改造出分布式算法,好比大规模脸部识别、图形渲染等,这样的问题天然是使用并行处理集群比较适合。

而大多数统计分析,机器学习问题能够用MapReduce算法改写。MapReduce目前最擅长的计算领域有流量统计、推荐引擎、趋势分析、用户行为分析、数据挖掘分类器、分布式索引等。

 

 

2.  面对大数据OLAP大一些问题

图2 RCFile的行列混合存

OLAP分析须要进行大量的数据分组和表间关联,而这些显然不是NoSQL和传统数据库的强项,每每必须使用特定的针对BI优化的数据库。好比绝大多数针对BI优化的数据库采用了列存储或混合存储、压缩、延迟加载、对存储数据块的预统计、分片索引等技术。

Hadoop平台上的OLAP分析,一样存在这个问题,Facebook针对Hive开发的RCFile数据格式,就是采用了上述的一些优化技术,从而达到了较好的数据分析性能。如图2所示。

然而,对于Hadoop平台来讲,单单经过使用Hive模仿出SQL,对于数据分析来讲远远不够,首先Hive虽然将HiveQL翻译MapReduce的时候进行了优化,但依然效率低下。多维分析时依然要作事实表和维度表的关联,维度一多性能必然大幅降低。其次,RCFile的行列混合存储模式,事实上限制死了数据格式,也就是说数据格式是针对特定分析预先设计好的,一旦分析的业务模型有所改动,海量数据转换格式的代价是极其巨大的。最后,HiveQL对OLAP业务分析人员依然是很是不友善的,维度和度量才是直接针对业务人员的分析语言。

并且目前OLAP存在的最大问题是:业务灵活多变,必然致使业务模型随之常常发生变化,而业务维度和度量一旦发生变化,技术人员须要把整个Cube(多维立方体)从新定义并从新生成,业务人员只能在此Cube上进行多维分析,这样就限制了业务人员快速改变问题分析的角度,从而使所谓的BI系统成为死板的平常报表系统。

使用Hadoop进行多维分析,首先能解决上述维度难以改变的问题,利用Hadoop中数据非结构化的特征,采集来的数据自己就是包含大量冗余信息的。同时也能够将大量冗余的维度信息整合到事实表中,这样能够在冗余维度下灵活地改变问题分析的角度。其次利用Hadoop MapReduce强大的并行化处理能力,不管OLAP分析中的维度增长多少,开销并不显著增加。换言之,Hadoop能够支持一个巨大无比的Cube,包含了无数你想到或者想不到的维度,并且每次多维分析,均可以支持成千上百个维度,并不会显著影响分析的性能。

图3 MDX→MapReduce简略示意图

所以,咱们的大数据分析架构在这个巨大Cube的支持下,直接把维度和度量的生成交给业务人员,由业务人员本身定义好维度和度量以后,将业务的维度和度量直接翻译成MapReduce运行,并最终生成报表。能够简单理解为用户快速自定义的“MDX”(多维表达式,或者多维立方体查询)语言→MapReduce的转换工具。同时OLAP分析和报表结果的展现,依然兼容传统的BI和报表产品。如图3所示。

图3能够看出,在年收入上,用户能够本身定义子维度。另外,用户也能够在列上自定义维度,好比将性别和学历合并为一个维度。因为Hadoop数据的非结构化特征,维度能够根据业务需求任意地划分和重组。

并且目前OLAP存在的最大问题是:业务灵活多变,必然致使业务模型随之常常发生变化,而业务维度和度量一旦发生变化,技术人员须要把整个Cube(多维立方体)从新定义并从新生成,业务人员只能在此Cube上进行多维分析,这样就限制了业务人员快速改变问题分析的角度,从而使所谓的BI系统成为死板的平常报表系统。

 

3.  一种Hadoop多维分析平台的架构

 

整个架构由四大部分组成:数据采集模块、数据冗余模块、维度定义模块、并行分  析模块。如图4所示

图4 Hadoop多维分析平台架构图

数据采集模块采用了Cloudera的Flume,将海量的小日志文件进行高速传输和合并,并可以确保数据的传输安全性。单个collector宕机以后,数据也不会丢失,并能将agent数据自动转移到其余的colllecter处理,不会影响整个采集系统的运行。如图5所示。

 

数据冗余模块不是必须的,但若是日志数据中没有足够的维度信息,或者须要比较频繁地增长维度,则须要定义数据冗余模块。经过冗余维度定义器定义须要冗余的维度信息和来源(数据库、文件、内存等),并指定扩展方式,将信息写入数据日志中。在海量数据下,数据冗余模块每每成为整个系统的瓶颈,建议使用一些比较快的内存NoSQL来冗余原始数据,并采用尽量多的节点进行并行冗余;或者也彻底能够在Hadoop中执行批量Map,进行数据格式的转化。

 

维度定义模块是面向业务用户的前端模块,用户经过可视化的定义器从数据日志中定义维度和度量,并能自动生成一种多维分析语言,同时可使用可视化的分析器经过GUI执行刚刚定义好的多维分析命令。

并行分析模块接受用户提交的多维分析命令,并将经过核心模块将该命令解析为Map-Reduce,提交给Hadoop集群以后,生成报表供报表中心展现。

核心模块是将多维分析语言转化为MapReduce的解析器,读取用户定义的维度和度量,将用户的多维分析命令翻译成MapReduce程序。核心模块的具体逻辑如图6所示。

图6中根据JobConf参数进行Map和Reduce类的拼装并不复杂,难点是不少实际问题很难经过一个MapReduce Job解决,必须经过多个MapReduce Job组成工做流(WorkFlow),这里是最须要根据业务进行定制的部分。图7是一个简单的MapReduce工做流的例子。

MapReduce的输出通常是统计分析的结果,数据量相较于输入的海量数据会小不少,这样就能够导入传统的数据报表产品中进行展示。

       

 

图5 采集模块                                                                                 图6 核心模块的逻辑

 

 

 

图7 MapReduce WorkFlow例子

结束语

固然,这样的多维分析架构也不是没有缺点。因为MapReduce自己就是以蛮力去扫描大部分数据进行计算,所以没法像传统BI产品同样对条件查询作优化,也没有缓存的概念。每每不少很小的查询须要“兴师动众”。尽管如此,开源的Hadoop仍是解决了不少人在大数据下的分析问题,真可谓是“功德无量”。

Hadoop集群软硬件的花费极低,每GB存储和计算的成本是其余企业级产品的百分之一甚至千分之一,性能却很是出色。咱们能够轻松地进行千亿乃至万亿数据级别的多维统计分析和机器学习。

6月29日的Hadoop Summit 2011上,Yahoo!剥离出一家专门负责Hadoop开发和运维的公司Hortonworks。Cloudera带来了大量的辅助工具,MapR带来了号称三倍于Hadoop MapReduce速度的并行计算平台。Hadoop必将很快迎来下一代产品,届时其必然拥有更强大的分析能力和更便捷的使用方式,从而真正轻松面对将来海量数据的挑战

相关文章
相关标签/搜索