对实时分析与离线分析的思考
数据的价值是有时效性的,越早分析越能得到更快的问题反馈或响应。Hadoop的设计初衷是存储与分析离线大数据,我认为它的缺点就是不能及时地利用数据中所蕴含的深层价值。
在做深入分析之前,我想从门外汉的角度来说说我自己理解的实时分析是什么样子的。它的目标很明确:尽快地从数据中挖掘出有用的内容来。这牵扯到把计算移动到哪个地方去的问题。数据源本地?数据传输流中?一个集中存储的地方?对数据的分析越靠近数据源就越有效。但一般的数据源都是业务系统,不能允许数据分析占用它的硬件资源。所以我想当前的一些实时分析系统也是取向于后两种场景。
实时分析过后的数据该怎么办,是抛弃掉还是需要继续存储着呢?我认为对数据的分析就如同对石油的提炼一样。高中时看到介绍提炼石油的过程,先分离出航空煤油,再经过步骤分离出普通汽油、煤油等,经过一道道筛选后最后还有渣料能用。数据分析的过程亦如此。要考虑实时,就不能对数据做复杂的逻辑分析,而这正是离线系统的优势。所以,对分析后的数据该怎样处理还是得看数据有没有必要再做深度处理。Facebook就有利用HDFS做中间存储,对数据既做实时分析,又做离线分析的实现。
离线分析现在遇到的一些问题,实时分析也会遇到。系统应该需要很容易地水平扩展,因为实时的数据量挺难预估,实时分析系统就应该可以自动调整容量。MapReduce的优点在于对源数据做切分,然后并行地执行。但怎样利用并行化来提高实时分析的效率也是需要考虑的。当前MapReduce在计算中依赖磁盘来做临时存储,我对这种做法不太认同,还是希望计算中只利用内存与网络,不要让磁盘存取成为影响计算能力的隐患。好像有个系统叫MapReduce Online正在尝试解决这个问题,之后会关注下它的进展。
他山之石,可以攻玉。因为初次接触实时分析,有必要分析下现有实时分析系统的设计架构。Google了一把,当前的实时分析系统有:Yadoo!的S4、Twitter的Storm和IBM的StreamBase等。这段时间会研究它们的需求与设计,以期更好地理解实时分析会遇到哪些问题。
OK,路还很长,得多多努力了
********************************************
这里是我写这些想法之前临时写的提纲:
离线分析的优点是:
可以寻找恰当地分割方式,对任务做并行分析
批量存取数据
可以对数据做复杂的业务处理
离线分析的缺点是:
数据中所蕴含的深层价值得不到及时的利用
实时分析的缺点:
数据量太大,很难有复杂的业务处理
对实时分析提出的建议:
尽量使用内存而不是磁盘
考虑并行化,减少数据压力
架构可水平扩展
********************************************