Hadoop
定义
Hadoop是Apache软件基金会维护的一套开源软件框架,面向数据密集型分布式应用,采用Apache 2.0许可协议发布[3]。它基于MapReduce计算模型,为大数据提供分布式存储与处理的通用软件基础,使由多台计算机组成的网络能够协同解决数据与计算密集型问题[3]。
该框架以Java语言开发,具有较好的跨平台特性,可部署在廉价计算机集群上,被业界视为大数据领域的标准开源软件之一[2]。狭义上Hadoop指这一套开源软件本身,广义上则指围绕它形成、包含众多子项目的大数据生态[4]。
原理
Hadoop的基本模块包括Hadoop Common、HDFS、Hadoop YARN与Hadoop MapReduce,此外还引入了对象存储Hadoop Ozone;其中Common提供其他模块共用的库和工具[3]。框架先把文件切分为数据块,分散存放在集群各计算节点上,再把计算代码送往相应节点就地执行,从而利用数据局部性减少网络传输[3]。
HDFS采用主从结构,由NameNode管理元数据、DataNode存放数据块,并以多副本方式保证可靠性;其副本数默认为3,两份置于同一机架、一份置于另一机架。文件系统通过TCP/IP通信,客户端之间使用远程过程调用交互,且并非完全符合POSIX规范,以此换取更高的吞吐性能。
MapReduce把处理过程抽象为Map与Reduce两个阶段:Map函数把输入数据转换为键值对列表,Reduce函数按键对列表归并汇总;框架对Map输出先排序再交给Reduce任务,并负责任务调度、监控与失败任务的重试。多个作业可串联为有向无环图,依次执行完成复杂计算。
Hadoop 2.0引入的YARN把资源管理与任务调度监控分离:ResourceManager负责整体资源分配,NodeManager作为单机代理监控资源使用并汇报,每个应用另有ApplicationMaster申请资源容器、跟踪运行状态[5]。这一改动使YARN不再只是单一计算框架,而成为可承载多种计算框架的管理平台。
所有Hadoop模块都建立在同一假设之上:单台或多台机器的硬件故障属于常见情况,应由框架在软件中自动处理,而不依赖硬件提供高可用性[1][3]。
发展历程
Hadoop的源头是开源网络搜索引擎项目Nutch,该项目始于2002年,本身是Lucene项目的一部分,早期目标是构建全网搜索引擎并解决海量网页的存储与索引问题[2][4]。2004年谷歌发表阐述MapReduce分布式编程思想的论文,Nutch同年仿照谷歌文件系统实现了自己的分布式文件系统NDFS,即HDFS的前身;2005年Nutch开源实现了MapReduce[2]。
2006年2月,NDFS与MapReduce从Nutch中独立出来,成为Lucene的子项目并定名为Hadoop,同年Doug Cutting加入雅虎,Hadoop正式立项以支持两者的独立发展[2][6]。2008年1月,Hadoop成为Apache顶级项目;同年4月,它在910个节点组成的集群上用209秒完成1TB数据排序,创下当时的世界纪录[2]。2009年5月,雅虎团队使用Hadoop把1TB数据排序时间缩短至62秒[6]。
版本更替上,Apache Hadoop分为两代:第一代包含0.20.x、0.21.x和0.22.x,其中0.20.x演化为稳定的1.0.x;第二代包含0.23.x和2.x,采用包含YARN的全新架构[2]。2017年前后Apache发布Hadoop 3.0,其组件构成与2.0相近,重点在性能优化,例如HDFS引入纠删码与多NameNode支持[7][4]。
应用
Hadoop在互联网领域应用最为集中。2007年雅虎在森尼韦尔总部建成名为M45的Hadoop集群,包含4000个处理器和1.5PB容量[2]。Facebook主要将Hadoop用于日志处理、推荐系统与数据仓库[2]。国内采用Hadoop的企业包括百度、淘宝、网易、华为和中国移动等[2]。
围绕Hadoop核心形成了大量互补的子项目与工具,如HBase、Hive、Pig、ZooKeeper、Chukwa、Avro等,分别提供分布式数据库、数据仓库、数据流语言、协调服务与数据序列化等能力[2][1]。近年来Spark等新框架被不少组织用于替代MapReduce执行计算,但仍运行在Hadoop的存储与调度设施之上[8]。
在商业发行方面,Cloudera于2009年推出首个Hadoop商业化版本,此后Cloudera、Hortonworks与MapR等公司围绕Hadoop提供发行版与技术服务[9]。
局限
HDFS面向一次写入、多次读取的场景,不支持文件并发写入与任意位置修改,因此不适于需要频繁改写数据或并发写操作的系统[5]。NameNode集中保存元数据,文件数量极多尤其是小文件众多时可能成为瓶颈,HDFS Federation通过让多个NameNode分别服务不同命名空间来部分缓解这一问题。
MapReduce的抽象层次较低,只提供Map与Reduce两类操作,表达力有限;复杂计算需拆成大量作业,作业间的依赖由开发者自行管理,中间结果也要写入文件系统。由于Reduce任务必须等所有Map任务完成后才能开始,其延迟较高,主要适用于批处理,对交互式与实时数据处理支持不足,迭代计算的性能也较差。
早期架构还存在单点故障隐患:在Hadoop 0.20及以前版本中,JobTracker一旦失效,所有正在进行的作业都会丢失。HDFS同样长期面临NameNode单点问题,2.x版本才加入高可用能力,可在主节点故障时切换到备份节点。此外,HDFS不能被现有操作系统直接挂载,作业前后进出数据较为不便,需要借助用户态文件系统等方式解决。
参见
-
HDFS —— Hadoop的分布式文件系统模块,负责海量数据的可靠存储。
-
MapReduce —— Hadoop的核心计算模型,把处理任务分解为Map与Reduce两个阶段。
-
YARN —— Hadoop 2.0引入的资源管理与任务调度框架。
-
Apache Spark —— 可与Hadoop存储设施配合使用、以内存计算见长的数据处理引擎。
-
Hive —— 建立在Hadoop之上的数据仓库组件,提供类SQL的查询能力。
-
Doug Cutting —— Hadoop项目的主要创建者之一。
参考资料
- 什么是 Hadoop?它有哪些用途?| Google Cloud - 什么是 Apache Hadoop? [引用日期2026-10-29]
- 《大数据技术原理与应用(第2版)》 [引用日期2026-10-29]
- Apache Hadoop [引用日期2026-10-29]
- Hadoop 概述 [引用日期2026-10-29]
- 北大Hadoop实践教程精要笔记 [引用日期2026-10-29]
- 厦门大学计算机科学系研究生课程 [引用日期2026-10-29]
- Hadoop 概述 [引用日期2026-10-29]
- hadoop-creator-cutting-talks-big-data-past-present-future [引用日期2026-10-29]
- 大数据:Hadoop平台概述 [引用日期2026-10-29]