- 石器时代
随着互联网的蓬勃发展,数据量在呈指数型增长。早在2003年之前,各大厂商都已经严重面临大规模数据的处理难题,比如Google就已经面对大于600亿的搜索量。如何从海量的原始数据中挖掘出有效的信息,如何保证数据挖掘程序的容错性一直困扰着Google的工程师们。
这个时候大规模数据处理技术还处于仿徨阶段,每个公司甚至个人都有一套独立的数据处理工具,层次不齐,纷繁复杂,但是还没有提炼抽象出一个系统的办法。
- 青铜时代
直到2003年,MapReduce问世,开启了数据处理的青铜时代(真正意义上的第一代大数据计算引擎)。Jeff Dean和Sanjay Ghemawat发表革命性的论文MapReduce:Simplified Data Processing on Large Clusters,从纷繁复杂的业务逻辑中抽象出Map和Reduce这样足够通用的编程模型。利用这个简单的编程模型编写分布式程序,跑在那些廉价的机器上。在随后的十年中,MapReduce在Google内部广泛使用,不断优化,投入了大量的人力物力将这套系统推向了前所未有的高度。
- 铁器时代
MapReduce虽好,但是对于上层应用来说,在一些复杂的应用场景下,编写MapReduce程序会变得越来越复杂,工程师们想法设法的拆分算法,实现多个Job的串联,开发维护工作量大。这种弊端催生了DAG(有向无环图)框架的诞生,支持DAG的框架被划分为第二代计算引擎,如Tez以及Ooize,此时计算引擎处理的大多数都还是批处理任务。
- 蒸汽机时代
时代的步伐并不会满足于计算引擎的一点点进步,计算时间太长的问题一直被诟病。直到基于分布式内存的Spark作为第三代计算引擎出现,才逐渐取代了MapReduce的龙头地位(2014年之后,国际各大互联网厂商几乎都没有人再直接写MapReduce程序了),并且逐步向流处理开始发力。第三代计算引擎的出现,促进了上层应用快速发展,如各种迭代计算以及流计算和SQL等。
- 电气时代
随着时代的前行,上层应用越来越注重实时流处理技术,以及批流一体化的计算引擎框架。这时批流一体化的新贵Flink应运而生;同时Spark也在不断弥补自己在实时流处理上的短板,增加新特性;而Google也在不断发力,推出Apache Beam。师夷长技以制夷,各大计算引擎相互参考,不断优化着自己的短板,推出新的特性,争当第四代计算引擎扛旗手。
如果重登历史的巨轮,一路走马观花般地来看看大数据处理计算引擎的每一个转折点,我们不难发现每一次的升级都是在业务和技术开发的双重推动下稳步前行,每一次升级都是对数据模型抽象能力的提升。