在谷歌崛起之前的很长一段时间里,雅虎一直是互联网行业的“老大哥”。虽然随着互联网行业的发展,谷歌的市场影响力越来越强,雅虎的日子越来越不好过,但雅虎仍是“瘦死的骆驼比马大”。谷歌发表了“三驾马车”的论文,开启了大数据时代,雅虎作为当时互联网行业的老大,也希望能用上类似“三驾马车”的系统。

鉴于和谷歌在广告市场上的直接竞争关系,雅虎不可能从谷歌那里获得基础架构并用在自己的业务上,而且谷歌也没有要开放自身架构的意思,因此雅虎决定自己开发一套。说到这里,就不得不说说道格 · 卡丁(Doug Cutting)了。

当时,卡丁在做一个叫作 Nutch 的网页爬虫项目,但是这个项目开发得并不顺利,主要问题是当爬虫达到一定规模后无法稳定地运行在更多的机器上。

这时,谷歌文件系统和 MapReduce 的论文相继发表了,卡丁从这些论文里面受到了启发。他认为谷歌文件系统和 MapReduce 可以解决 Nutch 项目遇到的问题,于是就在 Nutch 上实施了谷歌文件系统和 MapReduce 工具,果然重新实现后的 Nutch 很容易稳定运行在更多的机器上了。

而当时雅虎正在思考如何构建自己的基础架构,于是这个项目自然而然地进入了雅虎的视野。

2006 年,雅虎聘用了卡丁,随后专门组建了 Hadoop 开发团队,并投入了大量的技术人员和机器资源来支持项目的开发、调试和落地。雅虎对 Hadoop 项目注入的人力和物力资源支持,奠定了 Hadoop 项目从简陋向完善发展的基础。

Hadoop 团队的最高领导者是位副总裁,雅虎很多核心业务部门的最高领导的等级也不过如此,借此不难看出雅虎当时对 Hadoop 开发部门的重视程度。

不但如此,为了保证 Hadoop 项目能够顺利落地,雅虎把内部的很多数据处理业务迁移到了尚不成熟的 Hadoop 项目中。这种用实际业务促进项目成长的“小白鼠”精神,非常有效地帮助了 Hadoop 向成熟产品的转变。

接下来,我来讲讲 Hadoop 的具体发展进程。

2006 年 2 月,卡丁决定从 Nutch 项目里将对谷歌文件系统和 MapReduce 的实现分离出来,并决定用他儿子的玩具命名这个项目:Hadoop。两个月后,Hadoop 实现了第一个具有里程碑意义的计算:用 48 小时在 188 台机器上完成了对 1.8 TB 数据的排序。

这里所说的里程碑,并不是说这件事情有多伟大,而仅仅是证明了基于谷歌文件系统和 MapReduce 实现的架构,是一个相对通用的系统。这个系统除了可以用在 Nutch 上做爬虫应用外,还可以实现数据排序。

而这个数据排序的效率到底是高是低呢?现在我用 C++ 随便写一个程序,运行在一台普通电脑上为 1.8 TB 的数据进行排序,而且这个排序绝对花不了 48 小时的时间。但是,当时 Hadoop 却需要用 188 台机器花费 48 小时来完成这个排序。

这里需要说明的是,对分布式系统来说,单机效率固然重要,但能够稳定运行在多少台机器上同样重要,而且实现起来更加困难。

到 2006 年 5 月,雅虎的 Hadoop 团队已经有了一个 300 台机器的集群。同年 10 月,这个集群达到了 600 台机器的规模,而这基本上接近了当时 Hadoop 可以实现的极限。整个 Hadoop 团队又花了差不多大半年的时间,才在 2007 年上半年实现了 Hadoop 在 1000 台机器上的稳定运行。这样的集群规模,终于可以让 Hadoop 存储和处理互联网级别的数据了。

2008 年,Hadoop 可以稳定运行了。正是这一年,雅虎决定把自己搜索引擎的倒排索引的构建工作迁移到 Hadoop 上。因为伴随着互联网内容的增加,在手工实现的系统上构建的倒排索引,再也无法处理越来越多的内容。

谷歌最初发明 MapReduce 的目的就是为自己的搜索引擎构建倒排索引,所以 Hadoop 一旦足够稳定,雅虎必然会将自己的倒排索引构建工作迁移到 Hadoop 上。这个处理雅虎倒排索引构建工作的 Hadoop 集群,规模大约在 2000 到 3000 台机器之间,这也是当时最大的 Hadoop 集群。

2009 年,雅虎的很多业务都开始迁移到 Hadoop 上。为此,雅虎部署了很多个 Hadoop 集群,总机器规模超过两万台。

可以说,2006 年到 2009 年是 Hadoop 项目发展最为关键的三年。在这三年的时间里,雅虎不但从人力上和机器上给予了 Hadoop 大量的支持,更重要的是逐渐把自己内部的很多平台都过渡到 Hadoop 上。 如果没有雅虎的这些大力支持,也就不会有 Hadoop 在 2009 年的成熟程度。

如果说,雅虎为了发展自己的业务在 Hadoop 项目上投入了如此多的资源,是情理之中的事情,那么雅虎毫无保留地把 Hadoop 相关的源代码全部开源出来,就必须说是扮演了一个“活雷锋”的角色了。因为雅虎无私地开源了 Hadoop 系统,其他比如 LinkedIn 和 Facebook 等互联网公司才有可能加盟进来。

除了 Hadoop 的核心系统以外,雅虎对 Hadoop 生态圈还有两个比较大的贡献:ZooKeeper 项目和 Pig 项目,它们对 Hadoop 生态圈的发展产生了非常重要的影响。

ZooKeeper 是一个分布式系统的协调服务,主要用来解决分布式应用中经常遇到的一些数据管理问题。它是很多 Hadoop 生态圈的其他项目(比如,谷歌 BigTable 的大数据开源版 HBase)里面分布式协调部分的代码的基础。

Pig 是第一个基于 Hadoop 的高级语言,它的脚本被编译成一系列的 MapReduce 任务来执行。Pig 第一次让用户摆脱了烦琐的 MapReduce,可以用高级语言去写任务,这就像是计算机从早期的汇编语言阶段过渡到了高级语言阶段。

现在十年多的时间过去了,Zookeeper 作为一个基础组件,不断地演进,至今依然是 Hadoop 生态圈里最重要的一个基础组件。Pig 则渐渐地被后来居上的高级语言,比如 Spark 和 Flink,取代了,就像是 COBOL 被 C、C++、Java 等更高级的语言取代一样。

总结来说,如果当初没有雅虎对 Hadoop 项目的鼎力支持以及无私开源,我们很难想象会有今天如此繁荣昌盛的 Hadoop 生态圈。尽管雅虎作为一个实体公司已经不存在了,尽管我们也不知道当初雅虎为什么要如此无私地开源 Hadoop,但我们都应该感谢它对 Hadoop 多年如一日的无私奉献。