一、时代背景
2000 年左右的时候,中国互联网尚处在门户时代,世界互联网已经开始腾飞。
一方面,以 Google 为代表的主流互联网公司开始面临数据爆发的场景;另一方面,当时的互联网公司普遍选择使用配置低下的廉价服务器。 所以急剧增加的数据量与低下的计算存储能力之间的矛盾成为了当时的主流互联网公司面临的主要矛盾之一。
超级计算机虽然能够解决一部分大数据计算的问题,但是超级计算机价格高昂,主要在实验室和科研机构中采用。工业界尚没有一个统一的且得到广泛商用的分布式计算框架,虽然当时已经也研究出来了一些分布式的计算框架,但是大部分都还停留在实验室或者科研机构里面。
没有得到推广的原因其实也比较简单,就是那些分布式框架设计的实在是太复杂了,根本就没有办法被很好的理解,更不用说写代码去做实现和做分布式计算了。
二、Hadoop 的诞生
在这个时代背景下,我们来看一下 Hadoop 是如何诞生的。
第一个时间点是 2003 年的 11 月份,Google 发表了第一篇论文《The Google File System》,后面我们简称 GFS。主要内容是如何解决分布式存储的问题。
第二个时间节点是 2004 年 12 月份,Google 发表了第二篇论文《MapReduce:Simplified Data Processing on Large Clusters》。讨论的是在大规模集群下一种简化了的数据处理模型,后面我们还会具体分析。
顺便提一下,在 2006 年的时候,Google 发表了第三篇论文,叫《Bigtable: A Distributed Storage System for Structured Data》。
这三篇论文的发表基本上就标志着整个大数据时代的来临,我们一般也把它们称为是大数据领域的三驾马车。第一篇论文解决的是分布式存储的问题;第二篇论文解决的是分布式计算的问题;第三篇论文解决的是大规模结构化数据的存储和查询问题。
Google 在发表这些论文之前内部已经构建出了相应的系统,而且在公司内部得到了广泛的应用。同时 Google 是一家做搜索引擎的公司,核心问题是解决互联网的爬取和索引构建,当互联网上的数据特别大时,如何对这么多的数据快速的构建索引,在 MapReduce 诞生之前 Google 内部各个部门的具体实现也都不一致,但是碰到的问题和大概的解决思路是类似的,比如如何进行多台机器的任务划分、如何进行容错,但是大家基本都在做一些重复造轮子的工作,而且实现和维护成本都很高。这时 Google 内部的大神 Jeff Dean 就基于大家的实践抽象出了 MapReduce 的架构。
但是,Google 的这三篇论文和 Hadoop 有什么关系呢?这时就要提到第二个人 ——Doug Cutting,Doug Cutting 是一个开源系统爱好者,和 Google 差不多同期也实现了一个开源版本的搜索引擎。
但是,他的引擎始终无法做到 Google 这么快的搜索和索引构建能力,当 Google 发表了这两篇论文之后,Doug Cutting 受到了启发,就实现了开源版本的 GFS 和 MapReduce。一开始做这两个系统也主要是为了解决搜索引擎当中碰到的数据统计问题,但是人们很快发现,MapReduce 这个框架其实是很灵活而且非常通用的。
于是到 2006 年 2 月份,Hadoop 项目就正式成立了,它就包含了两个部分:一部分叫做 MapReduce,解决分布式计算的问题;另外一个部分叫做 HDFS,解决分布式存储的问题。
另外也提一下 Hadoop 这个名字是怎么来的,Doug Cutting 曾经解释说这个名字其实是他儿子的一个毛绒玩具大象的名字,包括现在大家看到的 Hadoop 的黄色大象 Logo,其实也是来自于这个玩具大象的启发。不过现在我们说玩转大数据的时候,常常说让大象能跳舞,也是在形象的强调 Hadoop 给大数据带来的灵活计算的能力。
三、HDFS 的特点
Hadoop 包含了 HDFS 和 MapReduce 两部分,我们先来具体看一下 HDFS 是如何设计的,它有哪些特点呢?
第一个特点:错误检测和自动恢复机制是 HDFS 最核心的架构目标。为什么错误恢复会是当时的核心目标呢,这和当时的服务器配置也有很大关系,