Hadoop 诞生的历史

2022-03-11 12:09:56 浏览数 (1)

简单翻译一篇旧文:https://medium.com/@markobonaci/the-history-of-hadoop-68984a11704

Hadoop 这个名称来源于一种已经灭绝的猛犸象,即 Yellow Hadoop。

Lucene 的诞生

故事发生于 1997 年的某个下午,Doug Cutting 在电脑上敲下 Lucene 第一个版本的代码。

Apache Lucene 是一款搜索引擎,可以理解为百度。输入搜索词,Apache Lucene 会立马返回与这个搜索词相关的结果。参见:https://zh.wikipedia.org/wiki/Lucene

Cuting 只花了三个月的时间就基本上做出来可用的东西,但是让 Cuting 痛苦的是,几年过去了,都没有人用他做出来的东西。于是 2000 年,他将 Lucene 开源到 Source Forge上,并且使用的是 GPL 许可 (到后来更加宽松,变成了 LGPL 许可) 。这个时候,Cuting 发现很多人开始使用他开发的软件了,并且很多人向他反馈使用过程的问题和希望改进的地方。再过了一年,Lucene 迁移到了 Apache Software Foundation。

Apache Lucene 社区此时已经变成了一个蓬勃发展的地方,生机勃勃。Cutting 开始了新的工作,也就是给互联网上的网页增加索引,华盛顿大学的研究生 Mike Cafarella 也加入了他的工作。这项工作变成了新的 Lucene 子项目,称为Apache Nutch。

Nutch 是所谓的网络爬虫(机器人、机器人、蜘蛛),它是一个通过跟踪它们之间的 URL 来“爬取”互联网的程序,从一个页面到另一个页面。类似于当您在网上冲浪并在一段时间后注意到您的浏览器中有无数打开的选项卡时。您可以想象一个程序执行相同的操作,但会跟踪它遇到的每个页面的每个链接。当它获取一个页面时,Nutch 使用 Lucene 来索引页面的内容(使其“可搜索”)。

PageRank算法

一种重要的算法,用于根据网页的相对重要性对网页进行排名,称为 PageRank,以提出该算法的 Larry Page 命名(这个名称与网页这个原本的名称无关)。 这确实是一个简单而出色的算法,它基本上计算了网络上其他页面的链接指向一个页面的数量。计数最高的页面排名最高(显示在搜索结果的顶部)。当然,这不是确定页面重要性的唯一方法,但它肯定是最相关的方法。 在一年的时间里,谷歌通过大约 5 到 600 次调整来改进其排名算法。

Cuting 和 Cafarella 取得了出色的进展。他们将 Nutch 部署在单台机器上(单核处理器、1GB 内存、总计 1TB 的 8 个 RAID1 部署的硬盘驱动器,价值 3000 美元),实现了每秒约 100 页的建立索引的速度。

因为没有任何程序可以在一台机器上索引整个互联网的网页,所以他们将机器的数量增加到了四台。但是由于没有任何底层集群管理平台,他们必须在节点之间进行数据交换和手动分配空间(否则的话,磁盘就会填满),这对运维提出了极大的挑战,需要开发者不断的查看情况。增加一台机器都会导致复杂性呈指数级增长。他们迫切需要能够摆脱可伸缩性问题并让他们处理索引 互联网的核心问题的东西。

Cuting 和 Cafarella 一直在不断改进 Nutch 。但是作为整个系统的基础,他们需要一个满足以下要求的分布式存储层:

  • 没有预定义结构的无模式,即没有带有表和列(以及列类型和大小)的刚性模式
  • 持久的数据一旦写入就永远不会丢失
  • 能够在没有人工干预的情况下处理组件故障(例如 CPU、磁盘、内存、网络、电源、MB)
  • 自动重新平衡,以平衡整个集群的磁盘空间消耗

直到 2003 年 10 月,谷歌发表了那篇著名的 GFS 的论文。在论文中,Cuting 和 Cafarella 找到了解决上述四个问题的思路,并尝试使用 Java 实现论文里的想法。2004年,Nutch 分布式文件系统 (NDFS)完成了。

这个新系统的主要目的是抽象集群的存储,使其呈现为一个可靠的文件系统,从而向用户隐藏所有操作的复杂性。根据 GFS 论文,NDFS 的设计具有宽松的一致性,这使得它能够接受对同一文件的并发写入,而不会将所有内容锁定到事务中,从而产生显著的性能优势。新系统的另一个特性是,由于它能够在没有运维人员干预的情况下处理故障,可以由廉价的商品硬件组件构建而成。

Google 如何处理磁盘故障

当谷歌还处于早期阶段时,他们就面临着数据中心硬盘故障的问题。由于他们的核心业务是(现在仍然是)“数据”,他们很容易证明决定用更昂贵的顶级磁盘逐步替换出现故障的低成本磁盘是合理的。随着公司呈指数级增长,磁盘的总数也随之增加,很快,他们将硬盘驱动器数以百万计。当您单独考虑每个驱动器时,该决定产生了更长的磁盘寿命,但是在这么大的硬件池中,磁盘故障仍然是不可避免的,几乎按小时计算。这意味着他们仍然必须处理完全相同的问题,因此他们逐渐恢复到普通的商品硬盘驱动器,而是决定通过将组件故障视为常规事件而不是异常来解决问题。 他们必须在更高的层次上解决这个问题,设计一个能够自我修复的软件系统。 GFS 论文指出: 该系统由许多经常出现故障的廉价商品组件构建而成。它必须不断地自我监控,并定期检测、容忍组件故障并迅速从组件故障中恢复。

在 GFS 论文之后,Cutting 和 Cafarella 通过将每个文件分成 64MB 块并将每个块存储在 3 个不同的节点上(即他们建立了一个称为复制因子的系统属性并将其默认值设置为 3)解决了持久性和容错性问题。在组件发生故障的情况下,系统将自动注意到缺陷并使用来自其他两个健康副本的数据重新复制驻留在故障节点上的块。

因此,故障节点对 NDFS 的整体状态没有任何影响。这仅意味着存储在故障节点上的块在短时间内在系统中有两个副本,而不是 3 个。一旦系统使用其固有的冗余将数据重新分配到其他节点,这些块的复制状态就会恢复到 3。

现在,在处理完操作方面的问题后,Cutting 和 Cafarella 开始探索各种数据处理模型,试图找出哪种算法最适合 NDFS 的分布式特性。最重要的是新算法具有与 NDFS 相同的可扩展性特征。换句话说,为了利用 NDFS 的强大功能,算法必须能够实现尽可能高的并行度(能够同时有效地在多个节点上运行)。它必须是近线性可扩展的,例如在 8 台机器上可以并行运行的算法,必须比 4 台机器快 2 倍。

他们的想法是以某种方式将程序的一部分分派给集群中的所有节点,然后在节点并行完成工作后,收集所有这些工作单元并将它们合并为最终结果。

但是,谷歌想出了一个绝妙的主意。2004 年 12 月,他们发表了Jeffrey Dean 和 Sanjay Ghemawat 的论文,名为“MapReduce: Simplified Data Processing on Large Clusters”。

Jeffrey Dean

我们这个时代最多产的程序员之一,他在谷歌的工作为我们带来了 MapReduce、LevelDB,Protocol Buffers,BigTable(Apache HBase,Apache Accumulo,…)等。

MapReduce 论文解决的三个主要问题是:

  1. 并行化——如何并行计算
  2. 分布——如何分布数据
  3. 容错——如何处理程序故障

MapReduce 解决了上述三个问题,并有效地隐藏了处理大规模分布式系统的大部分复杂性,并仅仅只公开了一个仅包含两个函数的最小 API,也就是 map 和 reduce。

MapReduce 的灵感来自 Lisp,因此对于任何函数式编程语言爱好者来说,在经过简短的介绍性培训后开始编写 MapReduce 程序并不难。与以前的分布式编程模型相比,这证明了 API 的优雅程度。

MapReduce 的贡献的一个很核心的思路是不应该为了处理数据而被迫移动数据。相反,应该将程序发送到数据所在的位置。因为对于大数据而言,系统里存储的数据太多,所以不应该移动数据,而是移动计算。

当了解了 MapReduce 是如何工作的,大多数人的第一想法很可能是L:对于一个简单的任务来说,MapReduce 过于复杂了,比如计算某些文本中的词频或计算 TF-IDF(搜索引擎中的基本数据结构)。当然,你是对的,有更简单和更直观的方法(库)来解决这些问题,但请记住,MapReduce 旨在处理来自数十亿网站、服务器日志、点击流等的 TB 甚至 PB 的数据。

MapReduce 容错

master定期对每个worker进行 ping 操作。如果在一定时间内没有收到worker的响应,则master将worker标记为失败。任何正在进行的或由失败的工作人员完成的映射任务都将重置回其初始空闲状态,因此有资格在其他工作人员上进行调度。

2005 年 7 月,Cutting 称 MapReduce 已集成到 Nutch 中,作为其底层计算引擎。

2006 年 2 月,Cutting 从 Nutch 代码库中移除了 GDFS 和 MapReduce,并在 Lucene 项目下创建了一个新的孵化项目,他将其命名为 Hadoop。它由Hadoop Common(核心库)、HDFS 和 MapReduce 组成。

大约在同一时间,在雅虎,由 Eric Baldeschwieler 领导的一组工程师遇到了相当多的问题。这将是他们第四次重新实现 Yahoo! 的搜索后端系统,用 C 编写。尽管该系统正在发挥作用,但到那时,雅虎的数据科学家和研究人员已经看到了 GFS 和 MapReduce 为 Google 带来的好处,他们也想要同样的东西。“但那是用 Java 编写的”,工程师抗议道,“它怎么能比我们强大的 C 系统更好?”。随着来自老板和数据团队的压力越来越大,他们决定将这个全新的开源系统纳入考虑范围。那么“用这个原型替换我们的生产系统?”

Baldeschwieler 和他的团队仔细考虑了一段时间,并向他的团队宣布他们将使用 Hadoop。2006 年 1 月,雅虎聘请 Doug Cutting 帮助团队进行过渡。

六个月后,所有都意识到迁移到 Hadoop 是正确的决定。回想起来,我们甚至可以说,正是这一决定拯救了雅虎!几年前以令人眼花缭乱的速度和极简搜索体验出现的谷歌在搜索市场上占据主导地位,而与此同时,雅虎的主页看起来已经过时了。通过使用 Hadoop,数据科学和研究团队基本上可以自由发挥和探索整个互联网的数据。新想法如雨后春笋般涌现,在整个雅虎产生了改进和新产品,使整个公司重新焕发活力。

2007 年,其他大型网络规模公司已经看到了这个令人兴奋的新平台。也是在这个时候,Twitter、Facebook、LinkedIn 和许多其他公司开始认真地使用 Hadoop,并为 Hadoop 开源生态系统回馈工具和框架。2 月,雅虎报告说他们的生产 Hadoop 集群可以在 1000 个节点上运行。

2008 年对于 Hadoop 来说是重要的一年。年初,Hadoop 仍然是 Apache 软件基金会 (ASF) 的 Lucene 的一个子项目。在一月份,由于其专门的提交者和维护者社区,Hadoop 升入了最高级别。很快,许多新的辅助子项目开始出现,例如 HBase(HDFS 之上的数据库),之前托管在 SourceForge。ZooKeeper在 5 月被添加为 Hadoop 子项目。十月,雅虎在 MapReduce 之上贡献了他们更高级别的编程语言 Pig。Facebook 贡献了 Hive,它是基于 MapReduce 的 SQL 引擎。

2008 年,也是第一家专注于 Hadoop 的专业系统集成商诞生的一年。Cloudera 由 BerkeleyDB 的成员 Mike Olson、Google 的 Christophe Bisciglia、Facebook 的 Jeff Hamerbacher 和 Yahoo! 的 Amr Awadallah 创立。

到 2009 年 3 月,亚马逊已经开始提供 MapReduce 托管服务 Elastic MapReduce。八月,Cutting 离开了 雅虎 并前往 Cloudera 工作,担任首席架构师。

2010 年,对经验丰富的 Hadoop 工程师的需求已经很大。Baldeschwieler 仍然在雅虎,担任 Hadoop 软件工程副总裁,他注意到他们原来的 Hadoop 团队是如何被其他 Hadoop 参与者招揽的。雅虎无法像这些新创业公司那样为他们的明星员工提供福利,比如高薪、股权、奖金等。前进的道路看起来并不好。这对雅虎来说是一个严重的问题,经过一番考虑,他们决定支持 Baldeschwieler 创办一家新公司。在雅虎的财务支持下,Hortonworks 于 2011 年 6 月由 Baldeschwieler 和他的七名同事创立,他们都来自雅虎以及 Apache Hadoop PMC(项目管理委员会)成员。

2012 年,雅虎的 Hadoop 集群拥有 42000 个节点。Hadoop贡献者数量达到 1200 个人。

在 Hadoop 普及之前,即使存储大量结构化数据也是有问题的。大型数据孤岛的财务负担使组织丢弃了非必要信息,只保留最有价值的数据。Hadoop 彻底改变了数据存储,使保留所有数据成为可能,无论数据是否重要。

Hadoop 的第一个版本的最大缺点在于它只有一个组件 MapReduce,导致 MapReduce 的所要承担的功能太多了。它实际上负责 HDFS 存储以外的一切功能:分配集群资源和管理作业执行(系统),进行数据处理(引擎)和与客户端的接口(API)。而在 MapReduce 之上,没有其它框架分担这些功能。

MapReduce 主要是面向于批处理,导致了很难在它之上构建新的应用框架,比如机器学习和图形处理算法所需要的数据的不断迭代查询就无法应用 MapReduce 完成。

尽管 MapReduce 实现了可以处理大数据量的框架,但很明显,在 HDFS 之上需要一个更通用、更灵活的平台。

2012 年 8 月 3 日星期五 07:51:39 做出了最终决定,下一代数据处理框架 MapReduce v2,代号为 YARN(Yet Another Resource Negotiator),将从 MapReduce 代码库中提取出来并建立为一个单独的 Hadoop 子项目。到目前为止,还有很长的路要走,因为 YARN(当时称为 MR-297)的工作是由雅虎的 Arun Murthy 于 2006 年发起的,他后来成为 Hortonworks 的创始人之一。

为了泛化处理能力,将资源管理、工作流管理和容错组件从面向用户的框架 MapReduce 中移除并转移到 YARN 中,有效地将集群操作与数据管道解耦。

YARN 的出现标志着 Hadoop 的一个转折点。它使应用程序框架领域民主化,激发了整个生态系统的创新,并产生了许多新的、专门构建的框架。MapReduce 进行了更改(以完全向后兼容的方式),现在它作为许多不同的应用程序框架之一在 YARN 之上运行。

Apache Spark 给大数据领域带来了一场革命。通过包含流、机器学习和图形处理功能,Spark 使许多专门的数据处理平台过时。在单一平台中拥有统一的框架和编程模型显著降低了初始基础设施投资,使 Spark 变得如此易于使用。

到目前为止,类似的大数据用例需要多种产品,通常需要多种编程语言,因此涉及不同的开发团队、管理员、代码库、测试框架等。

0 人点赞