在互联网的技术浪潮冲击下,不少传统企业也纷纷涉水大数据技术。以笔者经历的两个项目为例,传统企业与互联网公司相比有两个特点:
和企业私有云的架构一样,对企业的大数据平台,我们很难直接去简单复制互联网的海量存储或计算平台技术,如Hadoop、HBase、Spark;因为这些技术搭建的只是一个数据的基础设施,要在传统企业实施“大数据平台”,我们的思路是,如何将传统的商业智能运行在“大数据平台”之上。
OLAP联机分析是从多维信息、针对特定问题的联机数据进行访问和分析的技术。从分析的角度出发,数据源需提供以下操作支持:
下面是一个数据表示例:
Date | Country | City | OS | Browser | Sale |
---|---|---|---|---|---|
2014-01-23 | China | Beijing | OSX | Chrome | 0.0 |
2014-01-24 | China | Shanghai | Windows | IE8 | 8.0 |
2014-01-24 | China | Beijing | OSX | Safari | 20.0 |
2014-01-25 | China | Chengdu | Linux | Chrome | 12.0 |
2014-01-26 | China | Beijing | Windows | Firefox | 30.0 |
5 visits4 days | 1 countryChina: 5 | 3 cities: Beijing: 3 Shanghi: 1 Chengdu: 1 | 3 OS-es Windows:2 OSX:2 Linux:1 | 3 browsers Chrome:2 Firefox:1 IE8:1 Safari:1 | 70.04 sales |
SELECT COUNT(visits), SUM(sales) GROUP BY country
Country | Visits | Sales |
---|---|---|
China | 5 | $70 |
SELECT COUNT(visits), SUM(sales) GROUP BY country HAVING browser = "Chrome"
Country | Visits | Sales |
---|---|---|
China | 2 | $12 |
SELECT SUM(sales), COUNT(visits) GROUP BY browser ORDER BY sales
Browser | Sales | Visits |
---|---|---|
Firefox | $30 | 1 |
Safari | $20 | 1 |
Chrome | $12 | 2 |
IE8 | $8 | 1 |
通常OLAP的多维数据源由数据方(Cube)提供,关系型数据库或数据仓库都能提供数据方的设计,相对于数据库,数据仓库是昂贵的软硬件解决方案,而互联网普遍采用基于Hadoop技术构建的海量数据处理平台,在这里是否可以作为数据仓库的替代品呢?其核心技术还是,如何基于Hadoop来构建数据方。
对数据库来说,数据聚合通常是实时的。实时聚合的好处是灵活,可以对任意列进行查询,缺点是CPU、I/O开销较大,数据量大时查询缓慢,吞吐量低;而对Hadoop这样的非实时计算、大量数据处理的平台来说,很适合对数据进行预聚合处理,预聚合的优点是查询快速高效,但缺点是无法灵活查询,比如未进行聚合处理的数据。
在基于Hadoop进行预聚合处理上,Adobe提供了一些经验:
这个步骤的目的是理解数据并且构建出领域模型,包括:
下面是Adobe SiteCatalyst的设计参考,源数据是一条日志,使用reports.json来描述整个设计:
对历史数据,采用大量数据批处理来提高吞吐量,对新增的增量数据,尽量达到低延时查询。一些优化策略包括:
对输入进行条件过滤:
提升Map的任务数:
数据处理的过程包括读取源数据、预聚合并且生成可供查询的数据表,对OLAP而言,需要对数据进行以下处理:
以下是Adobe在线数据处理设计和SQL查询的映射:
在reports.json中定义了触发各个处理的类:
整个处理过程如下: